Управление через блютуз контроллером TXT
Управление через блютуз контроллером TXT
У кого опыт подскажите в какую сторону капать.
- Mr.Kubikus
- Сотрудник ПАКПАК
- Сообщения: 1020
- Зарегистрирован: 22 окт 2010, 23:57
Re: Управление через блютуз контроллером TXT
Добрый день!
При подключении к контроллеру TXT через беспроводной интерфейс Bluetooth он отображается в Windows как отдельный сетевой интерфейс. Адрес контроллера в этом режиме - 192.168.9.2. С ним можно работать через ROBO Pro или через API из программы, написанной на Python или C/С++.
Можете описать вашу задачу? Как вы планируете использовать Bluetooth?
При подключении к контроллеру TXT через беспроводной интерфейс Bluetooth он отображается в Windows как отдельный сетевой интерфейс. Адрес контроллера в этом режиме - 192.168.9.2. С ним можно работать через ROBO Pro или через API из программы, написанной на Python или C/С++.
Можете описать вашу задачу? Как вы планируете использовать Bluetooth?
Re: Управление через блютуз контроллером TXT
Я хочу использовать для управление с телефона. Я написал программу который отсылает команды через блютуз.
- Mr.Kubikus
- Сотрудник ПАКПАК
- Сообщения: 1020
- Зарегистрирован: 22 окт 2010, 23:57
Re: Управление через блютуз контроллером TXT
В контроллере TXT для связи через Bluetooth используется профиль Personal Area Network (PAN). Если в вашем телефоне поддерживается такой профиль, то тогда можно реализовать обмен данными. Подскажите, пожалуйста, какой телефон и какая операционная система у вас?
Re: Управление через блютуз контроллером TXT
Redmi Note 6 Pro. Android 8.1.0
- Mr.Kubikus
- Сотрудник ПАКПАК
- Сообщения: 1020
- Зарегистрирован: 22 окт 2010, 23:57
Re: Управление через блютуз контроллером TXT
На официальном сайте указано, что ваш телефон поддерживает версию 5.0 стандарта Bluetooth. Это хорошо. Скорее всего ваш тлф поддерживает профили PAN или SPP. Связаться с TXT можно будет по любому из двух:
* PAN - Personal Area Networking Profile
* SPP - Serial Port Profile
Примеры реализации обмена данными через Bluetooth для ОС Android:
* Ведение
* Обмен через профиль PAN
* Обмен через профиль SPP
Вы можете показать ваш исходный код? Тогда будет ясно куда двигаться дальше.
* PAN - Personal Area Networking Profile
* SPP - Serial Port Profile
Примеры реализации обмена данными через Bluetooth для ОС Android:
* Ведение
* Обмен через профиль PAN
* Обмен через профиль SPP
Вы можете показать ваш исходный код? Тогда будет ясно куда двигаться дальше.
Re: Управление через блютуз контроллером TXT
Код: Выделить всё
//Called when application is started.
var sum = "";
function OnStart()
{
app.SetOrientation( "Portrait" );
//Create the main layout
layHeader=app.CreateLayout("Absolute","Vertical");
text1=app.CreateText("Пульт",1,0.1,"Center");
text2=app.CreateText("блютуз - ардуино",1,0.1,"Center");
text1.SetPadding(0,0.0,0,0);
text1.SetTextSize(20);
text2.SetPadding(0,0.05,0,0);
text2.SetTextSize(20);
text1.SetBackground("/Sys/Img/BlueBack.jpg");
layHeader.AddChild(text1);
layHeader.AddChild(text2);
lst = app.CreateList( "Список обнаруженных bluetuuth", 0.9, 0.4 );
lst.SetPosition(0.06,0.1,0.9,0.25);
lst.SetBackColor( "black" );
lst.SetOnTouch( lst_OnTouch );
layHeader.AddChild( lst );
//Get a list of paired devices into listview.
var devices = app.GetPairedBtDevices();
for( d in devices)
lst.AddItem( devices[d].name, devices[d].address );
bt = app.CreateBluetoothSerial();
bt.SetOnConnect( bt_OnConnect )
bt.SetOnReceive( bt_OnReceive );
bt.SetSplitMode( "End", "\n" );
btn1=app.CreateButton("[fa-bars]",-1,-1,"FontAwesome");
btn1.SetPosition(0,0,0.18,0.1);
btn1.SetOnTouch(btn1_OnTouch);
btn1.SetTextSize(30);
layHeader.AddChild(btn1);
btn2=app.CreateButton("[fa-close]",-1,-1,"FontAwesome");
btn2.SetOnTouch(btn2_OnTouch);
btn2.SetTextSize(30);
btn2.SetPosition(0.82,0,0.18,0.10);
layHeader.AddChild(btn2);
//============
lay1th = app.CreateLayout( "linear", "Horizontal" );
lay1th.SetPosition(0.05,0.46,0.9,0.4);
AddButton( lay1th, "c" );
layHeader.AddChild( lay1th );
//Создаём изображение стрелки вперёд шириной 0.15 ширины экрана
imgFwd = app.CreateImage( "/Sys/Img/Forward.png", 0.15 );
imgFwd.SetPosition( 0.43,0.68 );
imgFwd.SetOnTouch( imgFwd_OnTouch );
layHeader.AddChild( imgFwd );
//Создаём изображение стрелки влево
imgLeft = app.CreateImage( "/Sys/Img/Left.png", 0.15 );
imgLeft.SetPosition( 0.23,0.77 );
imgLeft.SetOnTouch( imgLeft_OnTouch );
layHeader.AddChild( imgLeft );
//Создаём изображение стрелки вправо
imgRight = app.CreateImage( "/Sys/Img/Right.png", 0.15 );
imgRight.SetPosition( 0.64,0.77 );
imgRight.SetOnTouch( imgRight_OnTouch );
layHeader.AddChild( imgRight );
//Создаём изображение кнопки назад
imgRev = app.CreateImage( "/Sys/Img/Reverse.png", 0.15 );
imgRev.SetPosition( 0.43,0.87 );
imgRev.SetOnTouch( imgRev_OnTouch );
layHeader.AddChild( imgRev );
//Добавляем слой к программе
//Создаём изображение стрелки вперёд шириной 0.15 ширины экрана
imgFwd1 = app.CreateImage( "/Sys/Img/Forward.png", 0.15 );
imgFwd1.SetPosition( 0.2,0.42 );
imgFwd1.SetOnTouch( imgFwd1_OnTouch );
layHeader.AddChild( imgFwd1 );
//Создаём изображение кнопки назад
imgRev1 = app.CreateImage( "/Sys/Img/Reverse.png", 0.15 );
imgRev1.SetPosition( 0.2,0.55 );
imgRev1.SetOnTouch( imgRev1_OnTouch );
layHeader.AddChild( imgRev1 );
//Создаём изображение стрелки вперёд шириной 0.15 ширины экрана
imgFwd2 = app.CreateImage( "/Sys/Img/Forward.png", 0.15 );
imgFwd2.SetPosition( 0.65,0.42 );
imgFwd2.SetOnTouch( imgFwd2_OnTouch );
layHeader.AddChild( imgFwd2 );
//Создаём изображение кнопки назад
imgRev2 = app.CreateImage( "/Sys/Img/Reverse.png", 0.15 );
imgRev2.SetPosition( 0.65,0.55 );
imgRev2.SetOnTouch( imgRev2_OnTouch );
layHeader.AddChild( imgRev2 );
//Создаём слайдер
skb = app.CreateSeekBar( 0.8 );
skb.SetOnTouch( skb_OnTouch );
skb.SetPosition( 0.05,0.35 );
skb.SetRange( 1.25 );
skb.SetValue( 0.5 );
layHeader.AddChild( skb );
CreateDrawer();
app.AddDrawer( drawerScroll, "Left", drawerWidth );
app.AddLayout( layHeader );
}
function btn1_OnTouch()
{
var c=confirm("Exit app?");
if(c)
{
app.Exit();
}}
function btn2_OnTouch()
{
var c=confirm("Закрыть");
if(c)
{
app.Exit();
}}
function lst_OnTouch( title, body, type, index )
{
app.ShowProgress( "Connecting..." );
bt.Connect( body );
lst.SelectItemByIndex( index );
}
function bt_OnConnect( ok )
{
app.HideProgress();
if( ok ) {
app.ShowPopup( "Connected!" );
}
else {
app.ShowPopup( "Failed to connect!" );
lst.SelectItemByIndex( -1 );
}
}
function bt_OnReceive( data )
{
app.ShowPopup( data );
}
function AddButton( lay, name )
{
btn = app.CreateButton( name, 0.17, 0.08, "Alum" );
btn.SetTextSize(20);
btn.SetOnTouch( btns_OnTouch );
lay.AddChild( btn );
}
function btns_OnTouch()
{
app.Vibrate( "0,100" );
//Get button text.
btn = this;
var txt = btn.GetText();
bt.Write( txt + "\n" );
//Handle equals button.
//if( txt=="=" ) CalcResult();
}
//*******************************
function btn1_OnTouch()
{
app.OpenDrawer();
}
//Создаёт содержимое выдвижного меню
function CreateDrawer()
{
//Создаём слой для выдвижного меню
//(Помещаем слой внутрь скроллера, чтобы большие меню помещались полностью)
drawerWidth = 0.75;
drawerScroll = app.CreateScroller( drawerWidth, 1 );
drawerScroll.SetBackColor( "White" );
layDrawer = app.CreateLayout( "Linear", "Left" );
drawerScroll.AddChild( layDrawer );
//Создаём слой сверху выдвижного меню
layDrawerTop = app.CreateLayout( "Absolute" );
layDrawerTop.SetBackground( "/Sys/Img/GreenBack1.png" );
layDrawerTop.SetSize( drawerWidth, 0.23 );
layDrawer.AddChild( layDrawerTop );
//Добавляем иконку на верхний слой
var img = app.CreateImage( "/Sys/Img/Icon.png", 0.15 );
img.SetPosition( drawerWidth*0.06, 0.04 );
layDrawerTop.AddChild( img );
//Добавляем имя пользователя на верхний слой
var txtUser = app.CreateText( "Dave Smart",-1,-1,"Bold");
txtUser.SetPosition( drawerWidth*0.07, 0.155 );
txtUser.SetTextColor( "White" );
txtUser.SetTextSize( 13.7, "dip" );
layDrawerTop.AddChild( txtUser );
//Добавляем электронный адрес на верхний слой
txtEmail = app.CreateText( "david@droidscript.org");
txtEmail.SetPosition( drawerWidth*0.07, 0.185 );
txtEmail.SetTextColor( "#bbffffff" );
txtEmail.SetTextSize( 14, "dip" );
layDrawerTop.AddChild( txtEmail );
//Создаём слой для меню
var layMenu = app.CreateLayout( "Linear", "Left" );
layDrawer.AddChild( layMenu );
//Добавляем список на слой меню (с опцией "Menu")
var listItems = "Главное::[fa-home],Пользователи::[fa-users],Акции::[fa-tag]";
lstMenu1 = app.CreateList( listItems, drawerWidth, -1, "Menu,Expand" );
lstMenu1.SetColumnWidths( -1, 0.35, 0.18 );
lstMenu1.SelectItemByIndex( 0, true );
lstMenu1.SetItemByIndex( 0, "Главное");
lstMenu1.SetOnTouch( lstMenu_OnTouch );
layMenu.AddChild( lstMenu1 );
//Добавляем разделитель на слой меню
var sep = app.CreateImage( null, drawerWidth,0.001,"fix", 2,2 );
sep.SetSize( -1, 1, "px" );
sep.SetColor( "#cccccc" );
layMenu.AddChild( sep );
//Добавляем заголовок между списками
txtTitle = app.CreateText( "Все ярлыки",-1,-1,"Left");
txtTitle.SetTextColor( "#666666" );
txtTitle.SetMargins( 16,12,0,0, "dip" );
txtTitle.SetTextSize( 14, "dip" );
layMenu.AddChild( txtTitle );
//Добавляем второй список на слой меню
var listItems = "Избранное::[fa-star],Важное::[fa-flag],Настройки::[fa-cog]";
lstMenu2 = app.CreateList( listItems, drawerWidth, -1, "Menu,Expand" );
lstMenu2.SetColumnWidths( -1, 0.35, 0.18 );
lstMenu2.SetOnTouch( lstMenu_OnTouch );
layMenu.AddChild( lstMenu2 );
}
//Вызывается при выборе элемента меню
function lstMenu_OnTouch( title, body, type, index )
{
//Закрываем выдвижное меню
app.CloseDrawer( "Left" );
//Подсвечиваем выбранный элемент меню
if( this==lstMenu1 ) lstMenu2.SelectItemByIndex(-1);
else lstMenu1.SelectItemByIndex(-1);
this.SelectItemByIndex( index, true );
app.ShowPopup( title );
}
//Вызывается при открытии или закрытии выдвижного меню
function OnDrawer( side, state )
{
console.log( side + " : " + state );
}
//Вызывается при нажатии аппаратной кнопки меню
function OnMenu( name )
{
app.OpenDrawer();
}
function imgFwd_OnTouch( e )
{
//Если палец опустился на стрелку
if ( e.action=="Down" )
{
bt.Write("Forward" );
}
else if ( e.action=="Up" )
{
bt.Write("Stop" );
}
}
function imgRev_OnTouch( e )
{
if ( e.action=="Down" )
{
bt.Write("Backward" );
}
else if ( e.action=="Up" )
{
bt.Write("Stop" );
}
}
//Вызывается по нажатию кнопки влево
function imgLeft_OnTouch( e )
{
if ( e.action=="Down" )
{
bt.Write("Left" );
}
else if ( e.action=="Up" )
{
bt.Write("Stop" );
}
}
//Вызывается по нажатию кнопки вправо
function imgRight_OnTouch( e )
{
if( e.action=="Down" )
{
bt.Write("Right" );
}
else if ( e.action=="Up" )
{
bt.Write("Stop" );
}
}
function imgFwd1_OnTouch( e )
{
if ( e.action=="Down" )
{
bt.Write("u");
}
else if ( e.action=="Up" )
{
bt.Write("o");
}
}
function imgRev1_OnTouch( e )
{
if ( e.action=="Down" )
{
bt.Write("p");
}
else if ( e.action=="Up" )
{
bt.Write("o");
}
}
function imgFwd2_OnTouch( e )
{
//Если палец опустился на стрелк
if ( e.action=="Down" )
{
bt.Write("+");
}
else if ( e.action=="Up" )
{
bt.Write("k");
}
}
function imgRev2_OnTouch( e )
{
if ( e.action=="Down" )
{
bt.Write("-");
}
else if ( e.action=="Up" )
{
bt.Write("k");
}
}
function skb_OnTouch( value )
{
app.ShowPopup( "Значение = " + value );
value=value*200;
bt.Write("Speed" + value);
}
- Mr.Kubikus
- Сотрудник ПАКПАК
- Сообщения: 1020
- Зарегистрирован: 22 окт 2010, 23:57
Re: Управление через блютуз контроллером TXT
Ok. Вижу, что это JavaScript. Верно? Поясните, как вы запускаете ваше приложение, написанное на JavaScript, на телефоне? Наверное вы используете какую-то специальную среду исполнения, которая выполняет ваш код?
Re: Управление через блютуз контроллером TXT
С помощью программы DroidScript перевожу в apk файл и устанавливаю на андроид.
- Mr.Kubikus
- Сотрудник ПАКПАК
- Сообщения: 1020
- Зарегистрирован: 22 окт 2010, 23:57
Re: Управление через блютуз контроллером TXT
Ясно. Предлагаю реализовать управление с использованием технологии Bluetooth PAN. Для этого нам понадобятся две программы - сервер и клиент. Сервер будет работать на контроллере, а клиент, выполняющийся на телефоне, будет подключаться к этому серверу через радиолинию Bluettoh.
Заготовка для клиента у вас уже есть. Надо будет её немного изменить. Сервер для контроллера придется написать на питоне или C/С++.
Прежде чем мы перейдем к разработке ПО надо убедиться, что ваш телефон может подключаться к TXT через Bluettoth с использованием профиля Bluetooth PAN чтобы использовать контроллер как точку доступа к сети. Для проверки предлагаю выполнить следующие шаги:
На контроллере TXT:
1.1 Включить интерфейс Bluetooth
1.2 Включить встроенный HTTP-сервер согласно инструкции.
На телефоне:
2.1 Отключить обмен данными через мобильную сеть
2.2 Включить интерфейс Bluetooth
2.3 Выполнить поиск устройств в сети Bluettoh и подключиться к контроллеру TXT
2.4 В настройках подключения к TXT включить режим "Доступ к интернету". У вас этот пункт может называться по другому.
2.5 Запустить браузер в телефоне и отрыть страницу с адресом http://192.168.9.2
2.6 Вы должны увидеть страницу файлового менеджера контроллера TXT.
Если вы дошли до пункта 2.6 значит можно двигаться дальше.
Заготовка для клиента у вас уже есть. Надо будет её немного изменить. Сервер для контроллера придется написать на питоне или C/С++.
Прежде чем мы перейдем к разработке ПО надо убедиться, что ваш телефон может подключаться к TXT через Bluettoth с использованием профиля Bluetooth PAN чтобы использовать контроллер как точку доступа к сети. Для проверки предлагаю выполнить следующие шаги:
На контроллере TXT:
1.1 Включить интерфейс Bluetooth
1.2 Включить встроенный HTTP-сервер согласно инструкции.
На телефоне:
2.1 Отключить обмен данными через мобильную сеть
2.2 Включить интерфейс Bluetooth
2.3 Выполнить поиск устройств в сети Bluettoh и подключиться к контроллеру TXT
2.4 В настройках подключения к TXT включить режим "Доступ к интернету". У вас этот пункт может называться по другому.
2.5 Запустить браузер в телефоне и отрыть страницу с адресом http://192.168.9.2
2.6 Вы должны увидеть страницу файлового менеджера контроллера TXT.
Если вы дошли до пункта 2.6 значит можно двигаться дальше.