HM-10: Программируемые выводы (PIO)
Модуль HM-10 Bluetooth имеет 10 пользовательских выводов (PIO-2 — PIO-11/B), однако для их использования необходимо подключаться непосредственно к дочерней плате, а не к плате расширения.
Таблица функций выводов
Вывод HM-10 |
Функция |
|---|---|
PIO2 |
ВЫХОД / ШИМ-ВЫХОД |
PIO3 |
ВЫХОД |
PIO4 |
ВХОД / АЦП / ВЫХОД |
PIO5 |
ВХОД / АЦП / ВЫХОД |
PIO6 |
ВХОД / АЦП / ВЫХОД |
PIO7 |
ВХОД / АЦП / ВЫХОД |
PIO8 |
ВХОД / АЦП / ВЫХОД |
PIO9 |
ВХОД / АЦП / ВЫХОД |
PIOA (10) |
ВХОД / АЦП / ВЫХОД |
PIOB (11) |
ВХОД / АЦП/DS18B20/DHT11 / ВЫХОД |
Характеристики тока: PIO-2 и PIO-3 могут обеспечить до 20 мА. PIO-3 — PIO-11 рассчитаны только на 4 мА.
AT-команды для управления выводами
Базовое управление выводами
AT+PIO[вывод][0/1] — установить вывод в HIGH или LOW (пример:
AT+PIO21устанавливает PIO-2 в HIGH)AT+PIO2x — ШИМ-выход для PIO2 (x = 0-9, значения 2-9 соответствуют 100-800 мс ШИМ)
Чтение состояния выводов
AT+PIO[вывод]? — прочитать состояние отдельного вывода (возвращает
OK+PIO2:0илиOK+PIO2:1)AT+COL?? — запросить выводы PIO4-PIOB как один байт (биты 7-0 соответствуют выводам)
AT+PIO?? — прочитать все PIO-выводы (возвращает 4 байта в формате
OK+PIO?:0000—OK+PIO?:03FF)
Аналоговый вход
AT+ADC[вывод]? — прочитать напряжение на выводе (пример: AT+ADCA? возвращает OK+ADCA:2.80 для 2.8 В)
Команды конфигурации
AT+CYC[частота] — установить частоту обновления регистра (00-99 секунд, по умолчанию 10)
AT+CYC?? — запросить текущую частоту
AT+BEFC[значения] — установить состояние выводов при включении питания
AT+AFTC[значения] — установить состояние выводов после установления соединения
Режимы удалённого управления выводами
MODE1 и MODE2
Для удалённого управления периферийным устройством модуль должен поддерживать AT-команды по беспроводной связи:
Вывод |
MODE1 |
MODE2 |
|---|---|---|
PIO2 |
ВЫХОД / ШИМ |
ВЫХОД / ШИМ |
PIO3 |
ВЫХОД |
ВЫХОД |
PIO4-PIOB |
ВХОД / АЦП |
ВЫХОД |
Команды настройки:
AT+MODE1 — установить PIO2-3 как выход, PIO4-B как вход
AT+MODE2 — установить все выводы как управляемые (хотя в MODE1 только PIO2-3 работают как выход)
Практический пример: удалённое управление светодиодом
Настройка схемы
Центральный HM-10 (Master): подключён к Arduino.
Периферийный HM-10 (Slave): светодиод + резистор подключены к PIO-2.
Начальная настройка периферийного устройства
AT
AT+RENEW
AT+MODE2
Эти команды получают адрес устройства (необходимый для подключения) и включают приём AT-команд по беспроводной связи.
Настройка центрального устройства
AT
AT+RENEW
AT+IMME1
AT+ROLE1
AT+CON[ADDRESS]
AT+PIO21
AT+PIO20
Команды устанавливают центральный режим, ручное подключение и включают управление светодиодом (ВКЛ/ВЫКЛ).
Скетч Arduino — последовательная связь
#include <AltSoftSerial.h>
AltSoftSerial BTserial;
char c=' ';
boolean NL = true;
void setup() {
Serial.begin(9600);
Serial.print("Sketch: "); Serial.println(__FILE__);
Serial.print("Uploaded: "); Serial.println(__DATE__);
Serial.println(" ");
BTserial.begin(9600);
Serial.println("BTserial started at 9600");
}
void loop() {
if (BTserial.available()) {
c = BTserial.read();
Serial.write(c);
}
if (Serial.available()) {
c = Serial.read();
if (c!=10 & c!=13) {
BTserial.write(c);
}
if (NL) { Serial.print("\r\n>"); NL = false; }
Serial.write(c);
if (c==10) { NL = true; }
}
}
Скетч Arduino — автоматическое управление светодиодом
#include <AltSoftSerial.h>
AltSoftSerial BTserial;
byte switchPin = 2;
boolean switch_State = LOW;
boolean oldswitch_State = LOW;
void setup() {
Serial.begin(9600);
Serial.print("Sketch: "); Serial.println(__FILE__);
Serial.print("Uploaded: "); Serial.println(__DATE__);
Serial.println(" ");
BTserial.begin(9600);
Serial.println("BTserial started at 9600");
Serial.println("");
pinMode(switchPin, INPUT);
}
void loop() {
boolean state1 = digitalRead(switchPin); delay(1);
boolean state2 = digitalRead(switchPin); delay(1);
boolean state3 = digitalRead(switchPin); delay(1);
if ((state1 == state2) && (state1==state3)) {
switch_State = state1;
if (switch_State != oldswitch_State) {
if ( switch_State == HIGH) {
BTserial.print("AT+PIO21" );
Serial.println("The LED is ON");
}
else {
BTserial.print("AT+PIO20" );
Serial.println("The LED is OFF");
}
oldswitch_State = switch_State;
}
}
}
Примечания по автоматическому подключению
Для включения автоматического подключения при запуске: AT+IMM0 (настройка по умолчанию).
Для отключения: установите центральный модуль в AT+RENEW, затем AT+ROLE1.
Дополнительные ресурсы
В статье используется библиотека AltSoftSerial для связи Arduino с модулем HM-10.
Примечание
Оригинальная статья: HM-10 Programmable Pins (Martyn Currey)