понедельник, 26 марта 2012 г.

Bluetooth Shield для новичков.

Цель работы: научиться передавать данные с клавиатуры дистанционно через bluetooth на целевое устройство.
Понадобиться:
Bluetooth Shield
и любой arduino совместимый контроллер.
  Bluetooth интерфейс был выбран не случайно, он хорошо себя зарекомендовал для организации радиосвязи на малых расстояниях. Так-же это вопрос универсальности - сейчас почти во всех мобильных устройствах есть этот интерфейс. Итак приступим к освоению.
  Модуль bluetooth и базовый модуль с микроконтроллером не составила труда соединить - как показано на рисунке.
Переключатель питания на базовом модуле был установлен в положение 5В, переключатель на модуле bluetooth в положение "Not Connected", перемычки я тоже не трогал - установлены, как показано на рисунке. После сбора конструкции и подключения питания на модуле начал мигать светодиод D1.
  Далее нужно написать какую-то программу - прошивку. Тут возникли некоторые трудности! Дело в том, что у меня стоит последняя версия среды разработки ARDUINO 1.0 - 2011.11.30. Если все сделать по инструкции, то прошивка не компилируется, ругается на конфликт виртуальной функции write в библиотеке "NewSoftSerial". Установка новой версии библиотеки не помогла. Все дело в том, что в новой среде разработки уже предусмотрена библиотека "SoftwareSerial" - которая сделана на основе "NewSoftSerial". В моем случае она работает совершенно так-же. Нужно скачать пример работы bluetooth, распаковать его в папку libraries(которая лежит в папке со средой разработки), далее открыть сам пример и переименовать название библиотеки и класса:


#include <SoftwareSerial.h>   //Software Serial Port
#define RxD 6#define TxD 7
#define DEBUG_ENABLED  1SoftwareSerial blueToothSerial(RxD,TxD);void setup()   Serial.begin(9600);  pinMode(RxD, INPUT);  pinMode(TxD, OUTPUT);  setupBlueToothConnection();void loop()   char recvChar;  while(1){    if(blueToothSerial.available()){//check if there's any data sent from the remote bluetooth shield      recvChar = blueToothSerial.read();      Serial.print(recvChar);    }    if(Serial.available()){//check if there's any data sent from the local serial terminal, you can add the other applications here      recvChar  = Serial.read();      blueToothSerial.print(recvChar);    }  }void setupBlueToothConnection(){  blueToothSerial.begin(38400); //Set BluetoothBee BaudRate to default baud rate 38400  blueToothSerial.print("\r\n+STWMOD=0\r\n"); //set the bluetooth work in slave mode  blueToothSerial.print("\r\n+STNA=SeeedBTSlave\r\n"); //set the bluetooth name as "SeeedBTSlave"  blueToothSerial.print("\r\n+STOAUT=1\r\n"); // Permit Paired device to connect me  blueToothSerial.print("\r\n+STAUTO=0\r\n"); // Auto-connection should be forbidden here  delay(2000); // This delay is required.  blueToothSerial.print("\r\n+INQ=1\r\n"); //make the slave bluetooth inquirable   Serial.println("The slave bluetooth is inquirable!");  delay(2000); // This delay is required.  blueToothSerial.flush();}

  Ура! Компиляция прошла успешно! Для того, что бы убедиться в работоспособности данного кода нужно подключиться к устройству при помощи bluetooth-адаптера в режиме  com- порта (пароль 0000), запустить какую-нибудь программу, позволяющую писать в порт (например PuTTY) выбрать Serial - тип соединения и указать com-порт. Если открыть так-же serial-monitor в среде разработки, получиться что-то вроде чата между этими окнами.
  Путем добавления нехитрых строк кода, можно включать и выключать встроенный в arduino светодиод:

#include <SoftwareSerial.h>
#define RxD 6
#define TxD 7

#define DEBUG_ENABLED  1

SoftwareSerial blueToothSerial(RxD,TxD);

void setup() 

  Serial.begin(9600);
  pinMode(RxD, INPUT);
  pinMode(TxD, OUTPUT);
  setupBlueToothConnection();
  pinMode(13, OUTPUT); 

void loop() 

  char recvChar;
  while(1)
  {
    if(blueToothSerial.available())
    {//check if there's any data sent from the remote bluetooth shield
      recvChar = blueToothSerial.read();
      Serial.print(recvChar);
      if(recvChar == '1')
      {
        digitalWrite(13, LOW);
        blueToothSerial.print("Lamp OFF\r\n");
      }
      if(recvChar == '2')
      {
        digitalWrite(13, HIGH);
        blueToothSerial.print("Lamp ON\r\n");
      }
    }
    if(Serial.available()){//check if there's any data sent from the local serial terminal, you can add the other applications here
      recvChar  = Serial.read();
      blueToothSerial.print(recvChar);
    }
  }


void setupBlueToothConnection()
{
  blueToothSerial.begin(38400); //Set BluetoothBee BaudRate to default baud rate 38400
  blueToothSerial.print("\r\n+STWMOD=0\r\n"); //set the bluetooth work in slave mode
  blueToothSerial.print("\r\n+STNA=RBC\r\n"); //set the bluetooth name as "SeeedBTSlave"
  blueToothSerial.print("\r\n+STOAUT=1\r\n"); // Permit Paired device to connect me
  blueToothSerial.print("\r\n+STAUTO=0\r\n"); // Auto-connection should be forbidden here
  delay(2000); // This delay is required.
  blueToothSerial.print("\r\n+INQ=1\r\n"); //make the slave bluetooth inquirable 
  Serial.println("The slave bluetooth is inquirable!");
  delay(2000); // This delay is required.
  blueToothSerial.flush();
}
  Для включения служить кнопка 2 а для выключения кнопка 1. Так-же, как Вы видите, есть обратная связь - текстовое сообщение о включении/выключении. Для чистоты эксперимента можно подключить внешнее питание, отсоединить USB - все работает на УРА!


1 комментарий:

  1. здорово!! Спасибо!! С помощью библиотек работа упрощается в разы!!!

    ОтветитьУдалить