HM-10: Программируемые выводы (PIO)

Модуль HM-10 Bluetooth имеет 10 пользовательских выводов (PIO-2 — PIO-11/B), однако для их использования необходимо подключаться непосредственно к дочерней плате, а не к плате расширения.

HM-10 программируемые выводы

Таблица функций выводов

Вывод HM-10

Функция

PIO2

ВЫХОД / ШИМ-ВЫХОД

PIO3

ВЫХОД

PIO4

ВХОД / АЦП / ВЫХОД

PIO5

ВХОД / АЦП / ВЫХОД

PIO6

ВХОД / АЦП / ВЫХОД

PIO7

ВХОД / АЦП / ВЫХОД

PIO8

ВХОД / АЦП / ВЫХОД

PIO9

ВХОД / АЦП / ВЫХОД

PIOA (10)

ВХОД / АЦП / ВЫХОД

PIOB (11)

ВХОД / АЦП/DS18B20/DHT11 / ВЫХОД

Расположение выводов HM-10

Характеристики тока: 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?:0000OK+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-команд по беспроводной связи.

Настройка периферийного устройства

Получение адреса устройства

Установка MODE2

Настройка центрального устройства

AT
AT+RENEW
AT+IMME1
AT+ROLE1
AT+CON[ADDRESS]
AT+PIO21
AT+PIO20

Команды устанавливают центральный режим, ручное подключение и включают управление светодиодом (ВКЛ/ВЫКЛ).

Настройка центрального устройства — шаг 1

Настройка центрального устройства — шаг 2

Подключение к периферийному устройству

Управление светодиодом

Светодиод включён

Светодиод включён — макетная плата

Скетч 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)