Взаимодействие с bluetooth модулем на Intel Galileo
К микрокомпьютеру Intel Galileo нам необходимо было подключить bluetooth модуль для установки связи между двумя устройствами.
Во время выполнения этой задачи было прочитано множество литературы по Arduino и Intel Galileo (например - [1]). В результате были выяснены следующие проблемы:
1. Intel Galileo не поддерживает библиотеку NewSoftwareSerial.
В интернете на форумах также не было обнаружено решения данной проблемы. И в результате чтения мануалов по Intel Galileo. Мы выяснили, что данная библиотека в Intel Galileo реализована на hardware-уровне.
В итоге нами был написан оригинальный код, который реализует следующий функционал:
1. Управление включением bluetooth-модуля.
2. Передача информации со смартфона Android на микросхему Intel Galileo: мы передавали команды включить и выключить диоды на различных портах (13, 7, 6, 4, 2). При этом возникла проблема: при включении диода на 13 порту — он включался и горел до того, пока его не выключили. А при включении диодов на других портах (7, 6, 4, 2) они только мгновенно вспыхивали
3. Ними был реализован интерфейс поиска доступных bluetooth-devices и вывод информации о них.
_____________________________________________________________________________________
//#include <SoftwareSerial.h> //Software Serial Port
#define RxD 1
#define TxD 0
#define PINLED 9
#define LEDON() digitalWrite(PINLED, HIGH)
#define LEDOFF() digitalWrite(PINLED, LOW)
//#define DEBUG_ENABLED 1
//Serial blueToothSerial(RxD,TxD);
void setup()
{
//Serial.begin(9600);
//pinMode(RxD, INPUT);
//pinMode(TxD, OUTPUT);
pinMode(PINLED, OUTPUT);
LEDOFF();
setupBlueToothConnection();
}
void loop()
{
char recvChar;
while(1)
{
if(Serial1.available())
{//check if there's any data sent from the remote bluetooth shield
recvChar = Serial1.read();
Serial.print(recvChar);
if(recvChar == '1')
{
LEDON();
}
else if(recvChar == '0')
{
LEDOFF();
}
}
}
}
void setupBlueToothConnection()
{
Serial1.begin(38400); // Set BluetoothBee BaudRate to default baud rate 38400
Serial1.print(" +STWMOD=0 "); // set the bluetooth work in slave mode
Serial1.print(" +STNA=SeeedBTSlave "); // set the bluetooth name as "SeeedBTSlave"
Serial1.print(" +STOAUT=1 "); // Permit Paired device to connect me
Serial1.print(" +STAUTO=0 "); // Auto-connection should be forbidden here
delay(2000); // This delay is required.
Serial1.print(" +INQ=1 "); // make the slave bluetooth inquirable
Serial1.println("The slave bluetooth is inquirable!");
delay(2000); // This delay is required.
Serial1.flush();
}//код для включения лампочки по bluetooth
_____________________________________________________________________________________
//#include <SoftwareSerial.h> //Software Serial Port
#define RxD 1
#define TxD 0
#define PINLED 13
//#define PINLEDT 9
#define LEDON() digitalWrite(PINLED, HIGH)
//#define LEDONT() digitalWrite(PINLEDT, HIGH)
//#define LEDOFFT() digitalWrite(PINLEDT, LOW);
#define LEDOFF() digitalWrite(PINLED, LOW)
//#define DEBUG_ENABLED 1
//Serial blueToothSerial(RxD,TxD);
void setup()
{
Serial.begin(9600);
//pinMode(RxD, INPUT);
//pinMode(TxD, OUTPUT);
pinMode(PINLED, OUTPUT);
LEDOFF();
setupBlueToothConnection();
}
void loop()
{
char recvChar;
char buf[1000];
int len=0;
while(1)
{
if(Serial1.available())
{//check if there's any data sent from the remote bluetooth shield
recvChar = Serial1.read();
Serial.print(recvChar);
/*if(recvChar == '1')
{
LEDON();
}
/*if(recvChar == '2')
{
LEDONT();
}
else if(recvChar == '0')
{
LEDOFF();
}*/
if(recvChar==' '||recvChar==' ')
{
if(buf[0]=='+'&&buf[1]=='R'&&buf[2]=='T'&&buf[3]=='I'&&buf[4]=='N'&&buf[5]=='Q'&&buf[6]=='=')
{
LEDON();
}
len=0;
}
else
{
buf[len]=recvChar;
if(len<999)
len++;
}
}
if(Serial.available())
{
recvChar=Serial.read();
Serial1.print(recvChar);
}
}
/*if()
{
LEDON();
}*/
}
void setupBlueToothConnection()
{
Serial1.begin(38400); // Set BluetoothBee BaudRate to default baud rate 38400
// Serial1.print(" +STWMOD=0 "); // set the bluetooth work in slave mode
// Serial1.print(" +STNA=SeeedBTSlave "); // set the bluetooth name as "SeeedBTSlave"
// Serial1.print(" +STOAUT=1 "); // Permit Paired device to connect me
// Serial1.print(" +STAUTO=0 "); // Auto-connection should be forbidden here
// delay(2000); // This delay is required.
// Serial1.print(" +INQ=1 "); // make the slave bluetooth inquirable
// Serial1.println("The slave bluetooth is inquirable!");
Serial1.print(" +STWMOD=1 "); // set the bluetooth work in slave mode
Serial1.print(" +STNA=SmartTracker "); // set the bluetooth name as "SeeedBTSlave"
Serial1.print(" +STOAUT=1 "); // Permit Paired device to connect me
Serial1.print(" +STAUTO=0 "); // Auto-connection should be forbidden here
delay(2000); // This delay is required.
Serial1.print(" +STECHO=1 "); // make the slave bluetooth inquirable
delay(2000); // This delay is required.
Serial1.print(" +INQ=1 "); // make the slave bluetooth inquirable
Serial1.flush();
}//код для поиска ближайших устройств
_____________________________________________________________________________________
Итог:
1. Нами реализован функционал поиска близлежащих устройств bluetooth.
2. Подключение к доступному устройству.
3. Визуализация доступности устройств свечением светодиода.
Список литературы:
1. https://communities.intel.com/thread/51050