Software
Para programar el ESP8266 emplearé Arduino IDE y la librería ESPiLight, que se puede instalar desde el gestor de librerías de Arduino IDE. Aunque la librería use el formato JSON, no será necesario usar ninguna librería JSON.
Hardware
![]() |
Vista frontal SRX882 |
![]() |
Vista trasera SRX882 |
Como sensor he usado uno comprado en Aliexpress por alrededor de 6€, incluyendo portes.
![]() |
Sensor de 6€ |
Las conexiones se indican a continuación:
D1 mini | SRX882 |
---|---|
3V3 | VCC |
G | GND |
D5 | DATA |
![]() |
D1 mini - SRX882 |
Identificación del sensor
En primer lugar, es necesario tener instalada la librería ESPiLight, que como ya he dicho, se instala fácilmente desde el gestor de librerías de Arduino IDE.
En los ejemplos de la librería hay uno, llamado Receive, que nos mostrará todo lo que recibe. Solo tenemos que modificar el valor de RECEIVER_PIN por el pin al que hemos conectado los datos del receptor, en mi caso ha sido D5.
Al ejecutar el sketch obtenemos la siguiente lectura por el puerto serie:
Al ampliar la imagen se puede ver que hay mucha basura, hemos de identificar los datos que sean coherentes con nuestro sensor. La siguiente linea es la que se corresponde con una emisión de nuestro sensor:
RF signal arrived [alecto_ws1700][11] (3){"id":11,"temperature":26.7,"humidity":70.0,"battery":1}
Sacamos dos datos importantes: el protocolo es el alecto_ws1700 y el identificador es el 11. El identificador varía cada vez que se reinicia el sensor, por lo menos en el que yo tengo.
Programación del ESP8266
Doy por hecho que ya se sabe programar un ESP8266 con Arduino IDE, si no fuera el caso se puede consultar mi articulo titulado 'Programar ESP8266 con Arduino IDE'.
Es necesario tener instaladas la librerías de Blynk, además de la de ESPiLight que ya tenemos instalada en el paso anterior.
El Sketch es el siguiente:
#define BLYNK_PRINT Serial #define RECEIVER_PIN D5 #define TRANSMITTER_PIN -1 #include <ESPiLight.h> #include <ESP8266WiFi.h> #include <BlynkSimpleEsp8266.h> const char auth[] = "tu_token_blynk"; const char* ssid = "tu_ssid"; const char* password = "tu_password"; ESPiLight rf(TRANSMITTER_PIN); String getValue(String id, String message) { String value = ""; int idIndex = message.indexOf('"' + id + '"' + ':'); if (idIndex != -1) { int valueIndex = idIndex + id.length() + 3; value = message.substring(valueIndex, message.indexOf(",", valueIndex)); } return value; } void rfCallback(const String &protocol, const String &message, int status, int repeats, const String &deviceID) { if (status == VALID && protocol.equals("alecto_ws1700")) { float t = getValue("temperature", message).toFloat(); Blynk.virtualWrite(V0, t); Serial.println("Temperature: " + String(t, 1) + " °C"); float h = getValue("humidity", message).toFloat(); Serial.println("Humidity: " + String(h, 1) + " %"); Blynk.virtualWrite(V1, h); } Serial.println("rfCallback ends"); } void setup() { Serial.begin(115200); Blynk.begin(auth, ssid, password); rf.setCallback(rfCallback); rf.initReceiver(RECEIVER_PIN); } void loop() { rf.loop(); Blynk.run(); }
El sketch hay que personalizarlo con el token de Blynk, así como con el identificador y password de la red Wifi.
Hay que notar que, para identificar el sensor, solo uso el protocolo . Si hay que leer los datos de varios sensores que usen el mismo protocolo habrá la dificultad de que el identificador va variando cada vez que reiniciemos el sensor, es decir, cada vez que le cambiemos las pilas.
Configuración de Blynk
No voy a extenderme sobre esto, porque no hay mucha complicación y ya trate sobre como configurar Blynk en otro artículo.
He usado Value Display para visualizar los valores de los pines virtuales V0 y V1 que es donde el sketch escribe los valores de temperatura y humedad respectivamente.
Resultado
El resultado es que desde cualquier lugar del mundo podemos ver en nuestro dispositivo móvil los valores de temperatura y humedad de nuestro sensor.
No hay comentarios:
Publicar un comentario