Цель работы: научиться передавать данные с клавиатуры дистанционно через 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>
#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 - все работает на УРА!
Понадобиться:
Bluetooth Shield
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();}
#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 - все работает на УРА!
здорово!! Спасибо!! С помощью библиотек работа упрощается в разы!!!
ОтветитьУдалить