

Arduino Uno Щит
Вы можете заказать печатную плату здесь
Инженерное видео и сборка на 6 части руководства
Wemos D1 Щит
Вы можете заказать печатную плату здесь
ESP32 Щит
Вы можете заказать печатную плату здесь
Инженерное видео и сборка на 6 части руководства
Я создаю библиотеку для управления серией устройства Lora Ebyte E32, очень мощным, простым и дешевым устройством.
Lora E32-TTL-100
Вы можете найти здесь aliexpress (3 -километровое устройство) Aliexpress (8 -километровое устройство)
Они могут работать на расстоянии от 3000 до 8000 м, и они имеют много функций и параметров.
Поэтому я создаю эту библиотеку, чтобы упростить использование.
Пожалуйста, обратитесь к моей статье, чтобы получить обновленную схему
Вы можете найти мою библиотеку здесь.
Для скачивания.
Нажмите кнопку «Загрузка» в правом верхнем углу, переименована несущественной папкой LORA_E32.
Убедитесь, что папка LORA_E32 содержит LORA_E32.CPP и LORA_E32.H.
Поместите папку библиотеки LORA_E32, папку / библиотеки / библиотеки.
Возможно, вам понадобится создать подпапку библиотек, если это ваша первая библиотека.
Перезагрузите IDE.
E32 TTL 100
Вы можете купить здесь aliexpress
| Штифт № | ПИН -элемент | Направление для штифта | Применение |
|---|---|---|---|
| 1 | M0 | Вход (слабый подтягивание) | Работать с M1 и определить четыре режима эксплуатации. Площение не допускается, может быть основано. |
| 2 | М1 | Вход (слабый подтягивание) | Работа с M0 и определить четыре режима работы. Площение не разрешено, может быть основано. |
| 3 | Rxd | Вход | TTL UART входы, подключается к внешнему (MCU, ПК) TXD OutputPin. Можно настроить как вход с открытым дризоном или подтягиванием. |
| 4 | Txd | Выход | TTL UART выходы, подключается к внешнему RXD (MCU, ПК) InputPin. Можно настроить в виде выхода открытого дрэна или вывода |
| 5 | Аукс | Выход | Чтобы указать рабочее состояние модуля и разбудить внешний MCU. Во время процедуры инициализации самопроверка, PIN-код выводит низкий уровень. Можно настроить как выходной выходной сигнал Orpush-Pull (Ploating разрешен). |
| 6 | Венчурной | Питания 2,3 В ~ 5,5 В. | |
| 7 | Гнездо | Земля | Как видите, вы можете установить различные режимы с помощью контактов M0 и M1. |
| Режим | М1 | M0 | Объяснение |
|---|---|---|---|
| Нормальный | 0 | 0 | Uart и Wireless Channel хороши |
| Wke-up | 0 | 1 | То же самое, что и обычно, но в преамбурную код добавляется передача данных для пробуждения приемника. |
| Экономия энергии | 1 | 0 | UART отключен, и Wireless находится в режиме WOR (Wake On Radio), что означает, что устройство будет включено при получении данных. Передача не допускается. |
| Спать | 1 | 1 | Используется в параметрах настройки. Передача и получение отключений. |
Как видите, есть некоторые булавки, которые можно использовать статичным образом, но если вы подключите их к библиотеке, которую вы получаете в производительности, и вы можете управлять всем режимом через программное обеспечение, но мы собираемся лучше объяснить.
Как я уже говорю, не важно подключить весь PIN -код к выходу микроконтроллера, вы можете поместить контакты M0 и M1 к высоким или низким, чтобы получить желательную конфигурацию, и если вы не подключаете Aux, библиотека установит разумную задержку, чтобы убедиться, что операция завершена .
При передаче данных можно использовать для разбуждения внешнего MCU и вернуть высокую отделку передачи данных.
Lora E32 Aux Pin на передаче
При получении AUX поступает низко и возвращайте высокий уровень, когда буфер пуст.
Lora E32 Aux Pin на прием
Он также используется для самостоятельной проверки для восстановления нормальной работы (в режиме питания и сна/программы).
Lora E32 Aux Pin
Схема соединения ESP8266 более проста, потому что она работает при одинаковом напряжении логической связи (3,3 В).
Lora E32 TTL 100 Wemos D1 Полностью подключен
Важно добавить резистор подтягивания (4,7kOM), чтобы получить хорошую стабильность.
| M0 | D7 |
|---|---|
| М1 | D6 |
| Rx | Петуст D2 (подтягивание 4,7 кОм) |
| Техас | Пыли D3 (подтягивание 4,7 кОм) |
| Аукс | D5 (вход) |
| 3,3 В. | Гнездо |
Рабочее напряжение Arduino составляет 5 В, поэтому нам нужно добавить разделитель напряжения на RX PIN M0 и M1 модуля LORA, чтобы предотвратить повреждение, вы можете получить больше информации здесь, разделитель напряжения: калькулятор и приложение.
Вы можете использовать резистор 2KOM до GND и 1 ком от сигнала, чем на RX.
Lora E32 TTL 100 Arduino полностью подключен
| M0 | 7 (разделитель напряжения) |
|---|---|
| М1 | 6 (разделитель напряжения) |
| Rx | Стижко D2 (подтягивание 4,7KОвар и разделитель напряжения) |
| Техас | Пыли D3 (подтягивание 4,7 кОм) |
| Аукс | 5 (вход) |
| Венчурной | 3,3 В. |
| Гнездо | Гнездо |
Я сделал набор довольно многочисленных конструкторов, потому что у нас может быть больше вариантов и ситуаций для управления.
LoRa_E32 (byte rxPin, byte txPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (byte rxPin, byte txPin, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (byte rxPin, byte txPin, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);Первый набор конструкторов создает для делегирования управления серийными и другими булавками в библиотеку.
rxPin и txPin - это PIN -код для подключения к UART, и они обязательны .
auxPin - это PIN -код, который проверяет статус работы, передачи и получения (мы собираемся объяснить лучше дальше), этот PIN -код он не обязательен , если вы не установите ее, я применяю задержку, чтобы разрешить операцию завершить себя (с задержкой).
m0pin и m1Pin - это контакты для изменения режима работы (см. Верхний таблицы), я думаю, что эти контакты в «производстве» будут подключаться к непосредственно высоко или низко , но для теста они с пользой, чтобы управлять библиотекой.
bpsRate - это страшное из мягкостей, обычно составляет 9600 (единственная скорость передачи в режиме программины/спят)
Простой пример
# include " LoRa_E32.h "
LoRa_E32 e32ttl100 ( 2 , 3 ); // RX, TX
// LoRa_E32 e32ttl100(2, 3, 5, 6, 7); // RX, TXМы можем использовать непосредственно мягкий
LoRa_E32 (HardwareSerial* serial, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (HardwareSerial* serial, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (HardwareSerial* serial, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);Пример верхней части этого конструктора может быть так.
# include < SoftwareSerial.h >
# include " LoRa_E32.h "
SoftwareSerial mySerial ( 2 , 3 ); // RX, TX
LoRa_E32 e32ttl100 (mySerial);
// LoRa_E32 e32ttl100(&mySerial, 5, 7, 6);Последний набор конструктора - разрешить использовать твердый, а не мягко.
LoRa_E32 (SoftwareSerial* serial, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (SoftwareSerial* serial, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (SoftwareSerial* serial, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);Команда BEGIN используется для запуска последовательного и вывода в режиме ввода и вывода.
void begin ();В исполнении есть
// Startup all pins and UART
e32ttl100.begin();Есть набор методов для управления конфигурацией и получить информацию об устройстве.
ResponseStructContainer getConfiguration ();
ResponseStatus setConfiguration (Configuration configuration, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);
ResponseStructContainer getModuleInformation ();
void printParameters ( struct Configuration configuration);
ResponseStatus resetModule ();Чтобы упростить управление ответом, я создаю набор контейнеров, для меня очень полезно для управления ошибками и возврата общих данных.
Это контейнер статуса, и есть 2 простая точка входа, с этим вы можете получить код состояния и описание кода состояния
Serial.println(c.getResponseDescription()); // Description of code
Serial.println(c.code); // 1 if SuccessКод
E32_SUCCESS = 1 ,
ERR_E32_UNKNOWN,
ERR_E32_NOT_SUPPORT,
ERR_E32_NOT_IMPLEMENT,
ERR_E32_NOT_INITIAL,
ERR_E32_INVALID_PARAM,
ERR_E32_DATA_SIZE_NOT_MATCH,
ERR_E32_BUF_TOO_SMALL,
ERR_E32_TIMEOUT,
ERR_E32_HARDWARE,
ERR_E32_HEAD_NOT_RECOGNIZEDЭтот контейнер создается для управления ответом строки и 2 точки входа.
data со строкой возвращаются из сообщения и status экземпляр RepsonseStatus .
ResponseContainer rs = e32ttl.receiveMessage();
String message = rs.data;
Serial.println(rs.status.getResponseDescription());
Serial.println(message);Это более «сложный» контейнер, я использую его для управления структурой, он имеет одинаковую точку входа в AppresseContainer, но данные являются void -указателем для управления сложной структурой.
ResponseStructContainer c;
c = e32ttl100.getConfiguration();
// It's important get configuration pointer before all other operation
Configuration configuration = *(Configuration*) c.data;
Serial.println(c.status.getResponseDescription());
Serial.println(c.status.code);Первым методом является GetConfiguration, вы можете использовать его для поиска всех данных, хранящихся на устройстве.
ResponseStructContainer getConfiguration ();Здесь пример использования.
ResponseStructContainer c;
c = e32ttl100.getConfiguration();
// It's important get configuration pointer before all other operation
Configuration configuration = *(Configuration*) c.data;
Serial.println(c.status.getResponseDescription());
Serial.println(c.status.code);
Serial.println(configuration.SPED.getUARTBaudRate());Структура конфигурации имеет все данные настроек, и я добавляю серию функции, чтобы получить все описание отдельных данных.
configuration.ADDL = 0x0 ; // First part of address
configuration.ADDH = 0x1 ; // Second part of address
configuration.CHAN = 0x19 ; // Channel
configuration.OPTION.fec = FEC_0_OFF; // Forward error correction switch
configuration.OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; // Transmission mode
configuration.OPTION.ioDriveMode = IO_D_MODE_PUSH_PULLS_PULL_UPS; // Pull-up management
configuration.OPTION.transmissionPower = POWER_17; // dBm transmission power
configuration.OPTION.wirelessWakeupTime = WAKE_UP_1250; // Wait time for wake up
configuration.SPED.airDataRate = AIR_DATA_RATE_011_48; // Air data rate
configuration.SPED.uartBaudRate = UART_BPS_115200; // Communication baud rate
configuration.SPED.uartParity = MODE_00_8N1; // Parity bitУ вас есть эквивалентная функция, чтобы получить все описание:
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.getUARTBaudRate());
Serial.print(F( " SpeedAirDataRate : " )); Serial.print(configuration.SPED.airDataRate, BIN);Serial.print( " -> " ); Serial.println(configuration.SPED.getAirDataRate());
Serial.print(F( " OptionTrans : " )); Serial.print(configuration.OPTION.fixedTransmission, BIN);Serial.print( " -> " ); Serial.println(configuration.OPTION.getFixedTransmissionDescription());
Serial.print(F( " OptionPullup : " )); Serial.print(configuration.OPTION.ioDriveMode, BIN);Serial.print( " -> " ); Serial.println(configuration.OPTION.getIODroveModeDescription());
Serial.print(F( " OptionWakeup : " )); Serial.print(configuration.OPTION.wirelessWakeupTime, BIN);Serial.print( " -> " ); Serial.println(configuration.OPTION.getWirelessWakeUPTimeDescription());
Serial.print(F( " OptionFEC : " )); Serial.print(configuration.OPTION.fec, BIN);Serial.print( " -> " ); Serial.println(configuration.OPTION.getFECDescription());
Serial.print(F( " OptionPower : " )); Serial.print(configuration.OPTION.transmissionPower, BIN);Serial.print( " -> " ); Serial.println(configuration.OPTION.getTransmissionPowerDescription());В то же время SetConfiguration Want Configuration Strucutre, поэтому я думаю, что лучший способ управления конфигурацией - получить текущее, применить единственное изменение, которое вам нужно, и установить его снова.
ResponseStatus setConfiguration (Configuration configuration, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE); configuration - это Strucutre, предварительное, чтобы показать вам saveType вам разрешить Choiche, если изменение станет навсегда только для текущего сеанса.
ResponseStructContainer c;
c = e32ttl100.getConfiguration();
// It's important get configuration pointer before all other operation
Configuration configuration = *(Configuration*) c.data;
Serial.println(c.status.getResponseDescription());
Serial.println(c.status.code);
printParameters (configuration);
configuration.ADDL = 0x0 ;
configuration.ADDH = 0x1 ;
configuration.CHAN = 0x19 ;
configuration.OPTION.fec = FEC_0_OFF;
configuration.OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION;
configuration.OPTION.ioDriveMode = IO_D_MODE_PUSH_PULLS_PULL_UPS;
configuration.OPTION.transmissionPower = POWER_17;
configuration.OPTION.wirelessWakeupTime = WAKE_UP_1250;
configuration.SPED.airDataRate = AIR_DATA_RATE_011_48;
configuration.SPED.uartBaudRate = UART_BPS_115200;
configuration.SPED.uartParity = MODE_00_8N1;
// 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);Параметр - все это управляется как постоянный:
| Адд | Байт с высоким адресом модуля (по умолчанию 00H) | 00h-ffh |
|---|---|---|
| Addl | Байт с низким адресом модуля (по умолчанию 00H) | 00h-ffh |
| Ускорительный | Информация о бите паритета передачи данных и скорости передачи данных воздуха | Чан |
| Канал связи (410M + Chan*1M), по умолчанию 17H (433 МГц), действительный только для устройства 433 МГц | 00H-1FH |
|---|
ВАРИАНТ
Тип трансмиссии, настройки подтягивания, время пробуждения, FEC, мощность передачи
UART Parity Bit: _UART -режим может отличаться между сторонами связи
| 7 | 6 | Uart Parity Bit | Const value | | --- | --- | --- | --- | --- | | 0 | 0 | 8n1 (по умолчанию) | mode_00_8n1 | | 0 | 1 | 8O1 | MODE_01_8O1 | | 1 | 0 | 8 e1 | mode_10_8e1 | | 1 | 1 | 8n1 (равна 00) | mode_11_8n1 |
Скорость бода UART: Скорость передачи бодов UART может отличаться между сторонами связи, скорость бода UART не имеет ничего общего с параметрами беспроводной передачи и не повлияет на функции беспроводной передачи / приема.
| 5 | 43 | TTL UART -Скорость передачи (BPS) | Постоянное значение |
|---|---|---|---|
| 0 | 0 | 0 | 1200 |
| 0 | 0 | 1 | 2400 |
| 0 | 1 | 0 | 4800 |
| 0 | 1 | 1 | 9600 (по умолчанию) |
| 1 | 0 | 0 | 19200 |
| 1 | 0 | 1 | 38400 |
| 1 | 1 | 0 | 57600 |
| 1 | 1 | 1 | 115200 |
Скорость передачи данных воздуха: чем ниже скорость передачи данных воздуха, тем дольше расстояние передачи, лучшие характеристики анти-помех и более длительное время передачи, скорость передачи данных воздуха должна сохранять одинаковую для обеих сторон связи.
| 2 | 1 | 0 | Скорость передачи данных воздуха (BPS) | Постоянное значение |
|---|---|---|---|---|
| 0 | 0 | 0 | 0,3к | AIR_DATA_RATE_000_03 |
| 0 | 0 | 1 | 1,2K | AIR_DATA_RATE_001_12 |
| 0 | 1 | 0 | 2.4K (по умолчанию) | AIR_DATA_RATE_010_24 |
| 0 | 1 | 1 | 4,8k | AIR_DATA_RATE_011_48 |
| 1 | 0 | 0 | 9,6K | AIR_DATA_RATE_100_96 |
| 1 | 0 | 1 | 19.2k | AIR_DATA_RATE_101_192 |
| 1 | 1 | 0 | 19.2k (то же самое до 101) | AIR_DATA_RATE_110_192 |
| 1 | 1 | 1 | 19.2k (то же самое до 101) | AIR_DATA_RATE_111_192 |
Режим передачи: в режиме фиксированной передачи первые три байта рамы данных каждого пользователя могут использоваться в качестве высокого/низкого адреса и канала. Модуль меняет свой адрес и канал при передаче. И это вернется к исходной настройке после завершения процесса.
| 7 | Фиксированная передача, включающая бит (аналогично Modbus) | Постоянное значение |
|---|---|---|
| 0 | Прозрачный режим передачи | Ft_transparent_transmission |
| 1 | Фиксированный режим передачи | Ft_fixed_transmission |
Режим привода IO: этот бит используется для внутреннего резистора модуля. Это также увеличивает адаптивность уровня в случае открытого стока. Но в некоторых случаях это может потребоваться внешнее подтягивание
резистор.
| 6 | Режим привода IO (по умолчанию 1) | Постоянное значение |
|---|---|---|
| 1 | Выходы TXD и AUX Push-Pull, RXD входы | Io_d_mode_push_pulls_pull_ups |
| 0 | TXD 、 Aux Open-Collector Выходы, входы RXD Open-Collector | Io_d_mode_open_collector |
Время беспроводного пробуждения: модуль передачи и приема, работающий в режиме 0, время задержки которого является недействительным и может быть произвольным значением, передатчик работает в режиме 1, может непрерывно передавать преамбурный код соответствующего времени, когда приемник работает в режиме 2, время означает время интервала монитора (беспроводной пробуждение). Только данные от передатчика, которые работают в режиме 1, могут быть
полученный.
| 5 | 4 | 3 | беспроводное время пробуждения | Постоянное значение |
|---|---|---|---|---|
| 0 | 0 | 0 | 250 мс (по умолчанию) | WAKE_UP_250 |
| 0 | 0 | 1 | 500 мс | WAKE_UP_500 |
| 0 | 1 | 0 | 750 мс | WAKE_UP_750 |
| 0 | 1 | 1 | 1000 мс | WAKE_UP_1000 |
| 1 | 0 | 0 | 1250 мс | WAKE_UP_1250 |
| 1 | 0 | 1 | 1500 мс | WAKE_UP_1500 |
| 1 | 1 | 0 | 1750 мс | WAKE_UP_1750 |
| 1 | 1 | 1 | 2000 мс | WAKE_UP_2000 |
FEC: После отключения FEC фактическая скорость передачи данных увеличивается, в то время как способность против помех уменьшается. Кроме того, расстояние передачи относительно короткое, обе стороны связи должны оставлять на одних и тех же страницах о включении или отключении FEC.
| 2 | Переключатель FEC | Постоянное значение |
|---|---|---|
| 0 | Выключите FEC | Fec_0_off |
| 1 | Включите FEC (по умолчанию) | Fec_1_on |
Мощность передачи
Вы можете изменить этот набор постоянной, применить определение как SO:
# define E32_TTL_100 // default value without set Применимо для E32-TTL-100, E32-TTL-100S1, E32-T100S2.
Внешняя мощность должна убедиться, что способность тока вывода более 250 мА и обеспечить пульс питания в пределах 100 мВ.
Низкая передача мощности не рекомендуется из -за его низкого источника питания
эффективность.
# define E32_TTL_100 // default value without set| 1 | 0 | Мощность передачи (приближение) | Постоянное значение |
|---|---|---|---|
| 0 | 0 | 20 дБм (по умолчанию) | Power_20 |
| 0 | 1 | 17 дБм | Power_17 |
| 1 | 0 | 14dbm | Power_14 |
| 1 | 1 | 10 дБм | Power_10 |
Применимо для E32-TTL-500。
Внешняя мощность должна убедиться, что способность тока вывода более 700 мА и обеспечить пульс питания в пределах 100 мВ.
Низкая передача мощности не рекомендуется из -за ее низкой эффективности питания.
# define E32_TTL_500| 1 | 0 | Мощность передачи (приближение) | Постоянное значение |
|---|---|---|---|
| 0 | 0 | 27 дБМ (по умолчанию) | Power_27 |
| 0 | 1 | 24 дБМ | Power_24 |
| 1 | 0 | 21 дБМ | Power_21 |
| 1 | 1 | 18dbm | Power_18 |
Применимо для E32-TTL-1W, E32 (433T30S), E32 (868T30S), E32 (915T30S)
Внешняя мощность должна убедиться, что способность тока вывода более 1а и обеспечить пульсацию источника питания в пределах 100 мВ.
Низкая передача мощности не рекомендуется из -за его низкого источника питания
эффективность.
# define E32_TTL_1W| 1 | 0 | Мощность передачи (приближение) | Постоянное значение |
|---|---|---|---|
| 0 | 0 | 30 дБм (по умолчанию) | Power_30 |
| 0 | 1 | 27 дБМ | Power_27 |
| 1 | 0 | 24 дБМ | Power_24 |
| 1 | 1 | 21 дБМ | Power_21 |
Вы можете настроить частоту канала OLSO с этим определением:
// One of
# define FREQUENCY_433
# define FREQUENCY_170
# define FREQUENCY_470
# define FREQUENCY_868
# define FREQUENCY_915Сначала мы должны представить простой, но полезный метод, чтобы проверить, есть ли что -то в приемном буфере
int available ();Это просто верните, сколько байтов у вас есть в текущем потоке.
Нормальный/прозрачный режим передачи используется для отправки сообщений на все устройство с тем же адресом и каналом.
Сценарии передачи LORA E32, линии являются каналами
Есть много метода для отправки/получения сообщения, мы собираемся подробно объяснить:
ResponseStatus sendMessage ( const String message);ResponseContainer receiveMessage ();Первым методом является SendMessage и используется для отправки строки в устройство в нормальном режиме .
ResponseStatus rs = e32ttl.sendMessage( " Prova " );
Serial.println(rs.getResponseDescription());Другое устройство просто делает на петле
if (e32ttl.available() > 1 ){
ResponseContainer rs = e32ttl. receiveMessage ();
String message = rs. data ;` ` // First ever get the data
Serial. println (rs. status . getResponseDescription ());
Serial. println (message);
}Если вы хотите отправить сложную структуру, вы можете использовать этот метод
ResponseStatus sendMessage ( const void *message, const uint8_t size);
ResponseStructContainer receiveMessage ( const uint8_t size);Например, он используется для отправки Strucutre:
struct Messaggione {
char type[ 5 ];
char message[ 8 ];
bool mitico;
};
struct Messaggione messaggione = { " TEMP " , " Peple " , true };
ResponseStatus rs = e32ttl.sendMessage(&messaggione, sizeof (Messaggione));
Serial.println(rs.getResponseDescription());И другая сторона вы можете получить сообщение, чтобы
ResponseStructContainer rsc = e32ttl.receiveMessage( sizeof (Messaggione));
struct Messaggione messaggione = *(Messaggione*) rsc.data;
Serial.println(messaggione.message);
Serial.println(messaggione.mitico);Если вы хотите прочитать первую часть сообщения, чтобы управлять большим количеством типа Strucutre, вы можете использовать этот метод.
ResponseContainer receiveInitialMessage ( const uint8_t size);Я создаю ее для получения строки с типом или другой, чтобы идентифицировать страницу для загрузки.
struct Messaggione { // Partial strucutre without type
char message[ 8 ];
bool mitico;
};
char type[ 5 ]; // first part of structure
ResponseContainer rs = e32ttl.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 = e32ttl.receiveMessage( sizeof (Messaggione));
struct Messaggione messaggione = *(Messaggione*) rsc.data;В то же время я создаю набор метода для использования с фиксированной передачей
Вам нужно изменить только метод отправки, потому что устройство назначения не получает преамбулу с адресом и каналом.
Так что для строкового сообщения у вас есть
ResponseStatus sendFixedMessage (byte ADDL, byte ADDH, byte CHAN, const String message);
ResponseStatus sendBroadcastFixedMessage (byte CHAN, const String message);и для структуры у вас есть
ResponseStatus sendFixedMessage (byte ADDL, byte ADDH, byte CHAN, const void *message, const uint8_t size);
ResponseStatus sendBroadcastFixedMessage (byte CHAN, const void *message, const uint8_t size );Здесь простой пример
ResponseStatus rs = e32ttl.sendFixedMessage( 0 , 0 , 0x17 , &messaggione, sizeof (Messaggione));
// ResponseStatus rs = e32ttl.sendFixedMessage(0, 0, 0x17, "Ciao");Фиксированная передача имеет больше сценариев
Сценарии передачи LORA E32, линии являются каналами
Если вы отправляете на определенное устройство (вторая сценария фиксированная передача), вы должны добавить Addl, Addh и Chan, чтобы идентифицировать его напрямую.
ResponseStatus rs = e32ttl.sendFixedMessage( 2 , 2 , 0x17 , " Message to a device " );Если вы хотите отправить сообщение на все устройство в указанном канале, вы можете использовать этот метод.
ResponseStatus rs = e32ttl.sendBroadcastFixedMessage( 0x17 , " Message to a devices of a channel " ); Если вы хотите получить все радиовещательные сообщения в сети, вы должны установить свои ADDH и ADDL на BROADCAST_ADDRESS .
ResponseStructContainer c;
c = e32ttl100.getConfiguration();
// It's important get configuration pointer before all other operation
Configuration configuration = *(Configuration*) 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);