

Para instalar la biblioteca, ejecute el siguiente comando:
pip install ebyte-lora-e220-circuitpythonAquí un ejemplo de constructor, debe pasar la interfaz UART y (si lo desea, pero se recomienda) el pin aux, M0 y M1.
from lora_e220 import LoRaE220
import busio
import board
uart2 = busio . UART ( board . TX2 , board . RX2 , baudrate = 9600 )
lora = LoRaE220 ( '400T22D' , uart2 , aux_pin = board . D15 , m0_pin = board . D21 , m1_pin = board . D19 ) code = lora . begin ()
print ( "Initialization: {}" , ResponseStatusCode . get_description ( code )) from lora_e220 import LoRaE220 , print_configuration
from lora_e220_operation_constant import ResponseStatusCode
code , configuration = lora . get_configuration ()
print ( "Retrieve configuration: {}" , ResponseStatusCode . get_description ( code ))
print_configuration ( configuration )El resultado
----------------------------------------
Initialization: {} Success
Retrieve configuration: {} Success
----------------------------------------
HEAD : 0xc1 0x0 0x8
AddH : 0x0
AddL : 0x0
Chan : 23 -> 433
SpeedParityBit : 0b0 -> 8N1 (Default)
SpeedUARTDatte : 0b11 -> 9600bps (default)
SpeedAirDataRate : 0b10 -> 2.4kbps (default)
OptionSubPacketSett: 0b0 -> 200bytes (default)
OptionTranPower : 0b0 -> 22dBm (Default)
OptionRSSIAmbientNo: 0b0 -> Disabled (default)
TransModeWORPeriod : 0b11 -> 2000ms (default)
TransModeEnableLBT : 0b0 -> Disabled (default)
TransModeEnableRSSI: 0b0 -> Disabled (default)
TransModeFixedTrans: 0b0 -> Transparent transmission (default)
----------------------------------------
Puede establecer solo el parámetro Desiderado, el otro se establecerá en el valor predeterminado.
configuration_to_set = Configuration ( '400T22D' )
configuration_to_set . ADDL = 0x02
configuration_to_set . ADDH = 0x01
configuration_to_set . CHAN = 23
configuration_to_set . SPED . airDataRate = AirDataRate . AIR_DATA_RATE_100_96
configuration_to_set . SPED . uartParity = UARTParity . MODE_00_8N1
configuration_to_set . SPED . uartBaudRate = UARTBaudRate . BPS_9600
configuration_to_set . OPTION . transmissionPower = TransmissionPower ( '400T22D' ).
get_transmission_power (). POWER_10
# or
# configuration_to_set.OPTION.transmissionPower = TransmissionPower22.POWER_10
configuration_to_set . OPTION . RSSIAmbientNoise = RssiAmbientNoiseEnable . RSSI_AMBIENT_NOISE_ENABLED
configuration_to_set . OPTION . subPacketSetting = SubPacketSetting . SPS_064_10
configuration_to_set . TRANSMISSION_MODE . fixedTransmission = FixedTransmission . FIXED_TRANSMISSION
configuration_to_set . TRANSMISSION_MODE . WORPeriod = WorPeriod . WOR_1500_010
configuration_to_set . TRANSMISSION_MODE . enableLBT = LbtEnableByte . LBT_DISABLED
configuration_to_set . TRANSMISSION_MODE . enableRSSI = RssiEnableByte . RSSI_ENABLED
configuration_to_set . CRYPT . CRYPT_H = 1
configuration_to_set . CRYPT . CRYPT_L = 1
# Set the new configuration on the LoRa module and print the updated configuration to the console
code , confSetted = lora . set_configuration ( configuration_to_set )Creo una clase de constantes para cada parámetro, aquí una lista: Airdatarate, Uartbaudrate, Uartparity, TransmissionPower, ForwardErrorcorrectionSwitch, Wirelesswakeuptime, IODRIVEMODE, TRANSMISIÓN FIJA
Aquí un ejemplo de datos de envío, puede pasar una cadena
lora . send_transparent_message ( 'pippo' ) lora . send_fixed_message ( 0 , 2 , 23 , 'pippo' )Aquí el código receptor
while True :
if lora . available () > 0 :
code , value = lora . receive_message ()
print ( ResponseStatusCode . get_description ( code ))
print ( value )
time . sleep ( 2 )Si desea recibir RSSI, también debe habilitarlo en la configuración
configuration_to_set . TRANSMISSION_MODE . enableRSSI = RssiEnableByte . RSSI_ENABLEDy configure el indicador en verdadero en el método Recibe_Message
code , value , rssi = lora . receive_message ( True )Resultado
Success!
pippo
Aquí un ejemplo de datos de envío, puede aprobar un diccionario
lora . send_transparent_dict ({ 'pippo' : 'fixed' , 'pippo2' : 'fixed2' }) lora . send_fixed_dict ( 0 , 0x01 , 23 , { 'pippo' : 'fixed' , 'pippo2' : 'fixed2' })Aquí el código receptor
while True :
if lora . available () > 0 :
code , value = lora . receive_dict ()
print ( ResponseStatusCode . get_description ( code ))
print ( value )
print ( value [ 'pippo' ])
time . sleep ( 2 )Si desea recibir RSSI, también debe habilitarlo en la configuración
configuration_to_set . TRANSMISSION_MODE . enableRSSI = RssiEnableByte . RSSI_ENABLEDy configure el indicador en verdadero en el método Recibe_Dict
code , value , rssi = lora . receive_dict ( True )Resultado
Success!
{'pippo': 'fixed', 'pippo2': 'fixed2'}
fixed
Lora Smart Home (LLCC68) es un transceptor de RF Lora® Sub-Ghz para aplicaciones inalámbricas interiores y interiores a exteriores. Interfaz SPI. Pin-to-Pin es compatible con SX1262. SX1261, SX1262, SX1268 y LLCC68 están diseñados para una duración de batería larga con solo 4.2 mA de consumo de corriente de recepción activa. El SX1261 puede transmitir hasta +15 dBm, y el SX1262, SX1268 y LLCC68 pueden transmitir hasta +22 dBm con amplificadores de potencia integrados altamente eficientes.
Estos dispositivos admiten la modulación Lora para los casos de uso de LPWAN y (g) modulación FSK para casos de uso heredado. Los dispositivos son altamente configurables para cumplir con diferentes requisitos de aplicación para el uso del consumidor. El dispositivo proporciona una modulación LORA compatible con los transceptores SEMTech utilizados por la especificación Lorawan® liberada por Lora Alliance®. La radio es adecuada para sistemas dirigidos al cumplimiento de las regulaciones de radio, incluidos, entre otros, ETSI EN 300 220, FCC CFR 47 Parte 15, Requisitos regulatorios de China y el Japones Japones T-108 ARIB T-108. La cobertura de frecuencia continua de 150MHz a 960MHz permite el apoyo de todas las principales bandas ISM de Sub-Ghz en todo el mundo.
| LLCC68 | SX1278-SX1276 | |
|---|---|---|
| Distancia | > 11 km | 8 km |
| Tasa (lora) | 1.76kbps - 62.5kbps | 0.3kbps - 19.2kbps |
| Consumo de energía del sueño | 2 µA | 5 µA |
Biblioteca para el dispositivo Ebyte Lora E220 LLCC68 para Arduino, ESP32 o ESP8266.
| Pin No. | Artículo de PIN | Dirección del alfiler | Aplicación PIN |
|---|---|---|---|
| 1 | M0 | Entrada (Plegada débil) | Trabaje con M1 y decida los cuatro modos de operación. No se permite flotar; puede ser molido. |
| 2 | M1 | Entrada (Plegada débil) | Trabaje con M0 y decida los cuatro modos de operación. No se permite flotar; puede ser molido. |
| 3 | Rxd | Aporte | Las entradas TTL UART se conectan a un pin de salida TXD externo (MCU, PC). Se puede configurar como entrada abierta o entrada de pull-up. |
| 4 | TXD | Producción | Las salidas TTL UART se conectan al pin de entrada RXD externo (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 despertar el MCU externo. Durante el procedimiento de inicialización de autoevaluación, el PIN genera un nivel bajo. Se puede configurar como salida de drenaje abierto o pull-pull (se permite flotar). |
| 6 | VCC | Fuente de alimentación 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 | Los canales de UART e inalámbricos están abiertos, y la transmisión transparente está encendida |
| Transmisor WOR | 0 | 1 | Transmisor WOR |
| Receptor de wor | 1 | 0 | RECEPTOR WOR (SIGUIENTE AMIRE AIR) |
| Modo de suspensión profunda | 1 | 1 | El módulo va a dormir (despierta automáticamente al configurar los parámetros) |
Algunos pines se pueden usar estáticamente, pero si los conecta al microcontrolador y los configura en la biblioteca, obtiene el rendimiento y puede controlar todos los modos a través del software. Aún así, vamos a explicar mejor a continuación.
Como ya dije, no es esencial conectar todos los pines a la salida del microcontrolador; Puede poner pines M0 y M1 a altos o bajos para obtener la configuración deseada. Si no conecta Aux, la biblioteca establece un retraso razonable para garantizar que la operación esté completa ( si tiene problemas con el congelamiento del dispositivo, debe colocar una resistencia de 4.7k pull-up o conectarse mejor al dispositivo ).
Al transmitir datos se pueden usar para despertar MCU externo y devolver un alto al final de la transferencia de datos.
Al recibir, Aux se baja y regresa alto cuando el búfer está vacío.
También se utiliza para la autoevaluación para restaurar la operación regular (en modo de encendido y sueño/programa).
El esquema de conexión ESP8266 es más sencillo porque funciona a la misma voltaje de comunicaciones lógicas (3.3V).
Es esencial agregar una resistencia pull-up (4,7 kohm) para obtener una buena estabilidad.
| E22 | ESP8266 |
|---|---|
| M0 | D7 |
| M1 | D6 |
| Tx | Pin D2 (pullup 4,7kΩ) |
| Rx | Pin D3 (pullup 4,7kΩ) |
| Aux | Pin D5 (pullup 4,7kΩ) |
| VCC | 5V (pero trabaja con menos potencia en 3.3V) |
| Gnd | Gnd |
Esquema de conexión similar para ESP32, pero para RX y TX, usamos RX2 y TX2 porque, por defecto, ESP32 no tiene SoftWareserial pero tiene 3 serías.
| E22 | ESP32 |
|---|---|
| M0 | D21 |
| M1 | D19 |
| Tx | PIN RX2 (pullup 4,7kΩ) |
| Rx | Pin TX3 (pullup 4,7kΩ) |
| Aux | Pin D18 (pullup 4,7kΩ) (D15 para despertarse) |
| VCC | 5V (pero trabaja con menos potencia en 3.3V) |
| Gnd | Gnd |
| M0 | 2 (divisor de voltaje) |
| M1 | 3 (divisor de voltaje) |
| Tx | Pin 14 TX (pullup 4,7kΩ) |
| Rx | Pin 13 RX (pullup 4,7kΩ) |
| Aux | Pin 1 (pullup 4,7kΩ) |
| VCC | 5V |
| Gnd | Gnd |
Puedes pedir el PCB aquí
Instrucción y video de ensamblaje en 6 parte de la guía
Puedes pedir el PCB aquí
Instrucción y video de ensamblaje en 6 parte de la guía
La telemetría de datos inalámbricos de Lora o de largo alcance es una tecnología pionera por SEMTech que funciona a una frecuencia más baja que NRF24L01 (433 MHz, 868 MHz o 916 MHz contra 2.4 GHz para el NRF24L01) pero a las primeras de la distancia (de 5000m a 11000m).
| Nombre | Descripción | DIRECCIÓN |
|---|---|---|
| Adjunta | Byte de dirección alta del módulo (el 00h predeterminado) | 00h |
| Complemento | Byte de dirección baja del módulo (el 00h predeterminado) | 01h |
| Acelerado | Información sobre la velocidad de datos Bit de paridad y la velocidad de datos del aire | 02h |
| OPCIÓN | Tipo de transmisión, tamaño de paquete, permitir el mensaje especial | 03h |
| Chan | Canal de comunicación (410m + chan*1m), predeterminado 17H (433MHz), válido solo para la verificación del dispositivo de 433MHz a continuación para verificar la frecuencia correcta de su dispositivo | 04h |
| OPCIÓN | Tipo de transmisión, tamaño de paquete, permitir el mensaje especial | 05h |
| Transmission_mode | Muchos parámetros que especifican la modalidad de transmisión | 06h |
| CRIPTA | Cifrado para evitar la intercepción | 07H |
Bit de paridad UART: el modo UART puede ser diferente entre las fiestas de comunicación
| Bit de paridad de uart | Valor constante |
|---|---|
| 8N1 (predeterminado) | MODE_00_8N1 |
| 8O1 | MODE_01_8O1 |
| 8E1 | MODE_10_8E1 |
| 8n1 (igual a 00) | MODE_11_8N1 |
Tasa de baudios de UART: la tasa de baudios de UART puede ser diferente entre las partes de comunicación (pero no se registran). La tasa de baudios UART no tiene nada que ver con los parámetros de transmisión inalámbrica y no afectará las funciones de transmisión/recepción inalámbrica.
| TTL UART BAUD TASA (BPS) | Valor constante |
|---|---|
| 1200 | Uart_bps_1200 |
| 2400 | Uart_bps_2400 |
| 4800 | Uart_bps_4800 |
| 9600 (predeterminado) | Uart_bps_9600 |
| 19200 | Uart_bps_19200 |
| 38400 | Uart_bps_38400 |
| 57600 | Uart_bps_57600 |
| 115200 | Uart_bps_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 ser constante para ambas partes de comunicación.
| Velocidad de datos del aire (bps) | Valor constante |
|---|---|
| 2.4k | AIR_DATA_RATE_000_24 |
| 2.4k | AIR_DATA_RATE_001_24 |
| 2.4k (predeterminado) | 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 |
Esta es la longitud máxima del paquete.
Cuando los datos son más pequeños que la longitud del subpacket, la salida en serie del extremo receptor es una salida continua ininterrumpida. El puerto serie de recepción del extremo generará la subpacket cuando los datos son más grandes que la longitud del subpacket.
| Tamaño de paquete | Valor constante |
|---|---|
| 200bytes (predeterminado) | SPS_200_00 |
| 128bytes | SPS_128_01 |
| 64bytes | SPS_064_10 |
| 32bytes | SPS_032_11 |
Este comando puede habilitar/deshabilitar el tipo de administración de RSSI, y es esencial administrar la configuración remota. Prestar atención no es el parámetro RSSI en el mensaje.
Cuando está habilitado, los comandos C0, C1, C2, C3 se pueden enviar en el modo de transmisión o el modo de transmisión WOR para leer el registro. Registro 0x00: Registro RSSI de ruido ambiental actual 0x01: RSSI Cuando los datos se recibieron la última vez.
| RSSI Ambient Noise Habilitar | Valor constante |
|---|---|
| Permitir | Rssi_ambient_noise_enabled |
| Deshabilitar (predeterminado) | Rssi_ambient_noise_disabled |
Puede cambiar este conjunto de constantes aplicando una definición como así:
#define E220_22 // Valor predeterminado sin SET
Aplicable para E220 con 22dbm como potencia máxima.
No se recomienda una transmisión de baja potencia debido a su baja eficiencia de suministro de energía.
| Potencia de transmisión (aproximación) | Valor constante |
|---|---|
| 22dbm (predeterminado) | Power_22 |
| 17dbm | Power_17 |
| 13dbm | Power_13 |
| 10dbm | Power_10 |
Aplicable para E220 con 30dbm como potencia máxima.
No se recomienda una transmisión de baja potencia debido a su baja eficiencia de suministro de energía.
#Define E220_30
| Potencia de transmisión (aproximación) | Valor constante |
|---|---|
| 30dbm (predeterminado) | Power_30 |
| 27dbm | Power_27 |
| 24 dbm | Power_24 |
| 21dbm | Power_21 |
Puede configurar la frecuencia del canal también con esta definición:
// uno de #Define Frecuencia_433 #Define Frecuencia_170 #Define FRECUENCY_470 #Define Frecuencia_868 #Define FRECUENCY_915
Cuando está habilitado, el módulo recibe datos inalámbricos y seguirá un byte de resistencia RSSI después de la salida a través del puerto serie TXD
| Habilitar RSSI | Valor constante |
|---|---|
| Permitir | Rssi_enabled |
| Deshabilitar (predeterminado) | Rssi_disable |
Modo de transmisión: los primeros tres bytes de la trama de datos de cada usuario se pueden usar como dirección alta/baja y canal en modo de transmisión fijo. 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.
| Bit de habilitación de transmisión fija | Valor constante |
|---|---|
| Modo de transmisión fijo | Ft_fixed_transmission |
| Modo de transmisión transparente (predeterminado) | Ft_transparent_transmission |
Cuando cuando se habilitan, los datos inalámbricos se monitorearán antes de transmitirlos, evitando la interferencia en cierta medida, pero pueden causar retraso en los datos.
| LBT habilita byte | Valor constante |
|---|---|
| Permitir | LBT_ENABLed |
| Deshabilitar (predeterminado) | LBT_DISABLED |
Si WORS se transmite: después de que el receptor WOR reciba los datos inalámbricos y los genera a través del puerto serie, esperará 1000 ms antes de ingresar al WOR nuevamente. Los usuarios pueden ingresar los datos del puerto serie y devolverlos a través de la inalámbrica durante este período. Cada byte serie se actualizará durante 1000 ms. Los usuarios deben transmitir el primer byte dentro de 1000 ms.
| Hora de atención inalámbrica | Valor constante |
|---|---|
| 500 ms | Wake_up_500 |
| 1000 ms | Wake_up_1000 |
| 1500 ms | Wake_up_1500 |
| 2000 ms (predeterminado) | Wake_up_2000 |
| 2500 ms | Wake_up_2500 |
| 3000 ms | Wake_up_3000 |
| 3500 ms | Wake_up_3500 |
| 4000 ms | Wake_up_4000 |
Primero, debemos introducir un método simple pero práctico para verificar si algo está en el búfer de recepción.
int disponible ();
Es simple devolver cuántos bytes tiene en la transmisión actual.
El modo de transmisión normal/transparente envía mensajes a todos los dispositivos con la misma dirección y canal.
La transmisión fija tiene más escenarios
Ahora tiene toda la información para hacer su trabajo, pero creo que es importante mostrar algunos ejemplos reales para comprender mejor todas las posibilidades.
Biblioteca de Github