Conectar la radio RFM69 HCW al ESP8266

Voy a documentar el proceso de conectar el módulo de radio RFM69 HCW a un microcontrolador ESP8266. La historia de fondo pueden leerla en este artículo anterior.

ESP8266-y-RFW69Al adquirir un RFM69, debes considerar las variantes que existen. En particular la variante HCW implica una alta potencia de transmisión (20dBm).

También debes considerar su frecuencia de trabajo: Para América corresponden los 915 Mhz. En Europa utilizan 434 Mhz.

Por último debes evaluar la compra del radio RFM69 solamente y lidiar luego con las soldaduras necesarias en tan pequeño circuito, o aprovechar los “Breakout Boards” como es el caso del producto de Sparkfun, que expanden el módulo RFM69 en una plaqueta un poquito más grande pero de muy fácil manejo.

Soldando e interconectando el RFM69 al ESP8266

RFM69-HCW-SoldadoEl RFM69 tiene los terminales para soldar los conectores o cables más comunes (los que seguramente necesitarás en tus proyectos) de un sólo lado.

Estos terminales incluyen la conectividad necesaria para la transmisión de datos SPI y  la alimentación del módulo RFM69, que funciona con 3.3V.

Atención: El RFM69 NO tolera niveles de 5v de alimentación o señales lógicas, por lo que debes considerar un circuito adaptador de niveles de voltaje si quieres utilizar el RFM69 con un Arduino de 5V.

Del otro lado tiene una serie de terminales que prácticamente no se utilizan -salvo algún proyecto esotérico, que desconozco- así como los terminales para la antena.

La antena puede ser monopolo (un simple alambre o cable) e ir soldado al terminal marcado como “A” o puede ser DIPOLO, donde utilizas el terminal “A” para la Antena y el “GND” a su costado para la “tierra” o “masa”. Encontrarás información en abundancia en la red con respecto a este tema.

La interconexión pin a pin del RFM69 al ESP8266 fue exitosa de acuerdo a la siguiente tabla, que no resultó evidente a primera vista para mi, debido a que el ESP8266 de Elecrow que utilizo tiene marcadas las terminales de MISO, MOSI, CLK, etc. en el OTRO peine de conectores.

RFM69      ESP8266     PIN PLAQUETA
SCK   <--> GPIO14 <--> D5
MISO  <--> GPIO12 <--> D6
MOSI  <--> GPIO13 <--> D7
NSS   <--> GPIO15 <--> D8
DIO00 <--> GPIO04 <--> D2
GND   <--> GND    <--> GND
3.3V  <--> 3.3V   <--> 3.3V

Software y configuraciones para conectar el RFM69 al ESP8266

Necesitas descargar e instalar como .zip la librería de LowPowerLab en github.

Una vez instalada, para que compile sin dar errores, debes buscar en tu computadora donde se almacenan las librerías instaladas y entrar a la carpeta del RFM69.

Allí debes borrar el RFM69_OTA.cpp y RFM69_OTA.h ya que este código llama a otras librerías y requiere características técnicas que no son compatibles con nuestro ESP8266.

A continuación debes editar el archivo RFM69.cpp.  Busca el texto:

SPI.setClockDivider(SPI_CLOCK_DIV4);

y cámbialo a:

SPI.setClockDivider(SPI_CLOCK_DIV2);

Verás que ahí mismo hay una explicación donde el desarrollador de la librería argumenta que tuvo que bajar la velocidad del SPI  dividiendo el relój entre 4 en vez de 2, debido a que los procesadores Arduino tenían problemas de lentitud.

Ocurre que nuestro ESP8266 es bastante más rápido que los procesadores problemáticos y por lo tanto podemos devolver ese divisor a su valor de “2”.

En tu código Arduino, comienzas incluyendo estas librerías solamente:

#include <RFM69.h>
#include <SPI.h>

Y luego debes generar estas etiquetas de definición, auto-explicadas:

#define NETWORKID     200   //Identificador de RED igual en todos los radios
#define MYNODEID      2   //Nuestro ID
#define TONODEID      1   //ID del nodo al que enviamos datos
#define FREQUENCY     RF69_915MHZ //Europa es RF69_434MHZ
#define ENCRYPTKEY    "TOPSECRETPASSWRD" // Clave igual para cada radio
#define USEACK        true // Pedimos ACK de retorno para cada paquete
#define IS_RFM69HCW true // Si tu radio es RFM69HCW entonces va "true"
#define POWER_LEVEL 31 // Valor máximo de potencia
#define SPI_CS              15 //NSS o Cable Select al GPIO15
#define IRQ_PIN             4 // DIO0 conectado a GPIO4
#define IRQ_NUM             4 //IRQ igual al pin

Por último puedes crear el objeto “radio” para manipular el RFM69 en tu código:

RFM69 radio = RFM69(SPI_CS, IRQ_PIN, IS_RFM69HCW, IRQ_NUM); 

Y ya puedes entrar de lleno en la función de setup {} de tu programa Arduino, tal y como se muestra y funciona los tutoriales básicos de envío y recepción de paquetes del RFM69 con los procesadores Arduino convencionales.

Es de notar que en mi ejemplo de conectividad, quedan libres los pines etiquetados D3 y D4, que corresponden a GPIO0 y GPIO2 del ESP8266, donde puedes por ejemplo definir un bus i2c y conectar una pantalla LCD u OLED (como es mi caso, y veremos en futuros artículos).

Deja un comentario

Tu dirección de correo electrónico no será publicada.