Página principal
LORA (LoRaWAN) SX1278
Raspberry pi pico
IDE Arduino
Transmision temperatura desde ATMEGA a Raspberry pi pico
Módulo AHT20 - OLED
Tenía una raspberry pi pico, y mi idea era
comunicar el arduino con la raspberry pi pico a través de LORA
(LoRaWAN).
En primer lugar monto el transmisor con un arduino junto con el
sensor de temperatura y humedad (AHT20).
En anteriores montajes ya había realizado varios montajes, en este
lo junto todo.
EMISOR
El sensor AHT20 se comunica mediante el bus I2C, funciona a 5V.
Module AHT20 // Arduino UNO/NANO
A4->SDA
A5->SDL
GND->GND
5V->VIN
El transmisor LORA SX1278 se comunica mediante
el bus SPI, funciona a 3.3V .
Module SX1278 // Arduino UNO/NANO
GND
-> GND
Vcc
-> 3.3V
MISO ->
D12
MOSI ->
D11
SLCK ->
D13
Nss
-> D10
Di00 ->
D2
RST
-> D9
Los datos de temperatura y humedad se envían cada 1500 mS.
El formato es:
Num=23 Temperatura=20.34 Humedad=50.34
RECEPTOR
El OLED se comunica mediante el bus I2C.
OLED -> PICO
SLC->1
SDA->0
VCC->3V3
GND->GND
Como en la Raspberry pi pico se pueden utilizar diferentes PINS para
el bus I2C, debemos indicar que PINS se deben utilizar.
Esto se realiza en la configuración con:
Wire.setSDA(0);
Wire.setSCL(1);
Wire.begin();
Nos falta conectar el
receptor LORA SX1278 al raspberry mediante el bus SPI.
Module SX1278 // Raspberry pico pi
GND
-> GND
Vcc
-> 3.3V
MISO ->
16
MOSI ->
19
SLCK ->
18
Nss
-> 17
La configuración en la parte del programa fue difícil, es lo que mas
me costó.
#define M_MISO 16
#define M_CS 17
#define M_SCK 18
#define M_MOSI 19
const uint8_t SPI_MISO = M_MISO;
const uint8_t SPI_CS = M_CS;
const uint8_t SPI_SCK = M_SCK;
const uint8_t SPI_MOSI = M_MOSI;
LoRa.setPins(M_CS);
La conexión del pin de interrupción DIO0 no se hace debido a que no
está implementada en la librería, además tampoco se utiliza el pin
de RESET.
He creado una función que lee la cadena recibida y extrae el valor
de una cadena pedida.
Esta función es muy útil para cualquier otro montaje.
/* busca en una cadena (*in), una cadena (*busqueda), y
devuelve el valor en (*valor) */
int busqueda(char* in, char* busqueda, char* valor)
Ejemplo:
if (1 == busqueda(buffer, (char*)"Num=",
bufferS))
{
Serial.print(" valorNum=");
Serial.println(bufferS);
nums=atoi(bufferS);
}
VIDEO DEL
FUNCIONAMIENTO
PROGRAMA Y
LIBRERÍAS
Saludos.
Juan Galaz
Bibliografía:
https://how2electronics.com/interfacing-sx1278-lora-module-with-arduino/
https://www.electroschematics.com/rf-radio-frequency/
https://electronoobs.com/eng_arduino_tut97.php
https://cdn-shop.adafruit.com/product-files/3179/sx1276_77_78_79.pdf
https://www.semtech.com/products/wireless-rf/lora-connect/sx1278
https://oa.upm.es/44890/1/TFM_JOSE_DANIEL_RODRIGUEZ_MUNCA.pdf
https://www.2cigroup.com/es/conceptos-de-actualidad-lora-y-lorawan/
https://github.com/adafruit/Adafruit_AHTX0
https://github.com/Longan-Labs/GROVE-ATH-RESOURCES