Радиомодули на 433Мгц HC-11/HC-12 c UART интерфейсом.

Радиомодули на 433Мгц построенные на однокристальных трансиверах CC1101 (HC-11) и SI4463 (HC-12) и микроконтроллере STM8 который реализует UART интерфейс. Модули не совместимы друг с другом, но имеют одинаковый принцип работы.

Ниже код, АТ команды и схема подключения из видео

Подключено было так:

IMG_1752


Купить модули:

на али:
SI4463 (HC-12)
CC1101 (HC-11)


Инструкции на модули:

HC-12
HC-11


Описание АТ команд модулей:

Для настройки модуля необходимо перевести его в командный режим, для этого необходимо притянуть контакт «SET» к массе и подождать ~40ms. Контакт «SET» имеет подтягивающий резистор на 10к. В командном режиме последовательный порт сконфигурирован на 9600bps. Если параметры модуля были изменены, после выхода из командного режима, они будут применены через ~80ms.

AT —  Возвращает “OK”.

AT+Bxxxx — Скорость последовательного порта (1,200bps, 2,400bps, 4,800bps, 9,600bps, 19,200bps, 38,400bps, 57,600bps, 115,200bps) По умолчанию — 9,600bps. Пример: “AT+B9600”.

AT+CxxxxКанал беспроводной связи, от 001 до 100 (или 127).
По умолчанию — 001. Рабочий диапазон частот модуля от 433.4MHz до 473.0MHz, что соответствует каналам от 001 до 100, шаг одного канала 400kHz. В LPD диапазон попадают с 001 по 004 канал (433.4, 433.8, 434.2, 434.6MHz). Пример: «AT+C021«, возвращает «OK+C021» что соответствует 441.4MHz.

AT+FUx — Режим работы модуля, доступны четыре режима, а именно FU1, FU2, FU3 и FU4.  Пример: «AT+FU1» возвращает «OK+FU1«

Режим FU1. Умеренный режим энергосбережения, рабочий ток модуля составляет около 3,6 мА. В этом режиме модуль может работать на любой скорости последовательного порта, скорость передачи данных по воздуху является неизменной и равной 250,000bps. В этом режиме нет смысла занижать скорость UART. режим для быстрой передачи данных на короткие расстояния.

Режим FU2. Режим максимального энергосбережения, рабочий ток модуля составляет около 80мкА, скорость передачи данных по воздуху является неизменной и равной 250,000bps (для HC12). В этом режиме доступная скорость последовательного порта 1200bps, 2400bps и 4800bps. Если в настройках скорость порта будет превышает 4800bps, она автоматически будет уменьшена до 4800bps. В режиме FU2 передается не большей объем данных, каждый пакет составляет менее 20 байт и требуется большой интервал между передачей пакетов, более двух секунды для HC12 и 400мс для HC11, в противном случае данные могут быть потеряны.

Режим FU3 (режим по умолчанию). В этом режиме модули автоматически регулирует скорость беспроводной передачи данных, в соответствии со скоростью передачи последовательного порта. Для того, чтобы получить максимальную дальность связи, скорость последовательной передачи данных должна быть минимальна, (1200bps или 2400bps). Соответственно на более высоких скоростях дальность связи уменьшится. Рабочий ток модуля составляет около 16мА

Режим FU4, Режим для максимальной дальности связи. У HC12 поддерживается только одна скорость последовательного порта, 1200bps, если в настройках скорость порта будет превышает 1200bps, она автоматически будет уменьшена. Скорость передачи данных по воздуху снижается до 500bps. В режиме FU4 требуется очень большей интервал между передачей пакетов, более двух секунд, каждый пакет должен быть менее 60 байт, в противном случае данные могут быть потеряны. У HC11 этот режим также для максимальной дальности связи, но максимальная скорость порта ограничена 9600bps (может быть меньше) и заметно меньший интервал между передачей пакетов, задержка ~300ms.

AT+Px — Мощность передатчика, от 1 до 8, что соответствует:

для HC12:

1 2 3 4 5 6 7 8
-1 dBm 2 dBm 5 dBm 8 dBm 11 dBm 14 dBm 17 dBm 20 dBm
(0.8mW) (1.6mW) (3.2mW) (6.3mW) (12mW) (25mW) (50mW) (100mW)

для HC11:

1 2 3 4 5 6 7 8
-30dBm -20dBm -15dBm -10 dBm 0 dBm 5 dBm 7 dBm 10 dBm
(0.001 mW) (0.01 mW) (1mW) (0.1 mW) (1 mW) (3 mW) (5mW) (10mW)

Значение по умолчанию 8, чем выше мощность передатчика, тем дальше возможное расстояние связи и выше энергопотребление. Пример: «AT+P5« возвращает «OK+P5«.

AT+Rx — Возвращает значение параметра, B — скорость, C — канал и тд. Пример, “AT+RB” вернет значение скорости: “OK+B9600”. «AT+RX» вернет все параметры модуля.

AT+Udps — Настройки последовательного порта (бит данных, четность, стоп-биты) за подробностями в даташит.

AT+V — Вернет версию ПО.

AT+SLEEP — Спящий режим, после команды и выхода из командного режима модуль переходит в режим ожидания, потребление модуля в спящем режиме составляет около 22мкА. Для выхода из спящего режима нужно снова зайти в командный режим.

AT+DEFAULT — установка всех параметров по умолчанию.

AT+UPDATEПереводит модуль в состояния ожидания обновления программного обеспечения.


Дополнительно:

Таблица соответствия беспроводной скорости передачи данных и скорость UART порта в режиме работы FU3 (режим по умолчанию). Для HC12:

Скорость UART 1200 2400 4800 9600 19200 38400 57600 115200
Скорость по радио 5000bps 15000bps 58000bps 236000bps

Таблица соответствия беспроводной скорости передачи данных и чувствительности приемника. Для HC12:

Скорость по радио 500bps 5000bps 15000bps 58000bps 236000bps/250000bps
Чувствительность приемника -124dBm -116dBm -111dBm -106dBm -100dBm

Некоторые характерные эталонные значения для различных режимов работы, Для HC12:


Режим FU1 FU2 FU3 FU4
Потребление 3.6mA 80μA 16mA 16mA
Время отправки 1 байта 15~25mS 500mS 4~80mS 1S
Время отправки 1 байта на скорости 9600 31mS      
Время отправки 10 байта на скорости 9600 31mS    

Код из видео:

TX
#include <SoftwareSerial.h>

SoftwareSerial radio(6, 7); // RX, TX

char val = 0;

void setup() {
    Serial.begin(9600); 
    radio.begin(9600);
    pinMode(13, OUTPUT);
}

void loop() {
   radio.print(val);
   delay(500);
   val = 'A';
   radio.print(val);
   delay(500);
   val = 'B';
}

RX
#include <SoftwareSerial.h>

SoftwareSerial radio(6, 7); // RX, TX

void setup() {
    Serial.begin(9600); 
    radio.begin(9600);
    pinMode(13, OUTPUT);
}

void loop() {
   char val = radio.read();
   switch (val) {
   case 'A':
      digitalWrite(13, LOW);
      break;
   case 'B':
      digitalWrite(13, HIGH);
      break;
   }
}

Код который использовался для тестирования модулей на дальность работы
 
#include <OLED_I2C.h>
#include <SoftwareSerial.h>

SoftwareSerial radio(6, 7); // RX, TX
OLED  myOLED(SDA, SCL, 8);

extern uint8_t SmallFont[];
extern uint8_t MediumNumbers[];
extern uint8_t BigNumbers[];

unsigned int err = 0;
unsigned int ok = 0;

#define dl 200 // задержка

void setup()
{
  radio.begin(9600);
  myOLED.begin();
  myOLED.setFont(SmallFont);

  randomSeed(analogRead(0));
}

void loop()
{
  myOLED.clrScr();
  
  char val = random(127);         // генерим случайное часло
  char echo = -1;
   
  radio.write(val);               // отправляем в сериал
  delay(dl);                     // ждем ответ  
  echo = radio.read();            // читаем ответ
  
  if (val != echo) err++;         // если ответ не совпадает
  else ok++;
                         // вывод переменных на экран         
    myOLED.setFont(SmallFont);     
    myOLED.printNumI(val, LEFT, 0);
    myOLED.printNumI(echo, LEFT, 8);    
    myOLED.printNumI(ok+err, LEFT, 20);  
    myOLED.printNumI(ok, LEFT, 30);  
    myOLED.printNumI(err, LEFT, 40); 
    myOLED.setFont(BigNumbers);
    myOLED.printNumI(err, CENTER, 40);
    myOLED.update();
   
  
}



Для настройки AT командами.
 
#include <SoftwareSerial.h>

SoftwareSerial mySerial(6, 7); // RX, TX

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
 
  mySerial.begin(9600);
 
}

void loop() { // run over and over
  if (mySerial.available()) {
    Serial.write(mySerial.read());
  }
  if (Serial.available()) {
    mySerial.write(Serial.read());
  }
}