Взаимодействие с 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