

Arduino Uno Shield
Puedes pedir el PCB aquí
Instrucción y video de ensamblaje en 6 parte de la guía
WEMOS D1 SHIELD
Puedes pedir el PCB aquí
Escudo esp32
Puedes pedir el PCB aquí
Instrucción y video de ensamblaje en 6 parte de la guía
Creo una biblioteca para administrar la serie EBYTE E32 de dispositivos Lora, muy potente, simple y barato dispositivo.
Lora E32-TTL-100
Puede encontrar aquí AliExpress (dispositivo de 3 km) AliExpress (dispositivo de 8 km)
Pueden trabajar a una distancia de 3000m a 8000m, y tienen muchas características y parámetros.
Así que creo esta biblioteca para simplificar el uso.
Consulte mi artículo para obtener un esquema actualizado
Puedes encontrar mi biblioteca aquí.
Para descargar.
Haga clic en el botón Descargas en la esquina superior derecha, cambie el nombre de la carpeta sin comprimir Lora_e32.
Verifique que la carpeta Lora_e32 contenga Lora_e32.cpp y Lora_e32.h.
Coloque la carpeta de biblioteca Lora_e32 su carpeta / bibliotecas /.
Es posible que deba crear la subcarpeta de las bibliotecas si es su primera biblioteca.
Reinicie el ide.
E32 TTL 100
Puedes comprar aquí AliExpress
| Pin No. | Artículo de PIN | Dirección del alfiler | Aplicación PIN |
|---|---|---|---|
| 1 | M0 | Entrada (Plegada débil) | Trabajar con M1 y decidir los cuatro modos de operación. Floating no está permitido, puede estar molido. |
| 2 | M1 | Entrada (Plegada débil) | Trabajar con M0 y decidir los cuatro modos de operación. No se permiten flotar, puede estar molido. |
| 3 | Rxd | Aporte | Entradas TTL UART, se conecta a la salida TXD externa (MCU, PC). Se puede configurar como entrada de drenaje abierto o pull-up. |
| 4 | TXD | Producción | Salidas de ttl uART, se conecta a la entrada externa RXD (MCU, PC). Se puede configurar como salida de drenaje abierto o push-pull |
| 5 | Aux | Producción | Para indicar el estado de trabajo del módulo y despierta el MCU externo. Durante el procedimiento de inicialización de autoevaluación, el PIN genera bajo nivel. Se puede configurar como salida de drenaje abierto orpush-Pull (se permite flotar). |
| 6 | VCC | Fuente de alimentación 2.3V ~ 5.5V DC | |
| 7 | Gnd | Suelo | Como puede ver, puede establecer varios modos a través de pines M0 y M1. |
| Modo | M1 | M0 | Explicación |
|---|---|---|---|
| Normal | 0 | 0 | UART e Wireless Channel es bueno para ir |
| Acelerador | 0 | 1 | Igual que se agrega un código de preámbulo a los datos transmitidos para despertar el receptor. |
| De ahorro de energía | 1 | 0 | UART se desactiva y la conexión inalámbrica está en modo WOR (Wake On Radio), lo que significa que el dispositivo se encenderá cuando hay datos que se recibirán. No está permitida la transmisión. |
| Dormir | 1 | 1 | Utilizado en la configuración de los parámetros. Transmitir y recibir discapacitados. |
Como puede ver, hay algunos pines que se pueden usar de manera estática, pero si la conecta a la biblioteca que obtiene en rendimiento y puede controlar todo el modo a través del software, pero vamos a explicar mejor a continuación.
Como ya digo que no es importante conectar todo el PIN a la salida del microcontrolador, puede poner pines M0 y M1 a alta o baja para obtener una configuración desiderada, y si no conecta AUX, la biblioteca establece un retraso razonable para asegurarse de que la operación esté completa .
Al transmitir datos se pueden usar para despertar MCU externo y devolver un alto al final de la transferencia de datos.
Lora E32 Aux Pin en la transmisión
Al recibir AUX bajando y regrese alto cuando el búfer está vacío.
Lora E32 Aux Pin en la recepción
También se utiliza para la autoevaluación para restaurar el funcionamiento normal (en modo de encendido y sueño/programa).
Lora E32 Aux Pin en la autoevaluación
El esquema de conexión ESP8266 es más simple porque funciona a la misma tensión de comunicaciones lógicas (3.3V).
Lora E32 TTL 100 WEMOS D1 Totalmente conectado
Es importante agregar resistencia pull-up (4,7 kohm) para obtener una buena estabilidad.
| M0 | D7 |
|---|---|
| M1 | D6 |
| Rx | Pin D2 (pullup 4,7kΩ) |
| Tx | Pin D3 (pullup 4,7kΩ) |
| Aux | D5 (entrada) |
| 3.3V | Gnd |
El voltaje de trabajo Arduino es de 5V, por lo que necesitamos agregar un divisor de voltaje en el pin M0 y M1 del módulo Lora para evitar daños, puede obtener más información aquí divisor de voltaje: calculadora y aplicación.
Puede usar una resistencia de 2kohm a GND y 1KOHM de la señal que la junta en RX.
Lora e32 ttl 100 arduino totalmente conectado
| M0 | 7 (divisor de voltaje) |
|---|---|
| M1 | 6 (divisor de voltaje) |
| Rx | PIN D2 (Divisor de voltaje y 4,7kΩ y voltaje) |
| Tx | Pin D3 (pullup 4,7kΩ) |
| Aux | 5 (entrada) |
| VCC | 3.3V |
| Gnd | Gnd |
Hice un conjunto de constructores bastante numerosos, porque podemos tener más opciones y situaciones para administrar.
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);Se crean el primer conjunto de constructor para delegar la gestión de los pines seriales y otros pines a la biblioteca.
rxPin y txPin es el pin para conectarse a UART y son obligatorios .
auxPin es un PIN que verifica la operación, la transmisión y el estado de recepción (vamos a explicar mejor a continuación), ese pin no es obligatorio , si no lo configura, aplico un retraso para permitir que la operación se complete (con latencia).
m0pin y m1Pin son los pines para cambiar el modo de operación (ver la parte superior de la tabla), creo que estos pines en la "producción" se conectarán directamente altos o bajos , pero para la prueba son útiles para ser administrados por la biblioteca.
bpsRate es el boudrato de softwareSerial normalmente es 9600 (la única tasa de baudios en el modo de programación/suspensión)
Un ejemplo simple es
# include " LoRa_E32.h "
LoRa_E32 e32ttl100 ( 2 , 3 ); // RX, TX
// LoRa_E32 e32ttl100(2, 3, 5, 6, 7); // RX, TXPodemos usar directamente un softwareSerial con otro constructor
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);El ejemplo superior con este constructor puede ser así.
# include < SoftwareSerial.h >
# include " LoRa_E32.h "
SoftwareSerial mySerial ( 2 , 3 ); // RX, TX
LoRa_E32 e32ttl100 (mySerial);
// LoRa_E32 e32ttl100(&mySerial, 5, 7, 6);El último conjunto de constructor es permitir usar un hardwareserial en lugar de software.
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);El comando BEGIN se usa para iniciar serial y pines en el modo de entrada y salida.
void begin ();en ejecución es
// Startup all pins and UART
e32ttl100.begin();Hay un conjunto de métodos para administrar la configuración y obtener información del dispositivo.
ResponseStructContainer getConfiguration ();
ResponseStatus setConfiguration (Configuration configuration, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);
ResponseStructContainer getModuleInformation ();
void printParameters ( struct Configuration configuration);
ResponseStatus resetModule ();Para simplificar la administración de la respuesta, creo un conjunto de contenedores, para mí de manera muy útil para administrar errores y devolver datos genéricos.
Este es un contenedor de estado y tiene 2 puntos de entrada simples, con esto puede obtener el código de estado y la descripción del código de estado
Serial.println(c.getResponseDescription()); // Description of code
Serial.println(c.code); // 1 if SuccessEl código es
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_RECOGNIZEDEste contenedor se crea para administrar la respuesta de la cadena y tener 2 puntos de entrada.
data con la cadena devuelta del mensaje y status una instancia de RepsonseStatus .
ResponseContainer rs = e32ttl.receiveMessage();
String message = rs.data;
Serial.println(rs.status.getResponseDescription());
Serial.println(message);Este es el contenedor más "complejo", uso esto para administrar la estructura, tiene el mismo punto de entrada de respuestas, pero los datos son un puntero vacío para administrar una estructura compleja.
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);El primer método es GetConfiguration, puede usarlo para recuperar todos los datos almacenados en el dispositivo.
ResponseStructContainer getConfiguration ();Aquí un ejemplo de uso.
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());La estructura de la configuración tiene todos los datos de configuración, y agrego una serie de funciones para obtener toda la descripción de datos únicos.
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 bitTiene la función equivalente para obtener toda la descripción:
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());De la misma manera, SetConfiguration quiere una estructura de configuración, por lo que creo que la mejor manera de administrar la configuración es recuperar la actual, aplicar el único cambio que necesita y configurarlo nuevamente.
ResponseStatus setConfiguration (Configuration configuration, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE); configuration es el show previsivo de estructura, el permiso saveType para que usted se vaya a Choiche si el cambio se vuelve permanentemente de solo para la sesión actual.
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);El parámetro todo manejado como constante:
| Adjunta | Byte de dirección alta del módulo (el 00h predeterminado) | 00h-ffh |
|---|---|---|
| Complemento | Byte de dirección baja del módulo (el 00H predeterminado) | 00h-ffh |
| Acelerado | Información sobre la velocidad de datos Bit de paridad y la velocidad de datos del aire | Chan |
| Canal de comunicación (410m + Chan*1M), predeterminado 17H (433MHz), válido solo para el dispositivo 433MHz | 00h-1fh |
|---|
OPCIÓN
Tipo de transmisión, configuración de pull-up, tiempo de atención, FEC, potencia de transmisión
Bit de paridad UART: el modo _uart puede ser diferente entre las fiestas de comunicación
| 7 | 6 | Uart Parity Bit | Const Value | | --- | --- | --- | --- | --- | | 0 | 0 | 8N1 (predeterminado) | MODE_00_8N1 | | 0 | 1 | 8O1 | MODE_01_8O1 | | 1 | 0 | 8 E1 | MODE_10_8E1 | | 1 | 1 | 8N1 (igual a 00) | MODE_11_8N1 |
UART BAUD Tasa: la tasa de baudios de UART puede ser diferente entre las partes de comunicación, la tasa de baudios UART no tiene nada que ver con los parámetros de transmisión inalámbrica y no afectará las características inalámbricas de transmisión / recepción.
| 5 | 43 | TTL UART BAUD TASA (BPS) | Valor constante |
|---|---|---|---|
| 0 | 0 | 0 | 1200 |
| 0 | 0 | 1 | 2400 |
| 0 | 1 | 0 | 4800 |
| 0 | 1 | 1 | 9600 (predeterminado) |
| 1 | 0 | 0 | 19200 |
| 1 | 0 | 1 | 38400 |
| 1 | 1 | 0 | 57600 |
| 1 | 1 | 1 | 115200 |
Velocidad de datos del aire: cuanto menor sea la velocidad de datos del aire, más larga es la distancia de transmisión, un mejor rendimiento anti-interferencia y un tiempo de transmisión más largo, la velocidad de datos del aire debe mantener lo mismo para ambas partes de comunicación.
| 2 | 1 | 0 | Velocidad de datos del aire (bps) | Valor constante |
|---|---|---|---|---|
| 0 | 0 | 0 | 0.3k | AIR_DATA_RATE_000_03 |
| 0 | 0 | 1 | 1.2k | AIR_DATA_RATE_001_12 |
| 0 | 1 | 0 | 2.4k (predeterminado) | 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 (igual a 101) | AIR_DATA_RATE_110_192 |
| 1 | 1 | 1 | 19.2k (igual a 101) | AIR_DATA_RATE_111_192 |
Modo de transmisión: en el modo de transmisión fijo, los primeros tres bytes de la trama de datos de cada usuario se pueden usar como dirección y canal altos/bajos. El módulo cambia su dirección y canal cuando se transmite. Y volverá a la configuración original después de completar el proceso.
| 7 | Bit de habilitación de transmisión fija (similar a Modbus) | Valor constante |
|---|---|---|
| 0 | Modo de transmisión transparente | Ft_transparent_transmission |
| 1 | Modo de transmisión fijo | Ft_fixed_transmission |
Modo de unidad IO: este bit se usa para la resistencia de extracción interna del módulo. También aumenta la adaptabilidad del nivel en caso de drenaje abierto. Pero en algunos casos, puede necesitar pull-up externo
resistor.
| 6 | Modo de unidad IO (predeterminado 1) | Valor constante |
|---|---|---|
| 1 | Salidas de pulsador de empuje TXD y AUX, entradas de extracción RXD | IO_D_MODE_PUSH_PULLS_PULL_UPS |
| 0 | TXD 、 salidas de colector abierto aux, entradas de colector rxd abierto | Io_d_mode_open_collector |
Tiempo de atención inalámbrico: el módulo de transmisión y recepción funciona en el modo 0, cuyo tiempo de retraso no es válido y puede ser un valor arbitrario, el transmisor funciona en el modo 1 puede transmitir el código de preámbulo del tiempo correspondiente continuamente, cuando el receptor funciona en el modo 2, el tiempo significa el tiempo de intervalo de monitor (activación inalámbrica). Solo los datos del transmisor que funcionan en el modo 1 pueden ser
recibió.
| 5 | 4 | 3 | Hora de atención inalámbrica | Valor constante |
|---|---|---|---|---|
| 0 | 0 | 0 | 250 ms (predeterminado) | Wake_up_250 |
| 0 | 0 | 1 | 500 ms | Wake_up_500 |
| 0 | 1 | 0 | 750 ms | Wake_up_750 |
| 0 | 1 | 1 | 1000 ms | Wake_up_1000 |
| 1 | 0 | 0 | 1250 ms | Wake_up_1250 |
| 1 | 0 | 1 | 1500 ms | Wake_up_1500 |
| 1 | 1 | 0 | 1750 ms | Wake_up_1750 |
| 1 | 1 | 1 | 2000 ms | Wake_up_2000 |
FEC: Después de apagar FEC, la velocidad de transmisión de datos real aumenta, mientras que la capacidad anti-interferencia disminuye. Además, la distancia de transmisión es relativamente corta, ambas partes de comunicación deben mantener en las mismas páginas sobre el encendido o el encendido FEC.
| 2 | Interruptor FEC | Valor constante |
|---|---|---|
| 0 | Apagar FEC | Fec_0_off |
| 1 | Encienda FEC (predeterminado) | Fec_1_on |
Potencia de transmisión
Puede cambiar este conjunto de constante aplicando una definición como así:
# define E32_TTL_100 // default value without set Aplicable para E32-TTL-100, E32-TTL-100S1, E32-T100S2.
La potencia externa debe asegurarse de la capacidad de la salida de corriente de más de 250 mA y asegurarse de que la fuente de alimentación se extienda dentro de los 100 mV.
No se recomienda la transmisión de baja potencia debido a su baja fuente de alimentación
eficiencia.
# define E32_TTL_100 // default value without set| 1 | 0 | Potencia de transmisión (aproximación) | Valor constante |
|---|---|---|---|
| 0 | 0 | 20dbm (predeterminado) | Power_20 |
| 0 | 1 | 17dbm | Power_17 |
| 1 | 0 | 14dbm | Power_14 |
| 1 | 1 | 10dbm | Power_10 |
Aplicable para E32-TTL-500。
La potencia externa debe asegurarse de la capacidad de la salida actual de más de 700 mA y asegurarse de que la fuente de alimentación se extienda dentro de los 100 mV.
No se recomienda una transmisión de baja potencia debido a su baja eficiencia de suministro de energía.
# define E32_TTL_500| 1 | 0 | Potencia de transmisión (aproximación) | Valor constante |
|---|---|---|---|
| 0 | 0 | 27dbm (predeterminado) | Power_27 |
| 0 | 1 | 24 dbm | Power_24 |
| 1 | 0 | 21dbm | Power_21 |
| 1 | 1 | 18dbm | Power_18 |
Aplicable para E32-TTL-1W, E32 (433T30S), E32 (868T30), E32 (915T30)
La potencia externa debe asegurarse de la capacidad de la salida actual de más de 1A y asegurarse de que la fuente de alimentación se extienda dentro de los 100 mV.
No se recomienda la transmisión de baja potencia debido a su baja fuente de alimentación
eficiencia.
# define E32_TTL_1W| 1 | 0 | Potencia de transmisión (aproximación) | Valor constante |
|---|---|---|---|
| 0 | 0 | 30dbm (predeterminado) | Power_30 |
| 0 | 1 | 27dbm | Power_27 |
| 1 | 0 | 24 dbm | Power_24 |
| 1 | 1 | 21dbm | Power_21 |
Puede configurar OLSO de frecuencia de canal con esta definición:
// One of
# define FREQUENCY_433
# define FREQUENCY_170
# define FREQUENCY_470
# define FREQUENCY_868
# define FREQUENCY_915Primero debemos introducir un método simple pero útil para verificar si algo está en el búfer receptor
int available ();Es simplemente devolver cuántos bytes tiene en la transmisión actual.
El modo de transmisión normal/transparente se usa para enviar mensajes a todos los dispositivos con la misma dirección y canal.
Los escenarios de transmisión de Lora E32, las líneas son canales
Hay muchos métodos para enviar/recibir un mensaje, vamos a explicar en detalle:
ResponseStatus sendMessage ( const String message);ResponseContainer receiveMessage ();El primer método es SendMessage y se usa para enviar una cadena a un dispositivo en modo normal .
ResponseStatus rs = e32ttl.sendMessage( " Prova " );
Serial.println(rs.getResponseDescription());El otro dispositivo simplemente lo hace en el bucle
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);
}Si desea enviar una estructura compleja, puede usar este método
ResponseStatus sendMessage ( const void *message, const uint8_t size);
ResponseStructContainer receiveMessage ( const uint8_t size);Se usa para enviar estrucutre, por ejemplo:
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());y el otro lado puede recibir el mensaje para que
ResponseStructContainer rsc = e32ttl.receiveMessage( sizeof (Messaggione));
struct Messaggione messaggione = *(Messaggione*) rsc.data;
Serial.println(messaggione.message);
Serial.println(messaggione.mitico);Si desea leer la primera parte del mensaje para administrar más tipo de estructura, puede usar este método.
ResponseContainer receiveInitialMessage ( const uint8_t size);Lo creo para recibir una cadena con tipo u otro para identificar la estructura para cargar.
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;De la misma manera, creo un conjunto de método para usar con transmisión fija
Debe cambiar solo el método de envío, porque el dispositivo de destino no recibe el preámbulo con la dirección y el canal.
Así que para el mensaje de cadena que tienes
ResponseStatus sendFixedMessage (byte ADDL, byte ADDH, byte CHAN, const String message);
ResponseStatus sendBroadcastFixedMessage (byte CHAN, const String message);y para la estructura que tienes
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 );Aquí un ejemplo simple
ResponseStatus rs = e32ttl.sendFixedMessage( 0 , 0 , 0x17 , &messaggione, sizeof (Messaggione));
// ResponseStatus rs = e32ttl.sendFixedMessage(0, 0, 0x17, "Ciao");La transmisión fija tiene más escenarios
Los escenarios de transmisión de Lora E32, las líneas son canales
Si envía a un dispositivo específico (segundos escenarios de transmisión fija), debe agregar ADDL, ADDH y CHAN para identificarlo directamente.
ResponseStatus rs = e32ttl.sendFixedMessage( 2 , 2 , 0x17 , " Message to a device " );Si desea enviar un mensaje a todos los dispositivos en un canal especificado, puede usar este método.
ResponseStatus rs = e32ttl.sendBroadcastFixedMessage( 0x17 , " Message to a devices of a channel " ); Si desea recibir todo el mensaje de transmisión en la red, debe establecer su ADDH y ADDL con 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);