

Вы можете заказать печатную плату здесь
Инженерное видео и сборка на 6 части руководства
Вы можете заказать печатную плату здесь
Инженерное видео и сборка на 6 части руководства
Телеметрия беспроводных данных LORA или длительного диапазона - это технология, которая пионера SEMTECH работает на более низкой частоте, чем NRF24L01 (433 МГц, 868 МГц, или 916 МГц против 2,4 ГГц для NRF24L01), но на расстоянии (от 5000 м до 11000 м).
Lora Smart Home (LLCC68)-это приемопередатчик Sub-GHZ Lora® для среднего класса для внутренних и внутренних и наружных беспроводных приложений. Интерфейс SPI. PIN-PIN совместим с SX1262. SX1261, SX1262, SX1268 и LLCC68 предназначены для длительного срока службы батареи всего 4,2 мА активного потребления тока приема. SX1261 может передавать до +15 дБм, а SX1262, SX1268 и LLCC68 могут передавать до +22 дБм с высокоэффективными интегрированными усилителями мощности.
Эти устройства поддерживают модуляцию LORA для вариантов использования LPWAN и (g) FSK -модуляции для устаревших вариантов использования. Устройства очень настраиваются для удовлетворения различных требований применения для использования потребителями. Устройство обеспечивает модуляцию LORA, совместимые с Semtech Proccoivers, используемыми спецификацией Lorawan®, выпущенной Lora Alliance®. Радио подходит для систем, нацеленных на соответствие радиоуправлениям, включая, помимо прочего, Etsi EN 300 220, FCC CFR 47 Часть 15, требования к нормативным требованиям Китая и японский ARIB T-108. Непрерывное частотное покрытие от 150 МГц до 960 МГц позволяет поддерживать все основные группы Sub-GHZ ISM по всему миру.
| LLCC68 | SX1278-SX1276 | |
|---|---|---|
| Расстояние | > 11 км | 8 км |
| Скорость (Lora) | 1,76 кбит / с - 62,5 Кбит / с | 0,3 кбит / с - 19,2 кбит / с |
| Потребление мощности сна | 2 мкА | 5 мкА |
Вы можете найти мою библиотеку здесь, и она доступна на менеджере библиотеки Arduino IDE.
Для скачивания.
Нажмите кнопку Загрузки в правом верхнем углу, переименование несжатой папки LORA_E220.
Убедитесь, что папка LORA_E220 содержит LORA_E220.CPP и LORA_E220.H.
Поместите папку библиотеки LORA_E220 в / библиотеки / папку.
Возможно, вам понадобится создать подпапку библиотек, если это ваша первая библиотека.
Перезагрузите IDE.
| Штифт № | ПИН -элемент | Направление для штифта | Применение |
|---|---|---|---|
| 1 | M0 | Вход (слабый подтягивание) | Работайте с M1 и определите четыре режима эксплуатации. Плавание не допускается; Это может быть земле. |
| 2 | М1 | Вход (слабый подтягивание) | Работайте с M0 и определите четыре режима эксплуатации. Плавание не допускается; Это может быть земле. |
| 3 | Rxd | Вход | Входы TTL UART подключаются к внешнему (MCU, ПК) выходному выводу TXD. Он может быть настроен как вход с открытым дрэном или подтягиванием. |
| 4 | Txd | Выход | Выходы TTL UART Подключаются к внешнему входному выводу RXD (MCU, ПК). Можно настроить в виде выхода открытого дрэна или вывода |
5 | Аукс | Выход | Чтобы указать рабочее состояние модуля и разбудить внешний MCU. Во время процедуры инициализации самообследования штифт выводит низкий уровень. Его можно настроить в виде выхода с открытым дрэном или выводом (плавание разрешено). |
| 6 | Венчурной | Питание 3 В ~ 5,5 В. | |
| 7 | Гнездо | Земля |
Как видите, вы можете установить различные режимы с помощью контактов M0 и M1.
| Режим | М1 | M0 | Объяснение |
|---|---|---|---|
| Нормальный | 0 | 0 | UART и беспроводные каналы открыты, а прозрачная передача включена |
| Wor передатчик | 0 | 1 | Wor передатчик |
| Носит приемник | 1 | 0 | Wor -приемник (поддерживает пробуждение над воздухом) |
| Глубокий спящий режим | 1 | 1 | Модуль ложится спать (автоматически просыпается при настройке параметров) |
Некоторые контакты могут использоваться статически, но если вы подключите их к микроконтроллеру и настраиваете их в библиотеке, вы получаете производительность и сможете управлять всеми режимами через программное обеспечение. Тем не менее, мы собираемся объяснить лучше дальше.
Как я уже сказал, не обязательно подключить все булавки к выходу микроконтроллера; Вы можете поместить контакты M0 и M1 в высокие или низкие, чтобы получить желаемую конфигурацию. Если вы не подключаете Aux, библиотека установила разумную задержку, чтобы убедиться, что операция будет завершена ( если у вас проблемы с замораживанием устройства, вы должны поместить резистор 4.7K на подтягивание или лучше подключиться к устройству. ).
При передаче данных можно использовать для разбуждения внешнего MCU и вернуть высокую отделку передачи данных.
При получении AUX снижается и возвращается высоко, когда буфер пуст.
Он также используется для самостоятельной проверки для восстановления регулярной работы (в режиме питания и программы).
Схема соединения ESP8266 более простая, потому что она работает при том же напряжении логической связи (3.3 В).
Очень важно добавить резистор подтягивания (4,7 км), чтобы получить хорошую стабильность.
| E22 | ESP8266 |
|---|---|
| M0 | D7 |
| М1 | D6 |
| Техас | Петуст D2 (подтягивание 4,7 кОм) |
| Rx | Пыли D3 (подтягивание 4,7 кОм) |
| Аукс | Пыли D5 (подтягивание 4,7 кОм) |
| Венчурной | 5 В (но работайте с меньшей мощностью в 3,3 В) |
| Гнездо | Гнездо |
Аналогичная схема соединения для ESP32, но для RX и TX мы используем RX2 и TX2, потому что по умолчанию ESP32 не имеет мягкого, но имеет 3 серийных.
| E22 | ESP32 |
|---|---|
| M0 | D21 |
| М1 | D19 |
| Техас | PIN RX2 (подтягивание 4,7 кОм) |
| Rx | PIN TX3 (подтягивание 4,7 кОм) |
| Аукс | PIN D18 (подтягивание 4,7 кОм) (D15, чтобы проснуться) |
| Венчурной | 5 В (но работайте с меньшей мощностью в 3,3 В) |
| Гнездо | Гнездо |
Рабочее напряжение Arduino составляет 5 В, поэтому нам нужно добавить разделитель напряжения на RX Pin M0 и M1 модуля Lora, чтобы предотвратить повреждение; Вы можете получить больше информации здесь, разделитель напряжения: калькулятор и приложение.
Вы можете использовать резистор 2KOH для GND и 1 ком от сигнала, а затем собрать их вместе на RX.
| M0 | 7 (разделитель напряжения) |
| М1 | 6 (разделитель напряжения) |
| Техас | Петуст 2 (подтягивание 4,7 кОм) |
| Rx | Стижко 3 (подтягивание 4,7Kω и разделитель напряжения) |
| Аукс | Пыли 5 (подтягивание 4,7 кОм) |
| Венчурной | 5 В |
| Гнездо | Гнездо |
| M0 | 2 (разделитель напряжения) |
| М1 | 3 (разделитель напряжения) |
| Техас | PIN 14 TX (подтягивание 4,7 кОм) |
| Rx | PIN 13 RX (подтягивание 4,7 кОм) |
| Аукс | Петуст 1 (подтягивание 4,7 кОм) |
| Венчурной | 5 В |
| Гнездо | Гнездо |
Я сделал набор многочисленных конструкторов, потому что у нас может быть больше вариантов и ситуаций для управления.
Lora_e220 (byte txe220pin, byte rxe220pin, uart_bps_rate bpsrate = uart_bps_rate_9600); Lora_e220 (byte txe220pin, byte rxe220pin, byte auxpin, uart_bps_rate bpsrate = uart_bps_rate_9600); Lora_e220 (byte txe220pin, byte rxe220pin, byte auxpin, byte m0pin, byte m1pin, uart_bps_rate bpsrate = uart_bps_rate_9600);
Первый набор конструкторов создан для делегирования последовательных и других булавок в библиотеку.
txE220pin и rxE220pin - это булавки для подключения к UART. Они обязательны .auxPin - это PIN -код, который проверяет статус работы, передачи и получения (мы собираемся объяснить лучше дальше), этот PIN -код не является обязательным ; Если вы не установите его, я применяю задержку, чтобы разрешить операцию завершить себя (с задержкой, у вас возникают проблемы, например, устройство заморозить, вы должны поместить резистор 4.7k или лучше подключиться к устройству ).m0pin и m1Pin - это контакты для изменения режима работы (см. Верхний таблицы), я думаю, что эти контакты в «производстве» будут подключаться к непосредственно высоко или низко . Тем не менее, для теста они помогают управлять библиотекой.bpsRate - это скорость сфере в сфере в сфере, как правило, 9600 (единственная скорость передачи в режиме программирования/спящего режима)Простой пример
#include "lora_e220.h"Lora_e32 e220ttl (2, 3); // E22 TX E22 RX // lora_e32 e32ttl (2, 3, 5, 6, 7); // E22 TX E22 RX
Мы можем использовать программный режим непосредственно с другим конструктором
Lora_e220 (ardwareserial* serial, uart_bps_rate bpsrate = uart_bps_rate_9600); LORA_E220 (Hardwareserial* Serial, Byte Auxpin, UART_BPS_RATE BPSRATE = UART_BPS_RATE_9600); Lora_e220 (Hardwareserial* Serial, Byte Auxpin, Byte M0Pin, Byte M1Pin, UART_BPS_RATE BPSRATE = UART_BPS_RATE_9600);
Пример верхней части этого конструктора может быть сделан так.
#include <softwareserial.h> #include "lora_e220.h"Softwareserial MISERIAL (2, 3); // E220 TX E220 RX Lora_e220 e220ttl (& myserial); // lora_e220 e220ttl (& myserial, 5, 7, 6);
Последний набор конструкторов заключается в том, чтобы разрешить твердый, а не мягко.
Lora_e220 (Softwareserial* Serial, UART_BPS_RATE BPSRATE = UART_BPS_RATE_9600); Lora_e220 (Softwareserial* Serial, Byte Auxpin, UART_BPS_RATE BPSRATE = UART_BPS_RATE_9600); Lora_e220 (Softwareserial* Serial, Byte Auxpin, Byte M0Pin, Byte M1Pin, UART_BPS_RATE BPSRATE = UART_BPS_RATE_9600);
Для ESP32 у вас есть три дополнительных конструктора, чтобы разрешить управлять булавками для аппаратного сериала.
Lora_e220 (byte txe220pin, byte rxe220pin, hardwareserial* serial, uart_bps_rate bpsrate = uart_bps_rate_9600, uInt32_t serialConfig = serial_8n1); Lora_e220 (byte txe220pin, byte rxe220pin, ardwareserial* serial, byte auxpin, uart_bps_rate bpsrate = uart_bps_rate_9600, uint32_t serialconfig = serial_8n1); Lora_e220 (byte txe220pin, byte rxe220pin, hardwareserial* serial, byte auxpin, byte m0pin, byte m1pin, uart_bps_rate bpsrate = uart_bps_rate_9600, uInt32_t serialconfig = serial_8n1);
Команда BEGIN используется для запуска последовательного и вывода в режиме ввода и вывода.
void begin ();
В исполнении есть
// Запуск всех булавок и uart e220ttl.begin ();
Существует много методов управления конфигурацией и получения информации о устройстве.
Actrassestructcontainer getConfiguration (); ResponseStatus setConfiguration (конфигурация конфигурации, Program_command savetype = write_cfg_pwr_dwn_lose);ResponseStructContainer getModuleInformation(); void printParameters(struct Configuration configuration); ResponseStatus resetModule();
Чтобы упростить управление ответом, я создал набор контейнеров, который очень полезен для управления ошибками и возврата общих данных.
ResponseStatus is a status container and has two простые точки входа, с этим вы можете получить код состояния и описание кода состояния
Serial.println (c.getResponsedescription ()); // описание кода Serial.println (c.code); // 1, если успех
Код есть
E220_success = 1, Err_e220_unknown, Err_e220_not_support, Err_e220_not_implement, Err_e220_not_initial, Err_e220_invalid_param, Err_e220_data_size_not_match, Err_e220_buf_too_small, Err_e220_timeout, Err_e220_hardware, Err_e220_head_not_recocision
Этот контейнер создается для управления ответом строки и имеет две точки входа.
data со строкой, возвращенные из сообщения и status экземпляр RepsonseStatus .
ResponseContainer rs = e220ttl.receivemessage (); String Message = Rs.Data;Serial.println(rs.status.getResponseDescription()); Serial.println(message);
Но эта команда идет, чтобы прочитать все данные в буфере. Если вы получите три сообщения, вы собираетесь прочитать все три примечания одновременно, и мое простое решение - использовать конечный символ для отправки в конце сообщения, по умолчанию я использую 0 (нулевый символ)
ResponseContainer rs = e220ttl.receivemessageuntil ();
// Вы также можете указать пользовательский разделитель также
// responseContainer rs = e220ttl.receivemessageuntil ('|');
String message = rs.data;
Serial.println(rs.status.getResponseDescription());
Serial.println(message);
Эта версия устройства поддерживает RSSI также. Чтобы прочитать этот параметр (если вы указываете в конфигурации, которую вы хотите отправить, вы можете использовать
ResponseContainer rc = e220ttl.receivemessagerssi (); String Message = Rs.Data;Serial.println(rs.status.getResponseDescription()); Serial.println(message); Serial.print("RSSI: "); Serial.println(rc.rssi, DEC);
ResponseStructContainer - более «сложный» контейнер. Я использую это для управления структурами, он имеет одинаковые точки входа в ArspecteContainer, но данные являются void -указателем для управления сложной структурой.
Ответственный разбросок c;
c = e220ttl.getConfiguration ();
// важно получить указатель конфигурации перед всей другой работой
Конфигурация конфигурации = *(Конфигурация *) C.Data;
Serial.println (c.status.getResponsedescription ());
Serial.println (c.status.code);
c.close ();
Если вы получаете структурированное сообщение с RSSI, вы можете использовать
ResponseStructContainer rsc = e220ttl.receivemessagerssi (sizeof (сообщение));
Serial.println (rsc.status.getResponsedescription ());
struct message message = *(сообщение *) rsc.data;
Serial.println (message.type);
Serial.println (message.message);
Serial.println (*(float*) (message.temperature));
Serial.print ("rssi:"); Serial.println (rsc.rssi, dec);
rsc.close ();
Каждый раз, когда вы используете ResponseStructContainer , вы должны закрыть его с помощью close()
Первым методом является GetConfiguration, и вы можете использовать его для извлечения всех данных, хранящихся на устройстве.
Actrassestructcontainer getConfiguration ();
Вот пример использования.
Ответственный разбросок c;
c = e32ttl.getConfiguration ();
// важно получить указатель конфигурации перед всей другой работой
Конфигурация конфигурации = *(Конфигурация *) C.Data;
Serial.println (c.status.getResponsedescription ());
Serial.println (c.status.code);
Serial.println (configuration.sped.getuartbaudrate ());
c.close ();
Структура конфигурации имеет все данные настроек, и я добавляю серию функций, чтобы получить все описание отдельных данных.
configuration.addl = 0x03; // Первая часть адреса configuration.addh = 0x00; // вторая частьconfiguration.CHAN = 23; // Communication channel configuration.SPED.uartBaudRate = UART_BPS_9600; // Serial baud rate configuration.SPED.airDataRate = AIR_DATA_RATE_010_24; // Air baud rate configuration.SPED.uartParity = MODE_00_8N1; // Parity bit configuration.OPTION.subPacketSetting = SPS_200_00; // Packet size configuration.OPTION.RSSIAmbientNoise = RSSI_AMBIENT_NOISE_DISABLED; // Need to send special command configuration.OPTION.transmissionPower = POWER_22; // Device power configuration.TRANSMISSION_MODE.enableRSSI = RSSI_DISABLED; // Enable RSSI info configuration.TRANSMISSION_MODE.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; // Enable repeater mode configuration.TRANSMISSION_MODE.enableLBT = LBT_DISABLED; // Check interference configuration.TRANSMISSION_MODE.WORPeriod = WOR_2000_011; // WOR timing
У вас есть эквивалентная функция для всех атрибутов, чтобы получить все описания:
void printParameters (конфигурация конфигурации struct) {
Serial.println ("-----------------------------------------");
Serial.print(F("HEAD : ")); Serial.print(configuration.COMMAND, HEX);Serial.print(" ");Serial.print(configuration.STARTING_ADDRESS, HEX);Serial.print(" ");Serial.println(configuration.LENGHT, HEX);
Serial.println(F(" "));
Serial.print(F("AddH : ")); Serial.println(configuration.ADDH, HEX);
Serial.print(F("AddL : ")); Serial.println(configuration.ADDL, HEX);
Serial.println(F(" "));
Serial.print(F("Chan : ")); Serial.print(configuration.CHAN, DEC); Serial.print(" -> "); Serial.println(configuration.getChannelDescription());
Serial.println(F(" "));
Serial.print(F("SpeedParityBit : ")); Serial.print(configuration.SPED.uartParity, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getUARTParityDescription());
Serial.print(F("SpeedUARTDatte : ")); Serial.print(configuration.SPED.uartBaudRate, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getUARTBaudRateDescription());
Serial.print(F("SpeedAirDataRate : ")); Serial.print(configuration.SPED.airDataRate, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getAirDataRateDescription());
Serial.println(F(" "));
Serial.print(F("OptionSubPacketSett: ")); Serial.print(configuration.OPTION.subPacketSetting, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getSubPacketSetting());
Serial.print(F("OptionTranPower : ")); Serial.print(configuration.OPTION.transmissionPower, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getTransmissionPowerDescription());
Serial.print(F("OptionRSSIAmbientNo: ")); Serial.print(configuration.OPTION.RSSIAmbientNoise, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getRSSIAmbientNoiseEnable());
Serial.println(F(" "));
Serial.print(F("TransModeWORPeriod : ")); Serial.print(configuration.TRANSMISSION_MODE.WORPeriod, BIN);Serial.print(" -> "); Serial.println(configuration.TRANSMISSION_MODE.getWORPeriodByParamsDescription());
Serial.print(F("TransModeEnableLBT : ")); Serial.print(configuration.TRANSMISSION_MODE.enableLBT, BIN);Serial.print(" -> "); Serial.println(configuration.TRANSMISSION_MODE.getLBTEnableByteDescription());
Serial.print(F("TransModeEnableRSSI: ")); Serial.print(configuration.TRANSMISSION_MODE.enableRSSI, BIN);Serial.print(" -> "); Serial.println(configuration.TRANSMISSION_MODE.getRSSIEnableByteDescription());
Serial.print(F("TransModeFixedTrans: ")); Serial.print(configuration.TRANSMISSION_MODE.fixedTransmission, BIN);Serial.print(" -> "); Serial.println(configuration.TRANSMISSION_MODE.getFixedTransmissionDescription());
Serial.println("----------------------------------------");
}
Точно так же SetConfiguration хочет структуру конфигурации, поэтому я думаю, что лучший способ управления конфигурацией - получить текущее, применить единственное изменение, которое вам нужно и установить его снова.
ResponseStatus setConfiguration (конфигурация конфигурации, Program_command savetype = write_cfg_pwr_dwn_lose);
configuration - это структура, показанная ранее, saveType позволяет вам выбрать, становится ли изменение постоянным или только для текущего сеанса.
Ответственный разбросок c; c = e32ttl100.getConfiguration (); // важно получить указатель конфигурации перед всей другой работой Конфигурация конфигурации = *(Конфигурация *) C.Data; Serial.println (c.status.getResponsedescription ()); Serial.println (c.status.code);printParameters(configuration); configuration.ADDL = 0x03; // First part of address configuration.ADDH = 0x00; // Second part configuration.CHAN = 23; // Communication channel configuration.SPED.uartBaudRate = UART_BPS_9600; // Serial baud rate configuration.SPED.airDataRate = AIR_DATA_RATE_010_24; // Air baud rate configuration.SPED.uartParity = MODE_00_8N1; // Parity bit configuration.OPTION.subPacketSetting = SPS_200_00; // Packet size configuration.OPTION.RSSIAmbientNoise = RSSI_AMBIENT_NOISE_DISABLED; // Need to send special command configuration.OPTION.transmissionPower = POWER_22; // Device power configuration.TRANSMISSION_MODE.enableRSSI = RSSI_DISABLED; // Enable RSSI info configuration.TRANSMISSION_MODE.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; // Enable repeater mode configuration.TRANSMISSION_MODE.enableLBT = LBT_DISABLED; // Check interference configuration.TRANSMISSION_MODE.WORPeriod = WOR_2000_011; // WOR timing // Set configuration changed and set to not hold the configuration ResponseStatus rs = e32ttl100.setConfiguration(configuration, WRITE_CFG_PWR_DWN_LOSE); Serial.println(rs.getResponseDescription()); Serial.println(rs.code); printParameters(configuration); c.close()
Параметры управляются как постоянные:
| Имя | Описание | Адрес |
|---|---|---|
| Адд | Байт высокого адреса модуля (по умолчанию 00H) | 00h |
| Addl | Байт с низким адресом модуля (по умолчанию 00H) | 01H |
| Ускорительный | Информация о бите паритета передачи данных и скорости передачи данных воздуха | 02H |
| ВАРИАНТ | Тип передачи, размер пакета, разрешайте специальное сообщение | 03H |
| Чан | Канал связи (410M + Chan*1M), по умолчанию 17H (433 МГц), действительный только для проверки устройства 433 МГц , чтобы проверить правильную частоту вашего устройства | 04H |
| ВАРИАНТ | Тип передачи, размер пакета, разрешайте специальное сообщение | 05H |
| Передача_моде | Много параметров, которые указывают модальность передачи | 06H |
| Крипта | Шифрование, чтобы избежать перехвата | 07H |
UART Parity Bit: режим UART может отличаться между сторонами связи
| Uart Parity Bit | Постоянное значение |
|---|---|
| 8n1 (по умолчанию) | Mode_00_8n1 |
| 8o1 | MODE_01_8O1 |
| 8e1 | Mode_10_8e1 |
| 8n1 (равна 00) | Mode_11_8n1 |
Скорость бода UART: Скорость передачи бодов UART может отличаться между коммуникационными сторонами (но не отрекомендовано). Скорость бода UART не имеет ничего общего с параметрами беспроводной передачи и не повлияет на функции беспроводной передачи/приема.
| TTL UART -Скорость передачи (BPS) | Постоянное значение |
|---|---|
| 1200 | Uart_bps_1200 |
| 2400 | UART_BPS_2400 |
| 4800 | UART_BPS_4800 |
| 9600 (по умолчанию) | UART_BPS_9600 |
| 19200 | UART_BPS_19200 |
| 38400 | UART_BPS_38400 |
| 57600 | UART_BPS_57600 |
| 115200 | UART_BPS_115200 |
Скорость передачи данных воздуха: чем ниже скорость передачи данных воздуха, тем дольше расстояние передачи, лучшие характеристики противопоставления и более длительное время передачи; Скорость передачи данных воздуха должна быть постоянной для обеих сторон.
| Скорость передачи данных воздуха (BPS) | Постоянное значение |
|---|---|
| 2.4K | AIR_DATA_RATE_000_24 |
| 2.4K | AIR_DATA_RATE_001_24 |
| 2.4K (по умолчанию) | AIR_DATA_RATE_010_24 |
| 4,8k | AIR_DATA_RATE_011_48 |
| 9,6K | AIR_DATA_RATE_100_96 |
| 19.2k | AIR_DATA_RATE_101_192 |
| 38.4K | AIR_DATA_RATE_110_384 |
| 62,5K | AIR_DATA_RATE_111_625 |
Это максимальная длина пакета.
Когда данные меньше длины подпакета, серийный выходной выход является непрерывным непрерывным выходом. Последовательный порт приема выводит подпакет, когда данные больше длины подпакета.
| Размер пакета | Постоянное значение |
|---|---|
| 200bytes (по умолчанию) | SPS_200_00 |
| 128bytes | SPS_128_01 |
| 64bytes | SPS_064_10 |
| 32bytes | SPS_032_11 |
Эта команда может включить/отключить тип управления RSSI, и важно управлять удаленной конфигурацией. Обратите внимание не параметр RSSI в сообщении.
При включении команды C0, C1, C2, C3 могут быть отправлены в режиме передачи или в режиме передачи WOR для чтения регистра. Регистр 0x00: текущий RSSI RSSI Регистр окружающего шума 0x01: RSSI, когда данные были получены в прошлый раз.
| RSSI окружающий шум | Постоянное значение |
|---|---|
| Давать возможность | Rssi_ambient_noise_enabled |
| Отключить (по умолчанию) | Rssi_ambient_noise_disabled |
Вы можете изменить этот набор констант, применив определение как SO:
#define e220_22 // Значение по умолчанию без установки
Применимо для E220 с 22 дБм в качестве максимальной мощности.
Низкая передача мощности не рекомендуется из -за ее низкой эффективности питания.
| Мощность передачи (приближение) | Постоянное значение |
|---|---|
| 22DBM (по умолчанию) | Power_22 |
| 17 дБм | Power_17 |
| 13 дБм | Power_13 |
| 10 дБм | Power_10 |
Применимо для E220 с 30 дБм в качестве максимальной мощности.
Низкая передача мощности не рекомендуется из -за ее низкой эффективности питания.
#define e220_30
| Мощность передачи (приближение) | Постоянное значение |
|---|---|
| 30 дБм (по умолчанию) | Power_30 |
| 27 дБМ | Power_27 |
| 24 дБМ | Power_24 |
| 21 дБМ | Power_21 |
Вы можете настроить частоту каналов также с этим определением:
// один из #define Частота_433 #define Частота_170 #define Частота_470 #define Частота_868 #define Частота_915
При включении модуль получает беспроводные данные, и он будет следовать за байтом прочности RSSI после выхода через последовательный порт TXD
| Включить RSSI | Постоянное значение |
|---|---|
| Давать возможность | Rssi_enabled |
| Отключить (по умолчанию) | Rssi_disabled |
Режим передачи: первые три байта кадры данных каждого пользователя могут использоваться в качестве высокого/низкого адреса и канала в фиксированном режиме передачи. Модуль меняет свой адрес и канал при передаче. И он вернется к исходной настройке после завершения процесса.
| Фиксированная передача, обеспечивающая бит | Постоянное значение |
|---|---|
| Фиксированный режим передачи | Ft_fixed_transmission |
| Прозрачный режим передачи (по умолчанию) | Ft_transparent_transmission |
При включении беспроводные данные будут контролироваться до их передачи, что в определенной степени избегает помех, но может вызвать задержку данных.
| LBT включает байт | Постоянное значение |
|---|---|
| Давать возможность | Lbt_enabled |
| Отключить (по умолчанию) | Lbt_disabled |
Если WOR передается: после того, как приемник WOR получит беспроводные данные и выведет их через последовательный порт, он будет ждать 1000 мс, прежде чем снова въехать в WOR. Пользователи могут ввести данные последовательного порта и вернуть их через беспроводную связь в течение этого периода. Каждый серийный байт будет обновлен на 1000 мс. Пользователи должны передавать первый байт в течение 1000 мс.
| Беспроводное время пробуждения | Постоянное значение |
|---|---|
| 500 мс | WAKE_UP_500 |
| 1000 мс | WAKE_UP_1000 |
| 1500 мс | WAKE_UP_1500 |
| 2000 мс (по умолчанию) | WAKE_UP_2000 |
| 2500 мс | WAKE_UP_2500 |
| 3000 мс | WAKE_UP_3000 |
| 3500 мс | WAKE_UP_3500 |
| 4000 мс | WAKE_UP_4000 |
Во -первых, мы должны представить простой, но практический метод, чтобы проверить, находится ли что -то в приемном буфере.
int доступен ();
Вернуть, сколько байтов у вас есть в текущем потоке.
Нормальный/прозрачный режим передачи отправляет сообщения на все устройства с одним и тем же адресом и каналом.
Есть много методов отправки/получения сообщений, и мы собираемся подробно объяснить:
ResponseStatus sendmessage (const string message);
ResponseContainer eCetiveMessage ();
Первым методом является SendMessage и используется для отправки строки в устройство в нормальном режиме .
ResponseStatus rs = e220ttl.sendmessage ("prova");
Serial.println (rs.getresponsedescription ());
Другое устройство просто делает на петле.
if (e220ttl.available ()> 1) {
ResponseContainer rs = e220ttl.receivemessage ();
String Message = Rs.Data; // впервые получают данные
Serial.println (rs.status.getResponsedescription ());
Serial.println (сообщение);
}
Обратите внимание, если вы получаете несколько сообщений в буфере и не хотите читать их все за один раз. Вы должны использовать ResponseContainer rs = e220ttl.receiveMessageUntil(); с разделителем, вставленным в конце отправки сообщения.
Если вы включили RSSI, вы должны использовать receiveMessageRSSI .
Если вы хотите отправить сложную структуру, вы можете использовать этот метод
ResponseStatus sendmessage (const void *message, const uint8_t size);
Actrassestructcontainer receivemessage (const uint8_t size);
Например, он используется для отправки структуры:
struct messaggione {
тип Char [5];
char message [8];
Bool Mitico;
};
struct messaggione messaggione = {"temp", "peple", true};
ResponseStatus rs = e220ttl.sendmessage (& messaggione, sizeof (messaggione));
Serial.println (rs.getresponsedescription ());
И другая сторона вы можете получить сообщение, чтобы
OutseStructContainer rsc = e22ttl.receivemessage (sizeof (messaggione));
struct messaggione messaggione = *(messaggione *) rsc.data;
Serial.println (messaggione.message);
Serial.println (messaggione.mitico);
rsc.close ();
Если вы включили RSSI, вы должны использовать receiveMessageRSSI .
Если вы хотите прочитать первую часть сообщения для управления большим количеством типов структуры, вы можете использовать этот метод.
ResponseContainer eCeationInitialMessage (const uint8_t size);
Я создаю ее для получения строки с типом или другим, чтобы идентифицировать структуру для загрузки.
struct messaggione {// частичная структура без типа
char message [8];
Bool Mitico;
};
char type[5]; // first part of structure
ResponseContainer rs = e220ttl.receiveInitialMessage(sizeof(type));
// Put string in a char array (not needed)
memcpy ( type, rs.data.c_str(), sizeof(type) );
Serial.println("READ TYPE: ");
Serial.println(rs.status.getResponseDescription());
Serial.println(type);
// Read the rest of structure
ResponseStructContainer rsc = e220ttl.receiveMessage(sizeof(Messaggione));
struct Messaggione messaggione = *(Messaggione*) rsc.data;
rsc.close();
Точно так же я создаю набор методов для использования с фиксированной передачей.
Вам необходимо изменить только метод отправки, потому что устройство назначения не получает преамбулу с адресом и каналом при установке фиксированного режима.
Итак, для строкового сообщения у вас есть
ResponseStatus sendfixedMessage (байт addh, байт addl, byte chan, const string message);
ResponseStatus sendbroadcastfixedMessage (Byte Chan, Const String Message);
И для структуры у вас есть
ResponseStatus sendfixedMessage (байт addh, byte addl, byte chan, const void *message, const uint8_t size);
ResponseStatus sendbroadcastfixedMessage (byte Chan, const void *сообщение, const uint8_t size);
Вот простой пример
ResponseStatus rs = e220ttl.sendfixedmessage (0, 0, 0x17, & messaggione, sizeof (messaggione)); // responseStatus rs = e220ttl.sendfixedmessage (0, 0, 0x17, "ciao");
Фиксированная передача имеет больше сценариев
Если вы отправляете на определенное устройство (второй сценарий фиксированная передача), вы должны добавить Addl, Addh и Chan, чтобы идентифицировать его напрямую.
ResponseStatus rs = e220ttl.sendfixedmessage (2, 2, 0x17, «Сообщение на устройство»);
Если вы хотите отправить сообщение на все устройства в указанном канале, вы можете использовать этот метод.
ResponseStatus rs = e220ttl.sendbroadcastfixedmessage (0x17, «Сообщение на устройства канала»);
Если вы хотите получить все вещательные сообщения в сети, вы должны установить ADDH и ADDL на BROADCAST_ADDRESS .
Ответственный разбросок c; c = e220ttl.getConfiguration (); // важно получить указатель конфигурации перед всей другой работой Конфигурация конфигурации = *(Конфигурация *) C.Data; Serial.println (c.status.getResponsedescription ()); Serial.println (c.status.code);printParameters(configuration); configuration.ADDL = BROADCAST_ADDRESS; configuration.ADDH = BROADCAST_ADDRESS; // Set configuration changed and set to not hold the configuration ResponseStatus rs = e32ttl100.setConfiguration(configuration, WRITE_CFG_PWR_DWN_LOSE); Serial.println(rs.getResponseDescription()); Serial.println(rs.code); printParameters(configuration); c.close();
Теперь у вас есть вся информация для выполнения вашей работы, но я думаю, что важно показать некоторые реальные примеры, чтобы лучше понять все возможности.
Библиотека GitHub