ESP32 LoRa for dummys - Walkie Tappie (Wireless Morse Code)
Walkie Tappie es un proyecto original de Alex Chang (2020) que permite crear un walkie talkie que trabaja con código morse usando placas ESP32 LoRa y la interface RH (Radio Head).
Limitaciones
Según la documentación de la interface RH_RF95.h (https://github.com/PaulStoffregen/RadioHead/blob/master/RH_RF95.h)la longitud máxima del mensaje es de 251 octetos uint8_t, pero el programa usa int 16 para almacenar las matrices (de esta manera se pueden obtener más de 255 ms de tiempo), lo que significa que se obtienen 124 números para enviar los mensajes. De los 124, la mitad se usa para comunicar el tiempo de inactividad y la otra mitad es el tiempo de mantener presionado el pulsador o llave Morse, es decir, se necesitan 2 números por pitido, por lo tanto, se pueden enviar un máximo de 62 pitidos por mensaje (La palabra estandar en Morse es "PARIS" que supodrían unos 28 números, lo que nos da unas dos palabras). En la práctica son unos 15s de transmisión y menos de 10 letras o caracteres.
Se realiza la transmisión tras 5s de espera sin manipular, emitiendo un pitido para indicar el envío.
La manipulación se monitoriza mediante el altavoz
No se utiliza la pantalla de la placa de desarrollo, ni tampoco se usa ningún indicador visual tipo LED.
El programa
- Crear una carpeta llamada Morse_code y en ella
- Descargar el código principal que llevará el nombre de "Morse code.txt" cambiando el nombre a Morse_code.ino es el programa principal o maestro (Main)
- Crear el fichero pitches.h que usa la función tone() de Arduino, y que no se menciona en el original pero que es necesario, cuyo contenido lo puede encontrar aqui y que es el siguiente (Recuerde que en la notación simplificada A equivale a la nota LA, el LA principal es NOTE_A4 440Hz):
/************************************************** Public Constants*************************************************/#define NOTE_B0 31#define NOTE_C1 33#define NOTE_CS1 35#define NOTE_D1 37#define NOTE_DS1 39#define NOTE_E1 41#define NOTE_F1 44#define NOTE_FS1 46#define NOTE_G1 49#define NOTE_GS1 52#define NOTE_A1 55#define NOTE_AS1 58#define NOTE_B1 62#define NOTE_C2 65#define NOTE_CS2 69#define NOTE_D2 73#define NOTE_DS2 78#define NOTE_E2 82#define NOTE_F2 87#define NOTE_FS2 93#define NOTE_G2 98#define NOTE_GS2 104#define NOTE_A2 110#define NOTE_AS2 117#define NOTE_B2 123#define NOTE_C3 131#define NOTE_CS3 139#define NOTE_D3 147#define NOTE_DS3 156#define NOTE_E3 165#define NOTE_F3 175#define NOTE_FS3 185#define NOTE_G3 196#define NOTE_GS3 208#define NOTE_A3 220#define NOTE_AS3 233#define NOTE_B3 247#define NOTE_C4 262#define NOTE_CS4 277#define NOTE_D4 294#define NOTE_DS4 311#define NOTE_E4 330#define NOTE_F4 349#define NOTE_FS4 370#define NOTE_G4 392#define NOTE_GS4 415#define NOTE_A4 440#define NOTE_AS4 466#define NOTE_B4 494#define NOTE_C5 523#define NOTE_CS5 554#define NOTE_D5 587#define NOTE_DS5 622#define NOTE_E5 659#define NOTE_F5 698#define NOTE_FS5 740#define NOTE_G5 784#define NOTE_GS5 831#define NOTE_A5 880#define NOTE_AS5 932#define NOTE_B5 988#define NOTE_C6 1047#define NOTE_CS6 1109#define NOTE_D6 1175#define NOTE_DS6 1245#define NOTE_E6 1319#define NOTE_F6 1397#define NOTE_FS6 1480#define NOTE_G6 1568#define NOTE_GS6 1661#define NOTE_A6 1760#define NOTE_AS6 1865#define NOTE_B6 1976#define NOTE_C7 2093#define NOTE_CS7 2217#define NOTE_D7 2349#define NOTE_DS7 2489#define NOTE_E7 2637#define NOTE_F7 2794#define NOTE_FS7 2960#define NOTE_G7 3136#define NOTE_GS7 3322#define NOTE_A7 3520#define NOTE_AS7 3729#define NOTE_B7 3951#define NOTE_C8 4186#define NOTE_CS8 4435#define NOTE_D8 4699#define NOTE_DS8 4978
- Descargar en la carpeta la librería de comunicaciones https://www.airspayce.com/mikem/arduino/RadioHead/
- Abrir el entorno de desarrollo Arduino IDE
- Abrir el código fuente Morse_code.ino en Arduino IDE
- Configurar la placa que vamos a usa, en nuestro caso no es la Adafruit Feather 32u4 RFM LoRa sino la LyLigo ESP32 LoRa 866 MHz (ESP PICO D-4 en Arduino IDE)
- Modificar los pines de la placa y de LoRa sabiendo que la definición para T3-V1.6.1 es la siguiente
- #define CONFIG_MOSI 27
- #define CONFIG_CLK 5
- #define CONFIG_NSS 18
- #define CONFIG_RST 23
- #define CONFIG_DIO0 26
- #define CONFIG_MISO 19
El proyecto original usa la placa de desarrollo Adafruit-Feather-32u4-RFM-LoRa-PCB que tiene la siguiente asignación de pines y el chip RFM69 para LoRa
Por su parte la placa de desarrollo que se va a utilizar es la Lilygo T3_V.1.6.1 monta para LoRa el chip SX1276, por lo que varían los pinout de la placa, de LoRa y la forma de invocar al drive RH, por todo ello hay que realizar las siguientes modificaciones al programa:
Añadir en los includes
#include <SPI.h>
Modificar los valores de las variables y añadir las nuevas
// LILYGO T3 V1.6.1
// https://lilygo.cc/products/lora3
#define RFM95_CS 18
#define RFM95_RST 23
#define RFM95_INT 26
#define RFM95_MOSI 27
#define RFM95_MISO 19
#define RFM95_CLK
const int buttonPin = 21; // Manipulador
const int tonepin = 22; // Altavoz
Incluir al principio del setup()
SPI.begin(RFM95_CLK, RFM95_MISO, RFM95_MOSI, RFM95_CS );
- Compilar, no debería dar errores (Si tiene dudas del proceso ESP32 LoRa for dummys - Inicio)
|
- Soldar las regletas de pines a la placa
- Instalar el firmware medainte un cable USB en la placa de desarrollo
Material adicional
- Para las pruebas
- Placa de desarrollo
- Cables Dupont Line
- Para pruebas y definitivo
- Placa de desarrollo LiLyGo ESP32 LoRa (Probado con T3_V1.6.1)
- Resistencia de 220 ohmios
- Altavoz como por ejemplo Minialtavoz ultradelgado con cable P2.0 Termina, altavoz de 8 Ohm, 8R, 0,5 W, diámetro de 20mm, 23mm, 28mm, 30mm, 36mm, 40mm, 50mm, 57mm
- Manipulador o llave mores como por ejemplo Radio Amateur magnética portátil, dispositivo de onda corta, CW, código Morse, QU-45255
- Conectores Jack de 3,5mm machos y hembras (PJ-341).
Las pruebas
La pareja de walkie Tappie funcionan correctamente. Su alcande es de ...(Se informará cuando se completen las pruebas de campo)
- Comprobación de que funciona correctamente la placa LiLygo (Pantalla, SD, WiFi y LoRa) para ello se puede usar , lo que nos permite comprobar los PINout de LoRa https://github.com/Xinyuan-LilyGO/TTGO-LoRa-Series/tree/master/LoRa . Se puede comprobar la emisión de LoRa sintonizando la frecuencia con un SDR (p.e. RTL-SDR & SDR++)
- Comprobación de la ejecución del programa (traza): para ello basta con descomentar
Serial.begin(9600);while (!Serial) { delay(1); }Serial.println("LoRa radio init failed");
y ver la salida en el Arduino IDE => Herramientas => Monitor Serie
Agradecimientos
- Alex Chang, autor del proyecto original
- Doug Skogman y Mike McCauley VK4AMM, que sin su ayuda no podría haber resuelto los problemas técnicos
Referencia
Comentarios
Publicar un comentario