Контролируем устройства через bluetooth с помощью arduino

Components

A class for controlling and communicating through an ITead Studio
HC-05 Serial Port Module. This class inherits from the Stream class.

Methods:

The Stream class is extended with the following methods.

Determine HC-05 communications speed. Make this call in setup()
instead of . is still avaialble and can be used
inplace of if you know the HC-05 communications speed.

Specify the HC-05 communications speed. The speed is non-volatile so
call this only when the rate returned by findBaud() is not the one
you require.

Use this method when you need something besides the default no
parity, one stop bit settings that are the default.
CAUTION! The HC-05 supports many serial configurations that are not
compatible with an Arduino. For example, the Arduino software serial
port port supports only no parity, one stop bit settings.

Send a command to the module. The ‘key’ (cmdPin) pin is activated to
put the module in command mode where ‘AT’ commands are recognized.

This is an alternate command mode. This 2nd command mode has the
advantage forcing the HC-05 into a know communications speed: 38400.
However, entering this 2nd command mode requires switching the power
to the HC-05.

Exits the alternate command mode, leaving the power to the HC-05 on.

Example Programs

The default library configuration uses a software serial port. The
example programs will work with either a hardware or a software serial
port. The configuration is changed by modifying the file.

This application is one of the reasons I wrote this library. I
wanted to be able to change the name reported by the HC-05 because I
have multiple HC-05 modules that I kept mixing up. With this program
you can set the name of the HC-05 module to reflect something
physically identifying (or anything else that helps you tell your
modules apart).

Echo characters as they are received.

Tests the disconnect command (AT+DISC). This was something I used
during development and probably is not of general interest.

This example used the 2nd command mode to recover the HC-05 when
its serial port settings are incompatible with the Arduino serial
ports. Power to HC-05 must be controlled by an Arduino pin.
See the diagram for suitable connections.

Tests both setBaud() and findBaud() by trying every combination of
supported rates. The output from this example looks best if
DEBUG_HC05 is not defined. (Simply comment out that line in HC05.h).

Step 1: Identifying Your Module

First thing you need to do is identify your module. It can be either HC05 or HC06. Both the modules are same in functionality except the pinout. Also HC05 can act as both master and slave whereas HC06 functions only as slave. It’s hard to differentiate between the two only by seeing. One probable way would be checking the back of the breakout board. If it has «JY-MCU» written on the back, it’s probably a HC06. Mine has «ZS-040» written and it is a HC05. And the HC06 module I tested had a bluetooth sign behind with three pcb footprints(refer to figure2). To confirm the device identity, you can power up the module, search for new device on your pc or mobile, and look for HC05 or HC06 on found device list.

Introduction: Arduino AND Bluetooth HC-05 Connecting Easily

By Mohannad RawashdehMohannad RawashdehFollow

More by the author:

About: Maker, PCB designer , electronics instructor from Jordan just one word ! I Adore electronics follow me on FB https://www.facebook.com/Mohannad-Rawashdeh-Raw-774983565988641/

More About Mohannad Rawashdeh »

Hello Every body , This is my first artical on Instructable.com , I’m so happy for that , and I will start by How to connect arduino with bluetooth , I suffered a lot of problems when I try to connect it as the website and instructable artical did , So i decided To share my experience with You The bluetooth module I will use today is HC-05 which is so familiar and cheap , Most tutorial on The website Connect the bluetooth with default Rx and Tx on the arduino Board , I faced a lot of problem and bluetooth didn’t work will . But arduino  support something Called Software Serial , which allow You to change any arduino board pin to serial pin so After reading this article you will be able to:1) Connect arduino Board with PC By Bluetooth , to send and receive data . 2)Connect arduino Board with Any android device . so you can send your information , Like Sensors reading , from arduino to PC Or android device , and you can build your Home automation system by bluetooth , and controlling your robot wirelessly

Объяснение программы для Raspberry Pi

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Программировать плату Raspberry Pi в нашем проекте мы будем с использованием языка Python3. Также можно использовать и язык C/C++ как и в плате Arduino, однако в данном случае преимуществом написания программы на языке python является то, что на нем написана специальная библиотека для работы с модулями nRF24l01, которую можно скачать с ее официальной страницы на github. Но здесь необходимо отметить, что наша программа на python и указанная библиотека должны находиться в одном и том же каталоге, иначе программа на python не сможет найти библиотеку. После скачивания библиотеки извлеките ее из архива и создайте отдельный каталог, в котором будут храниться все программы и библиотеки вашего проекта. Когда установка библиотеки будет закончена, можно приступать к написанию программы.

Первым делом в программе необходимо подключить (импортировать) все используемые библиотеки.

Python

import RPi.GPIO as GPIO
import time
import spidev
from lib_nrf24 import NRF24

1
2
3
4

importRPi.GPIO asGPIO

importtime

importspidev

fromlib_nrf24 importNRF24

Далее установим режим работы контактов (GPIO mode) платы Raspberry Pi «Broadcom SOC channel», что будет означать что мы будем обращаться к контактам платы по их физическим номерам (а не по их номерам на плате).

Python

GPIO.setmode(GPIO.BCM)

1 GPIO.setmode(GPIO.BCM)

Далее в программе мы зададим адреса каналов (pipe address) – они будут нужны для взаимодействия с приемной частью проекта на основе платы Arduino. Адреса укажем в шестнадцатеричном коде.

Python

pipes = , ]

1 pipes=0xE0,0xE0,0xF1,0xF1,0xE0,0xF1,0xF1,0xF0,0xF0,0xE0

Инициализируем модуль nRF24l01 используя контакты GPIO08 в качестве CE и GPIO25 в качестве CSN.

Python

radio.begin(0, 25)

1 radio.begin(,25)

Установим размер пакета (payload size) 32 бита, адрес канала 76, скорость передачи данных 1 Мбит/с и выходную мощность модуля на минимум.

Python

radio.setPayloadSize(32)
radio.setChannel(0x76)
radio.setDataRate(NRF24.BR_1MBPS)
radio.setPALevel(NRF24.PA_MIN)

1
2
3
4

radio.setPayloadSize(32)

radio.setChannel(0x76)

radio.setDataRate(NRF24.BR_1MBPS)

radio.setPALevel(NRF24.PA_MIN)

Откроем каналы и начнем в них запись данных. Также будем выводить на экран основные параметры (details) работы модуля nRF24l01.

Python

radio.openWritingPipe(pipes)
radio.printDetails()

1
2

radio.openWritingPipe(pipes)

radio.printDetails()

Подготовим сообщение в форме строки. Это сообщение мы будем передавать плате Arduino UNO.

Python

sendMessage = list(«Hi..Arduino UNO»)
while len(sendMessage) < 32:
sendMessage.append(0)

1
2
3

sendMessage=list(«Hi..Arduino UNO»)

whilelen(sendMessage)<32

sendMessage.append()

Начнем запись информации в радио модуль и будем продолжать запись пока не закончится вся строка для передачи. Одновременно с этим зафиксируем текущее время и выведем на экран сообщение об успешной передаче (в целях отладки).

Python

while True:
start = time.time()
radio.write(sendMessage)
print(«Sent the message: {}».format(sendMessage))
send
radio.startListening()

1
2
3
4
5
6

whileTrue

start=time.time()

radio.write(sendMessage)

print(«Sent the message: {}».format(sendMessage))

send

radio.startListening()

Если передача сообщения завершена и радио канал закрыт (не доступен) более 2-х секунд, то выведем на экран сообщение о том, что время истекло (timed out).

Python

while not radio.available(0):
time.sleep(1/100)
if time.time() — start > 2:
print(«Timed out.») # print error message if radio disconnected or not functioning anymore
break

1
2
3
4
5

whilenotradio.available()

time.sleep(1100)

iftime.time()-start>2

print(«Timed out.»)# print error message if radio disconnected or not functioning anymore

break

Закрываем прослушивание (listening) радио канала, закрываем соединение и заново открываем соединение спустя 3 секунды чтобы передать другое сообщение.

Python

radio.stopListening() # close radio
time.sleep(3) # give delay of 3 seconds

1
2

radio.stopListening()# close radio

time.sleep(3)# give delay of 3 seconds

Характеристики

Давайте подробнее разберёмся, какие характеристики имеет такой bluetooth модуль для ПК и различных проектов. Сами разработчики заявляют, что выдержали коммерческий стандарт в hc 05. Соответственно, для управления устройством будет достаточно специальной программы на смартфоне или компьютере, которая позволит отправлять и получать данные с датчика. Однако существует ограничение в области применения, ведь устойчивый сигнал, без использования усилителей, можно поймать лишь на 9 метрах от чипа

Учитывайте, что это сырые цифры, в которых во внимание не берутся преграды на пути волн

Сами hc чипы полностью совместимы с любыми адаптерами, что поддерживают SPP. На самой плате устройства размещается небольшая антенна, припаянная к верхнему слою в виде дорожки, похожей на змею. Характеристики девайса заявлены следующие:

  1. Активные частоты радиосвязи находятся в диапазоне 2.4-2.48 ГГц.
  2. Канал приспособлен к адаптивному переключению.
  3. Условная дальность связи – 10 метров, но в этой цифре не учитываются преграды и помехи.
  4. Максимальная скорость при обмене информацией – 115300 бод.
  5. Хранить чип можно в температурном диапазоне от — 40 до +85 градусов, а вот использовать – от -20 до +70.
  6. Для работы необходимо будет напряжение в 3.3 В, что мы рассмотрим чуть ниже.

Working of HC-05 Bluetooth Module:

The HC-05 Bluetooth Module can be used in two modes of operation: Command Mode and Data Mode.

Command Mode:

In Command Mode, we can communicate with the Bluetooth module through AT Commands to configure various settings and parameters of the Module. This includes the firmware information, changing Baud Rate, changing module name, etc. We can also use it to set HC-05 as a master or slave. To select either of the modes, we need to activate the Command Mode and sent the correct AT Commands. Baud rate is 38400bps in command mode.

Data Mode:

In this mode, the module is used for communicating with other Bluetooth devices i.e. data transfer happens in this mode. Exchange of data between devices. Baud rate is 9600bps in data mode.

Подключение модуля HC-06

Для соединения модуля HC-06 или подобного с Ардуино достаточно подключить его к питанию 5 V и GND, а выводы RXD и TXD соединить крест накрест с соответствующими выводами Ардуино. То есть RXD -> Tx, а TXD -> Rx.

Выводы модуля HC-06

Важный момент! Базовые версии Ардуино имеют один UART и он используется для связи по USB (для программирования), поэтому при включенном Bluetooth модуле общаться по USB не удастся! Для программирования Ардуино предусмотрите возможность отключения питания Bluetooth модуля, например отключения линии 5 V. После загрузки прошивки и отключения от USB, питание модуля можно включить, а к Ардуино подключить питание от батареи.

Схема соединения Bluetooth модуля с Ардуино

Arduino Source Codes

Description: So first we need to define the pins and some variables needed for the program. In the setup section, at the master, we set the LED pin as output and set it low right away, as well as, start the serial communication at 38400 baud rate. Similar, at the slave, we set the button pin as input, define the servo to which pin is connected and start the serial communication with the same baud rate.

In the loop section, in both code, with the Serial.available() function we will check whether there is available data in the serial port to be read and using the Serial.read() function we will read and store the data into the “state” variable. So if the master receive the character ‘1’ which is sent from the slave when the button state is high, or the button is pressed, the LED will be on. Else if the character is ‘0’ the LED will be off.

As for the servo motor control, first at the master, we read the potentiometer value and map it into a suitable range for the servo from 0 to 255. This value is sent to the slave which use it to rotate the servo motor accordingly. That’s all we need and here’s the demonstration of the example.

Master Code:

/*
 * How to configure and pair two HC-05 Bluetooth Modules
 * by Dejan Nedelkovski, www.HowToMechatronics.com
 * 
 *                 == MASTER CODE ==
 */

#define ledPin 9

int state = 0;
int potValue = 0;

void setup() {
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);
  Serial.begin(38400); // Default communication rate of the Bluetooth module
}

void loop() {
 if(Serial.available() > 0){ // Checks whether data is comming from the serial port
    state = Serial.read(); // Reads the data from the serial port
 }
 // Controlling the LED
 if (state == '1') {
  digitalWrite(ledPin, HIGH); // LED ON
  state = 0;
 }
 else if (state == '0') {
  digitalWrite(ledPin, LOW); // LED ON
  state = 0;
 }
 // Reading the potentiometer
 potValue = analogRead(A0);
 int potValueMapped = map(potValue, 0, 1023, 0, 255);
 Serial.write(potValueMapped); // Sends potValue to servo motor
 delay(10);
}

Slave Code:

/*
 * How to configure and pair two HC-05 Bluetooth Modules
 * by Dejan Nedelkovski, www.HowToMechatronics.com
 * 
 *                 == SLAVE CODE ==
 */
 
#include <Servo.h>
#define button 8

Servo myServo;
int state = 20;
int buttonState = 0;

void setup() {
  pinMode(button, INPUT);
  myServo.attach(9);
  Serial.begin(38400); // Default communication rate of the Bluetooth module
}

void loop() {
 if(Serial.available() > 0){ // Checks whether data is comming from the serial port
    state = Serial.read(); // Reads the data from the serial port
 }
 // Controlling the servo motor
 myServo.write(state);
 delay(10);
 
 // Reading the button
 buttonState = digitalRead(button);
 if (buttonState == HIGH) {
   Serial.write('1'); // Sends '1' to the master to turn on LED
 }
 else {
   Serial.write('0');
 }  
}

That’s all and if you have any problems, feel free to ask for help in the comments section below.

Приложение и скетч для машинки на Ардуино

После сборки схемы загрузите следующий скетч для машинки (не забудьте отключать Bluetooth модуль от Ардуино при загрузке) и установите приложение на смартфоне. Все файлы для проекта (библиотека AFMotor.h, скетч для машинки и приложение для Android) можно скачать одним архивом по прямой ссылке здесь. Работу скетча можно проверить управлением машинки от компьютера через Serial Monitor по USB.

#include <AFMotor.h>  // подключаем библиотеку для шилда
AF_DCMotor motor1(1); // подключаем мотор к клеммнику M1
AF_DCMotor motor2(2); // подключаем мотор к клеммнику M2

int val; // освобождаем память в контроллере

void setup() {

  Serial.begin(9600);
  pinMode(2, OUTPUT);   // Порт для светодиодов
  motor1.setSpeed(250); // задаем максимальную скорость мотора
  motor1.run(RELEASE);  // останавливаем мотор
  motor2.setSpeed(250); // задаем максимальную скорость мотора
  motor2.run(RELEASE);  // останавливаем мотор
}

void loop() {

if (Serial.available()) // проверяем, поступают ли какие-то команды
  {
    val = Serial.read();

    if (val == 'f') { // едем вперед
motor1.run(FORWARD);
motor1.setSpeed(250); 
motor2.run(FORWARD);
motor2.setSpeed(250);
 }

    if (val == 'b') { // едем назад
motor1.run(BACKWARD);
motor1.setSpeed(200); 
motor2.run(BACKWARD);
motor2.setSpeed(200);
 }

    if (val == 's') { // останавливаемся
motor1.run(RELEASE);
motor2.run(RELEASE);
 }

    if (val == 'l') { // поворачиваем налево
motor1.run(FORWARD);
motor1.setSpeed(100); 
motor2.run(BACKWARD);
motor2.setSpeed(250);
 }

    if (val == 'r') { // поворачиваем направо
motor1.run(BACKWARD);
motor1.setSpeed(250); 
motor2.run(FORWARD);
motor2.setSpeed(100);
 }

    if (val == '1') { // включаем светодиоды
digitalWrite(2,HIGH);
 }

    if (val == '0') { // выключаем светодиоды
digitalWrite(2,LOW);
 }

}
}

Пояснения к коду:

  1. для тестирования, можно отправлять команды с компьютера через USB;
  2. вращение моторов при подключении к аккумулятору будут отличаться;
  3. вы можете задавать свою скорость вращения моторами.


Управление машинкой на Ардуино через Андроид

Code

After your module is paired, you can modify the following code to obtain the desired functionality. In this example, we expect the other device (such as an app on smartphone) to send  the command ON or OFF to activate a function on the Arduino.

To handle the module HC-06 we use the library SoftwareSerial.h which allows to define Serial port on the Arduino board. Functions to be known are:

  • SoftwareSerial hc06(Rx,Tx) to define the pins of the serial port
  • hc06.begin() to define the baudrate (value should be the same as your module)
  • hc06.available() to test if data are available in the buffer of the module
  • hc06.read() to read data one byte at a time
  • hc06.print() to send a string in ASCII form
  • hc06.write() to send data one byte at a time

5Подключаемся к bluetooth-модулю по bluetooth с компьютера

Для подключения к bluetooth модулю можно использовать различные программы, которые могут подключаться к COM-порту. Например, такие как HyperTerminal, PuTTY, Tera Term, Termite и другие. Они все бесплатные и свободно распространяются в интернете.

Удобство программы TeraTerm в том, что она автоматически выводит список COM-портов, которые назначены модулю bluetooth вашего компьютера. Запускаем программу, выбираем подключение Serial, из списка выбираем соответствующий bluetooth COM-порт, нажимаем OK.

Подключение к bluetooth-модулю с помощью программы TeraTerm

Программа PuTTY при запуске также спрашивает номер порта (COM4, у вас будет свой), скорость подключения (9600), тип соединения (Serial). Затем нажимаем кнопку Соединиться.

Подключение к bluetooth-модулю с помощью программы PuTTY

В случае ошибки при подключении программа выведет соответствующее оповещение. Если соединение вашего компьютера с bluetooth-модулем произошло успешно, то вы увидите перед собой поле терминала. Введите с клавиатуры в это поле число 1 – и светодиод на 13 выводе Arduino загорится, введите 0 – погаснет.

Step 5: Code :

This is probably the simplest code to test all the device that support the serial port communication. It simply connects the computer terminal and the HC-05 in a loop. The codes sends the messages from the terminal to the Bluetooth Module and messages from the Bluetooth module to the terminal.

#include <SoftwareSerial.h>

SoftwareSerial EEBlue(10, 11); // RX | TX

void setup()

{

Serial.begin(9600);

EEBlue.begin(9600); //Default Baud for comm, it may be different for your Module. Serial.println(«The bluetooth gates are open.\n Connect to HC-05 from any other bluetooth device with 1234 as pairing key!.»);

}

void loop()

{

// Feed any data from bluetooth to Terminal. if (EEBlue.available()) Serial.write(EEBlue.read());

// Feed all data from termial to bluetooth if (Serial.available()) EEBlue.write(Serial.read());

}

Bluetooth модуль HC-06

Данный модуль может функционировать в двух режимах: режим команд и режим данных. В режиме команд мы можем настраивать различные свойства Bluetooth соединения: имя, пароль, скорость передачи и т.д. Режим данных позволяет осуществлять обмен данными между модулем и микроконтроллером (в нашем случае платой Arduino). Мы в данном проекте будем использовать только режим данных, свойства Bluetooth соединения будем использовать те, которые установлены в модуле по умолчанию. Имя устройства может быть HC-05 или HC-06 (в использованном нами модуле), пароль может быть 0000 или 1234, по умолчанию скорость передачи обычно выставлена 9600 бод/с.

Модуль работает от питающего напряжения 5V, а его сигнальные контакты работают с напряжением 3.3V. В модуле присутствует встроенный регулятор напряжения, поэтому нам не стоит беспокоиться о преобразовании этих напряжений. В режиме данных мы из 6 контактов модуля будем использовать только 4. Назначение контактов Bluetooth модуля HC-06 приведено в следующей таблице.

№ по порядку Назначение контакта
1 Vcc
2 Vcc
3 Tx
4 Rx
5 State
6 EN (Enable)

На нашем сайте вы также можете следующие проекты с использованием Bluetooth модуля:

  • управляемая по Bluetooth машина на Arduino;
  • цифровой кодовый замок на Arduino управляемый со смартфона;
  • автоматизация дома на Arduino под управлением смартфона;
  • спидометр с использованием Arduino и приложения на Android;
  • пульт управления кондиционером на основе Arduino и смартфона.

Communication Code

When both modules are configured, upload the following codes in to Arduino boards connected to your modules. Switch on the modules to enter communication mode. The master module should connect to the slave module and the LED should blink every second.

We use the same library SoftwareSerial.h as for the HC-06 module:

  • SoftwareSerial hc05(Rx,Tx) to define the pins of the serial port
  • hc05.begin() to define the baudrate (value should be the same as your module)
  • hc05.available() to test if data are available in the buffer of the module
  • hc05.read() to read data one byte at a time
  • hc05.print() to send a string in ASCII form
  • hc05.write() to send data one byte at a time

Slave Code

If you open both serial monitors and if you enter a command in the master board monitor, you should see the following results. The master board send a command which is recieved and sent back by the slave board. The communications works correctluy in both directions.

If you have issues configuring or pairing your Bluetooth modules, do not hesitate to contact us or to leave a comment.

Возможности BLE в модуле NRF24L01

Технология BLE работает в диапазоне ISM (2,4 ГГц), который во многих странах разрешен для безлицензионного использования (то есть не нужно получать никаких разрешений в радиочастотных органах) в промышленности, науке и медицине. ISM диапазон занимает полосу частот от 2400 МГц до 2483.5 МГц и разделен на 40 каналов. Три из этих 40 каналов имеют статус «информационных», они используются устройствами для передачи специальных приветственных пакетов с информацией о своем состоянии – это позволяет другим устройствам BLE устанавливать с ними связь.

В этой статье мы рассмотрим как использовать модуль NRF24L01 в качестве BLE трансивера (приёмопередатчика). BLE функциональность данного модуля будет продемонстрирована на примере передачи данных температуры в смартфон. Данные температуры будут считываться с датчика DHT11, а управлять всем процессом передачи данных будет плата Arduino. На смартфоне для приема этих данных можно использовать, например, приложение для android под названием Nordic BLE.

Общие принципы работы Bluetooth-модуля HC-05

Bluetooth-модуль может работать в двух режимах:

  1. Режим управления (Command Mode).
  2. Режим функционирования (Operating Mode).

В режиме управления можно конфигурировать свойства Bluetooth-модуля такие как: имя источника сигнала Bluetooth, пароль, бодовая скорость и т.д. В режиме функционирования можно получать и передавать данные между Bluetooth-модулем и микроконтроллером, поэтому в данном проекте мы будем использовать режим функционирования. Для режима управления оставим его настройки по умолчанию. То есть имя устройства будет HC-05 (автор статьи использует HC-06), пароль будет 0000 или 1234, а скорость передачи будет равна 9600 бод/с.

Модуль работает при напряжении питания 5В, а его сигнальные контакты оперируют напряжением 3.3В, поэтому регулятор данного напряжения (3.3В) присутствует в данном модуле. Следовательно, нам не нужно беспокоиться о стабильности этого напряжения. У модуля 6 выходных контактов, но в режиме функционирования используются только 4. Схема соединения контактов модуля приведена в следующей таблице.

  Pin on HC-05/HC-06 Pin name on MCU Pin number in PIC
1 Vcc

Vdd

31st pin
2 Vcc

Gnd

32nd pin
3 Tx RC6/Tx/CK 25th pin
4 Rx RC7/Rx/DT 26th pin
5 State NC NC
6 EN (Enable) NC NC

Схема и распиновка Bluetooth модуля

HC05/06 Bluetooth модуль распиновка, схема

Для настройки модуля необходимо подключить к нему питание от 3,3 Вольт, кроме того необходимо подать 3,3 Вольта на порт 34 (см. фото выше). Прошивка осуществляется по последовательному порту, так как аппаратный последовательный порт у Ардуино (порты TX и RX) будет занят для отправки AT-команд с компьютера, то мы используем программный последовательный порт с помощью библиотеки SoftwareSerial.h.

Данная библиотека позволяет реализовать программный последовательный порт на любых цифровых выходах Ардуино. Для настройки Bluetooth модуля его следует перевести в режим отладки — необходимо подключить вывод 34 к 3,3 Вольтам, питание модуля при прошивке тоже идет от 3,3 Вольт. В качестве контактов программного последовательного порта будем использовать цифровые выводы 2 и 3 на Arduino UNO.

Объяснение программы Arduino для управления светодиодом с помощью Bluetooth модуля HM-10

Полный текст программы и видео, демонстрирующее работу проекта, приведены в конце данной статьи. Здесь же мы кратко рассмотрим работу основных фрагментов программы.

Написание программы Arduino для этого проекта не потребует использования каких либо дополнительных библиотек если вы подключите модуль HM-10 к стандартному аппаратному последовательному порту платы Arduino – то есть к ее контактам 0 и 1 как показано на выше приведенной схеме. Однако мы в данном проекте решили использовать библиотеку для последовательной связи (Software Serial Library), с помощью которой программным способом организуем последовательный порт на контактах 2 и 3 платы Arduino (соответственно, если вы тоже хотите использовать этот подход, то вам необходимо внести изменения в приведенную выше схему).

Arduino

#include <SoftwareSerial.h>
SoftwareSerial HM10(2, 3); // RX = 2, TX = 3

1
2

#include <SoftwareSerial.h>

SoftwareSerialHM10(2,3);// RX = 2, TX = 3

Далее объявим две переменные, которые будут использоваться для хранения данных, принимаемых от модуля HM-10.

Arduino

char appData;
String inData = «»;

1
2

charappData;

StringinData=»»;

Далее инициализируем последовательную связь со скоростью 9600 бод с компьютером и модулем HM-10. Зададим режим работы используемого контакта и выключим светодиод.

Arduino

Serial.begin(9600);
Serial.println(«HM10 serial started at 9600»);
HM10.begin(9600); // set HM10 serial at 9600 baud rate
pinMode(13, OUTPUT); // onboard LED
digitalWrite(13, LOW); // switch OFF LED

1
2
3
4
5

Serial.begin(9600);

Serial.println(«HM10 serial started at 9600»);

HM10.begin(9600);// set HM10 serial at 9600 baud rate

pinMode(13,OUTPUT);// onboard LED

digitalWrite(13,LOW);// switch OFF LED

После этого мы начнем проверять поступают ли какие либо данные по последовательному порту, к которому подключен модуль HM-10. И пока этот порт будет доступен, мы будем считывать данные из него и сохранять их в переменной inData.

Arduino

HM10.listen(); // listen the HM10 port
while (HM10.available() > 0) { // if HM10 sends something then read
appData = HM10.read();
inData = String(appData); // save the data in string format
Serial.write(appData);
}

1
2
3
4
5
6

HM10.listen();// listen the HM10 port

while(HM10.available()>){// if HM10 sends something then read

appData=HM10.read();

inData=String(appData);// save the data in string format

Serial.write(appData);

}

Для отладки работы модуля HM-10 с помощью AT команд допишите в программу следующие строчки кода, которые будут передавать строку в модуль HM-10.

Arduino

if (Serial.available()) { // Read user input if available.
delay(10);
HM10.write(Serial.read());
}

1
2
3
4

if(Serial.available()){// Read user input if available.

delay(10);

HM10.write(Serial.read());

}

Если мы принимаем строку “F”, то мы печатаем соответствующее сообщение в окне монитора последовательной связи и выключаем светодиод. Если мы принимаем строку “N”, то мы печатаем соответствующее сообщение в окне монитора последовательной связи и начинаем мигать светодиодом с задержкой 500 мс.

Arduino

if ( inData == «F») {
Serial.println(«LED OFF»);
digitalWrite(13, LOW); // switch OFF LED
delay(500);
}
if ( inData == «N») {
Serial.println(«LED ON»);
digitalWrite(13, HIGH); // switch OFF LED
delay(500);
digitalWrite(13, LOW); // switch OFF LED
delay(500);
}

1
2
3
4
5
6
7
8
9
10
11
12

if(inData==»F»){

Serial.println(«LED OFF»);

digitalWrite(13,LOW);// switch OFF LED

delay(500);

}

if(inData==»N»){

Serial.println(«LED ON»);

digitalWrite(13,HIGH);// switch OFF LED

delay(500);

digitalWrite(13,LOW);// switch OFF LED

delay(500);

}

Принципы работы модуля nRF24L01

Модули nRF24L01 являются приемопередающими модулями, то есть каждый модуль может как передавать, так и принимать информацию. Но они могут работать только в режиме полудуплекса – то есть в конкретный момент времени модуль может либо передавать, либо принимать информацию. Основой модуля является универсальная микросхема nRF24L01 от компании Nordic semi-conductors, которая осуществляет прием и передачу данных в модуле. Эта микросхема взаимодействует с другими устройствами по интерфейсу SPI, поэтому ее легко подключить к большинству современных микроконтроллеров, в том числе и к плате Arduino, для которой разработаны специальные библиотеки для работы с подобными модулями. Ранее мы использовали модули nRF24L01 для создания приватной комнаты чата на основе плат Arduino.

Назначение контактов (распиновка) модуля nRF24L01 приведена на следующем рисунке.

Модуль может работать с напряжениями от 1.9V до 3.6V (обычно используется 3.3V) и потребляет во время своей работы сравнительно небольшой ток – всего 12mA, что позволяет его использовать в устройствах с низким потреблением энергии, работающих от маленьких батареек типа «таблетка» (coin cells). Несмотря на то, что стандартное рабочее напряжение модуля составляет 3.3V, большинство его контактов устойчивы и к напряжению 5V, что позволяет непосредственно его подключать к контактам платы Arduino.

Другим достоинством модуля nRF24L01 является наличие у него возможности работать по 6 каналам связи. Это значит, что он может взаимодействовать с другими 6 подобными модулями и передавать им или принимать от них информацию. Данная особенность модуля позволяет строить на его основе сети связи с топологией типа «звезда» или Mesh сети (самоорганизующиеся сети связи, в которых каждое устройство может выполнять роль ретранслятора/маршрутизатора), поэтому данные модули очень удобны для реализации различных проектов в сфере интернета вещей (IoT – Internet of Things). Также модули nRF24L01 поддерживают до 125 уникальных идентификаторов (ID), то есть в ограниченной области мы можем использовать до 125 таких модулей чтобы они не мешали при работе друг другу.

Настройка Bluetooth модуля HC-05/06

Для этого занятия нам потребуется:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • Bluetooth модуль HC-05/06;
  • провода «папа-папа» и «папа-мама».


Настройка Bluetooth модуля с помощью AT-команд

Скетч для прошивки блютуз модуля Arduino

#include <SoftwareSerial.h>    // подключаем библиотеку
SoftwareSerial mySerial(2,3);  // указываем пины tx и rx

void setup() {
  pinMode(2,INPUT);
  pinMode(3,OUTPUT);
  
  Serial.begin(9600);         // включаем hardware-порт
  mySerial.begin(38400);  // включаем software-порт
  
  Serial.println("start setting");
}

void loop() {
    if (mySerial.available()) {
        char c = mySerial.read();  // читаем из software-порта
        Serial.print(c);                   // пишем в hardware-порт
    }
    if (Serial.available()) {
        char c = Serial.read();      // читаем из hardware-порта
        mySerial.write(c);            // пишем в software-порт
    }
}

Пояснения к коду:

В программе все предельно просто: при получении данных на аппаратном (встроенном) последовательном порту, данные отправляются в программный последовательный порт (на модуль). А при получении данных с модуля, они отправляются на аппаратный последовательный порт, то есть на монитор порта.


Настройка модуля через монитор порта Arduino IDE

Итак, чтобы изменить код доступа к Bluetooth-модулю, имя или другие характеристики, следует отправить следующие команды через монитор последовательного порта Arduino IDE (смотри скрин ниже). Также приведем пошаговую инструкцию, какие необходимо использовать AT команды для перепрошивки HC-05. А в конце статьи размещена более полная таблица at команд с небольшими пояснениями.

  1. узнаем версию прошивки модуля: AT+VERSION?
  2. узнаем режим работы модуля: AT+ROLE?
  3. узнаем имя Bluetooth-модуля: AT+NAME?
  4. задаем новое имя модуля: AT+NAME=ROBOT
  5. узнаем имя Bluetooth-модуля: AT+NAME?
  6. узнаем пин-код Bluetooth-модуля: AT+PSWD?
  7. задаем новый пин-код доступа: AT+PSWD=0000
  8. узнаем пин-код Bluetooth-модуля: AT+PSWD?

Обратите внимание, что при настройке модуля, в мониторе последовательного порта IDE Arduino следует выбрать пункт «NL & CR». После программирования модуля отсоедините вывод 34 от 3,3 Вольт и подключитесь к Bluetooth-модулю с телефона или планшета

Если при первом подключении блютуз модуля к Ардуино, у нас были стандартные настройки, то сейчас наш модуль имеет свое имя и новый пин-код.


Настройка bluetooth модуля на Android

Таким образом, мы можем использовать в одном месте сразу несколько bluetooth модулей, а чтобы не запутаться присвоить каждому свое уникальное имя. Также мы можем задать новый пин-код, чтобы защитить модуль от постороннего вмешательства. С помощью данной настройки модуля НС-05/06 мы можем получать данные с датчиков не только на мониторе порта, но и на любом Android — устройстве.

AT OK Тестовая команда
AT+VERSION? +VERSION: … Узнать версию прошивки модуля
AT+RESET OK Сброс настроек
AT+ADDR? +ADDR: … Узнать адрес модуля
AT+NAME? +NAME:«name» Узнать имя модуля, где «name» — имя Bluetooth-модуля
AT+NAME=«name» OK Установить новое имя, где «name» — имя Bluetooth-модуля
AT+PSWD? + PSWD:«pin» Узнать код доступа, где «pin» — код, по умолчанию 1234
AT+PSWD=«pin» «pin»
OK
Установить новый код доступа к модулю, где «pin» — код доступа к Bluetooth-модулю
AT+ROLE? +ROLE:«param» Узнать режим работы модуля, где «param» — режим:
0 — slave. К модулю может подключиться мастер;
1 — master. Модуль сам подключается к устройству.
AT+ROLE=«param» OK Установить режим работы модуля, где «param» — режим