martes, 4 de noviembre de 2025

LoRa E220

Es una familia de transceptores LORA. Se comunica con el microcontrolador por el puerto serie.

A continuación, a modo de ejemplo, se ofrece una visión general de algunos representantes de la serie E220:

Descripción general del modelo de la serie LoRa E220 (fuente: hoja de datos E220-900T22D)

Datos técnicos (Ejemplo E220-900T22D)

Puede encontrar hojas de datos y manuales en el sitio web de Chengdu Ebyte . Por ejemplo, aquí tiene los datos técnicos del modelo E220-900T22D:

Datos técnicos del módulo LoRa E220-900T22D (fuente: hoja de datos del E220-900T22D)

Existe otra hoja de datos para el mismo módulo, pero con información ligeramente diferente sobre el suministro de voltaje óptimo:

Versión 2 del módulo LoRa E220-900T22D.

En caso de duda, pruebe a ver si obtiene mejores resultados con 5 voltios. Sin embargo, es importante tener en cuenta que no todos los pines admiten 5 voltios. Por lo tanto, para MCU de 5 voltios, debería usar variadores de nivel o divisores de tensión.

Distribución de pines de las series LoRa E220

Distribución de pines de LoRa E220

GND / VCC : Fuente de alimentación

AUX : Indica el estado de los buffers de datos para envío y recepción y se utiliza para la autocomprobación.

RX/TX : Comunicación en serie

M0 / M1 (E220) : Control de los cuatro modos de funcionamiento:

M0 = BAJO, M1 = BAJO : Modo normal

M0 = ALTO, M1 = BAJO : Transmisor WOR

M0 = BAJO, M1 = ALTO : Receptor WOR

M0 = ALTO, M1 = ALTO : Sueño profundo

Bibliotecas para las series Ebyte E220

Seleccioné las bibliotecas de Renzo Mischianti para controlar los módulos. Puedes descargarlas aquí desde GitHub:

Biblioteca EByte_LoRa_Serie E220

…o instalarlo a través del administrador de bibliotecas del IDE de Arduino.

Además, el diligente Renzo Mischianti ha creado un tutorial de varias partes para cada módulo. Aquí están los enlaces a las primeras partes: Tutorial E220.

Conexiones para el Arduino Nano

En este artículo, utilizo el clásico Arduino Nano como placa de control. Lo conecté al módulo E220:

Conexión del módulo E220 al Arduino Nano

Algunos comentarios sobre esto:

Si no desea utilizar los modos WOR (Wake On Radio) o de apagado, puede conectar M0 y M1 a GND.

En principio, también se puede dejar AUX desconectado. En este caso, el microcontrolador no sabe cuándo se completa la transferencia de datos, pero la biblioteca proporciona un tiempo de espera suficiente.

Al utilizar una placa de 5 voltios, debe utilizar un cambiador de nivel o un divisor de voltaje (por ejemplo, 2 kΩ / 1 kΩ) para conectar M0, M1, RX a los pines de la placa.

AUX, RX y TX requieren una resistencia pull-up.

Se pueden encontrar circuitos de ejemplo para otras placas MCU en los tutoriales de Renzo Mischianti.

Las antenas que utilicé para los módulos E220-900T22D eran versiones especiales con base magnética para 868 MHz. Están disponibles por menos de 10 € en tiendas online.

Así es como se veía mi configuración en la placa de pruebas:

Módulo LoRa E220 conectado a un Arduino Nano en la placa de pruebas

Cómo realizar ajustes

Boceto de configuración utilizando la serie de módulos E220

Las bibliotecas incluyen bocetos de ejemplo independientes para configurar y operar los módulos. Utilice setConfiguration.ino para configurar los ajustes y getConfiguration.ino para consultarlos. Estos ajustes se conservan incluso si se desconecta la alimentación, siempre que se seleccione el parámetro WRITE_CFG_PWR_DWN_SAVE al guardar la configuración (línea 62 del siguiente boceto).

Al abrir setConfiguration.ino, puede que su tamaño le sobrepase. Sin embargo, la mayor parte está comentada y muchos elementos se repiten. La sección superior contiene varios ejemplos de creación de objetos para diferentes placas. La sección central contiene ejemplos de configuración listos para usar que puede descomentar fácilmente. Al final encontrará las funciones para mostrar la configuración. 

He reducido setConfiguration.ino (módulo E220) a lo esencial para su uso en un Arduino Nano. Además, he añadido algunas líneas:

Las líneas 1 a 5 se utilizan para generar la frecuencia correcta. Simplemente descomente la línea con el rango de frecuencia correcto.

Las líneas 6 y 7 son relevantes para seleccionar la intensidad de la señal.

La línea 8 garantiza que las configuraciones se muestren en detalle.

Las líneas 57 y 58 le permiten cifrar sus mensajes individualmente.

setConfiguration_modified.ino

// #define FREQUENCY_433 // valor predeterminado sin conjunto

// #define FRECUENCIA_170

// #define FRECUENCIA_470

#define FRECUENCIA_868

// #define FRECUENCIA_915

// #define E220_22 // valor predeterminado sin conjunto

// #define E220_30 // descomente en caso de utilizar un E220...T30D o E220...T30S

#define LoRa_E220_DEBUG // para imprimir la configuración

#include "LoRa_E220.h"

SoftwareSerial mySerial ( 4 , 5 ) ; // Arduino RX <-- e220 TX, Arduino TX --> e220 RX

LoRa_E220 e220ttl ( &mySerial, 3 , 7 , 6 ) ; //AUX M0 M1

// LoRa_E220 e220ttl(4, 5, 3, 7, 6); // función alternativa para crear el objeto LoRa_E220

void printParameters ( struct Configuración configuración ) ; 

void printModuleInformation ( struct ModuleInformation moduleInformation ) ; 

configuración vacía () {  

  Serie.begin ( 9600 ) ;​

  mientras ( !Serial ){} ;

  retraso ( 500 ) ;

  Serie.println ( ) ;

  // Iniciar todos los pines y UART

  e220ttl.begin ( ) ;

  RespuestaStructContainer c;

c   = e220ttl.getConfiguration () ;

  // Es importante obtener el puntero de configuración antes de cualquier otra operación

  Configuración configuración = * ( Configuración * ) c. datos ;

  Serial.println ( c.status.getResponseDescription ( ) ) ;​​

  Serial.println ( c.status.code ) ;​​​​

  printParameters ( configuración ) ;

// ----------------------- TRANSPARENTE PREDETERMINADO -----------------------

  configuración. ADDL = 0x02 ;   // Byte bajo de dirección

  configuración. ADDH = 0x00 ; // Byte alto de dirección

  configuración. CHAN = 18 ; // 868 MHz para módulos Exxx-900, elija 23 para Exxx-400 para establecer 433 MHz

  configuración. SPED . uartBaudRate = UART_BPS_9600; // Velocidad en baudios serie

  configuración. SPED . airDataRate = AIR_DATA_RATE_010_24; // Velocidad en baudios del aire

  configuración. SPED . uartParity = MODE_00_8N1; // Bit de paridad

  configuración. OPCIÓN . subPacketSetting = SPS_200_00; // Tamaño del paquete

  configuración. OPCIÓN . RSSIAmbientNoise = RSSI_AMBIENT_NOISE_DISABLED; // Se necesita enviar un comando especial

  configuración. OPCIÓN . transmisiónPower = POWER_22; // Potencia del dispositivo

  configuración. TRANSMISSION_MODE . enableRSSI = RSSI_DISABLED; // Habilitar información RSSI

  configuración. MODO_DE_TRANSMISIÓN . Transmisión_fija = TRANSMISIÓN_TRANSPARENTE FT; // Modo de transmisión

  configuración. TRANSMISSION_MODE . enableLBT = LBT_DISABLED; // Verificar interferencia

  configuración. MODO DE TRANSMISIÓN . PERIODO DE ORO = WOR_2000_011; // Sincronización de WOR

  configuración. CRYPT . CRYPT_H = 0x00 ;   // byte alto de cifrado, predeterminado: 0x00

  configuración. CRYPT . CRYPT_L = 0x00 ;   // byte bajo de cifrado, predeterminado: 0x00

  /* Se modificó la configuración y se estableció que se mantenga la configuración; elegido

WRITE_CFG_PWR_DWN_LOSE para no guardar la configuración de forma permanente */

  ResponseStatus rs = e220ttl.setConfiguration ( configuración , WRITE_CFG_PWR_DWN_SAVE ) ;

  Serie.println ( rs.getResponseDescription ( ) ) ;

  Serial.println ( rs.código ) ;​​

c   = e220ttl.getConfiguration () ;

  // Es importante obtener el puntero de configuración antes de cualquier otra operación

  configuración = * ( Configuración * ) c. datos ;

  Serial.println ( c.status.getResponseDescription ( ) ) ;​​

  Serial.println ( c.status.code ) ;​​​​

  printParameters ( configuración ) ;

  c. cerrar () ;

}

bucle vacío () {  

}

void printParameters ( struct Configuración configuración ) {  

  DEBUG_PRINTLN ( "----------------------------------------" ) ;

  DEBUG_PRINT ( F ( "HEAD: " )) ;   DEBUG_PRINT ( configuración.COMANDO , HEX ) ; DEBUG_PRINT ( " " ) ; DEBUG_PRINT ( configuración.DIRECCIÓN_INICIAL , HEX ) ; DEBUG_PRINT ( " " ) ; DEBUG_PRINTLN ( configuración.LENGHT , HEX ) ;

  DEBUG_PRINTLN ( F ( " " )) ;

  DEBUG_PRINT ( F ( "AddH:" )) ;   DEBUG_PRINTLN ( configuración.ADDH , HEX ) ;

  DEBUG_PRINT ( F ( "AddL:" )) ;   DEBUG_PRINTLN ( configuracion.ADDL , HEX ) ;

  DEBUG_PRINTLN ( F ( " " )) ;

  DEBUG_PRINT ( F ( " Chan:" )) ;   DEBUG_PRINT ( configuración.CHAN ,DEC ) ; DEBUG_PRINT ( " ->" ) ; DEBUG_PRINTLN ( configuración.getChannelDescription ()) ;

  DEBUG_PRINTLN ( F ( " " )) ;

  DEBUG_PRINT ( F ( " SpeedParityBit: " )) ;   DEBUG_PRINT ( configuración.SPED.uartParity , BIN ) ; DEBUG_PRINT ( "- > " ) ; DEBUG_PRINTLN ( configuración.SPED.getUARTParityDescription ( ) ) ;

  DEBUG_PRINT ( F ( " SpeedUARTFecha : " ) ) ;   DEBUG_PRINT ( configuración.SPED.uartBaudRate , BIN ) ; DEBUG_PRINT ( "->" ) ; DEBUG_PRINTLN ( configuración.SPED.getUARTBaudRateDescription ( ) ) ;

  DEBUG_PRINT ( F ( " SpeedAirDataRate: " ) ) ;   DEBUG_PRINT ( configuración.SPED.airDataRate , BIN ) ; DEBUG_PRINT ( "-> " ) ; DEBUG_PRINTLN ( configuración.SPED.getAirDataRateDescription ( ) ) ;

  DEBUG_PRINTLN ( F ( " " )) ;

  DEBUG_PRINT ( F ( " OptionSubPacketSett : " )) ;   DEBUG_PRINT ( configuracion.OPCION.subPacketSetting , BIN ) ; DEBUG_PRINT ( " - >" ) ; DEBUG_PRINTLN ( configuracion.OPCION.getSubPacketSetting ( )) ;

  DEBUG_PRINT ( F ( " OpcionPotenciaTransmision: " ) ) ;   DEBUG_PRINT ( configuracion.OPCION.PotenciaTransmision , BIN ) ; DEBUG_PRINT ( " - > " ) ; DEBUG_PRINTLN ( configuracion.OPCION.obtenerDescripciónPotenciaTransmision ( ) ) ;

  DEBUG_PRINT ( F ( " OpciónRSSIAmbientNo: " )) ;   DEBUG_PRINT ( configuración.OPCIÓN.RSSIAmbientNoise , BIN ) ; DEBUG_PRINT ( " - > " ) ; DEBUG_PRINTLN ( configuración.OPCIÓN.getRSSIAmbientNoiseEnable ( ) ) ;

  DEBUG_PRINTLN ( F ( " " )) ;

  DEBUG_PRINT ( F ( " TransModeWORPeriod:" ) ) ;   DEBUG_PRINT ( configuración.MODO_TRANSMISIÓN.WORPeriod ,BIN ) ; DEBUG_PRINT ( " -> " ) ; DEBUG_PRINTLN ( configuración.MODO_TRANSMISIÓN.getWORPeriodByParamsDescription ( ) ) ;

  DEBUG_PRINT ( F ( " TransModeEnableLBT:" )) ;   DEBUG_PRINT ( configuración.MODO_TRANSMISIÓN.enableLBT , BIN ) ; DEBUG_PRINT ( "- > " ) ; DEBUG_PRINTLN ( configuración.MODO_TRANSMISIÓN.getLBTEnableByteDescription ( ) ) ;

  DEBUG_PRINT ( F ( " TransModeEnableRSSI: " )) ;   DEBUG_PRINT ( configuración.MODO_TRANSMISIÓN.enableRSSI , BIN ) ; DEBUG_PRINT ( "- > " ) ; DEBUG_PRINTLN ( configuración.MODO_TRANSMISIÓN.getRSSIEnableByteDescription ( ) ) ;

  DEBUG_PRINT ( F ( " TransModeFixedTrans: " )) ; DEBUG_PRINT   ( configuración.MODO_TRANSMISIÓN.fixedTransmission , BIN ) ; DEBUG_PRINT ( " -> " ) ; DEBUG_PRINTLN ( configuración.MODO_TRANSMISIÓN.getFixedTransmissionDescription ( ) ) ;

  DEBUG_PRINTLN ( "----------------------------------------" ) ;

}

void printModuleInformation ( estructura ModuleInformation moduleInformation ) {  

  Serie.println ( "---------------------------------------- " ) ;

  DEBUG_PRINT ( F ( "HEAD: " )) ;   DEBUG_PRINT ( moduleInformation.COMMAND , HEX ) ; DEBUG_PRINT ( " " ) ; DEBUG_PRINT ( moduleInformation.STARTING_ADDRESS , HEX ) ; DEBUG_PRINT ( " " ) ; DEBUG_PRINTLN ( moduleInformation.LENGHT , DEC ) ;

  Serie.print ( F ( " N.º de modelo: " ) ) ; Serie.println ( moduleInformation.model , HEX ) ;

  Serial.print ( F ( " Versión: " ) ) ; Serial.println ( moduleInformation.version , HEX ) ;

  Serial.print ( F ( " Características:" ) ) ; Serial.println ( moduleInformation.características , HEX ) ;

  Serie.println ( "---------------------------------------- " ) ;

}

Otros esquemas de conexión

Conexiones del MolinsSat 2024.



No hay comentarios: