En un proyecto anterior, te mostramos cómo publicar en Twitter desde Arduino. En este nuevo tutorial aprenderás a enviar mensajes de texto desde Arduino y ESP8266 cuando un sensor infrarrojo detecte un movimiento.
Para este proyecto también vamos a hacer uso de la plataforma IFTTT, una plataforma web gratuita que conecta dispositivos con servicios como Gmail, Twitter, Instagram, Dropbox, Fitbit, Amazon Alexa y muchos más.
Mediante IFTTT configuraremos un applet que servirá de disparador para ejecutar nuestro evento el cual es notificar vía SMS cada vez que un sensor infrarrojo envíe datos a nuestra placa Arduino.
Proyecto envío de mensajes de texto desde Arduino
Para este proyecto, conectaremos un sensor de movimiento a una placa Arduino UNO y luego transferiremos la señal digital a un módulo ESP8266.
El sensor infrearrojo, también conocido como sensor de proximidad, es un sensor digital que emite un pulso ALTO cuando detecta movimiento.
El módulo ESP8266 está configurado para enviar una solicitud GET a IFTTT cuando la señal es ALTA. La solicitud GET activa el applet, que luego envía un SMS al dispositivo que vamos a configurar.
El montaje físico de este proyecto lo puedes observar en la siguiente imagen:

Configuración del servicio IFTTT
Lo primero es ir al sitio web de IFTTT y crear una cuenta nueva.
Una vez iniciado sesión, ve a la barra de herramientas en la parte superior derecha y selecciona la opción Crear.

Ahora debemos establecer una condición haciendo clic en «+ this».

Luego selecciona «webhooks».

Dentro de la opción webhooks, selecciona recibir una solicitud web. Luego selecciona ESP_MotionSMS y luego haz click en create trigger.

Ahora se debe configurar la acción, para esto haz click en «+ that».

Desafortunadamente, IFTTT ha descontinuado el soporte para mensajes de textousando webhooks, y la única forma de acceder a dicha función es instalar la aplicación IFTTT en un dispositivo Android.

Finalmente, escribe el contenido del SMS.
Hay algunas variables útiles que puede usar para redactar su mensaje:
EventName
que contiene el nombre del evento.
OccurredAt
que muestra la fecha y hora en que se activó el evento.
Value
que puede incluir cualquier número que desee enviar al servidor IFTTT.

Comprueba que haz introducido los datos correctos y da click al botón finalizar.

El applet ya está listo.
Ahora, para habilitar su dispositivo Android para recibir notificaciones por SMS, busque IFTTT en Google PlayStore e instálelo.

Después de la instalación, inicie sesión con sus credenciales de IFTTT para asociar tu cuenta.
Adquisicion de la llave
Para activar el Applet, es necesaria la clave con el nombre del evento en nuestra solicitud HTTP.
Para obtener su clave IFTTT única, ve a la página de inicio y busca webhooks en la barra de búsqueda superior izquierda.

Ahora, en la página de webhooks, haz click en el vínculo Documentación, en la esquina superior derecha de la pantalla.
Esta opción muestra su clave personal y la solicitud web para su evento.
Esta clave es única para cada cuenta IFTTT.

Código para Envío de mensajes de texto desde Arduino
#include "SerialTransfer.h"
SerialTransfer myTransfer;
int status;
void setup()
{
Serial.begin(115200);
myTransfer.begin(Serial);
pinMode(5, INPUT);
}
void loop()
{
status = digitalRead(D5);
myTransfer.txObj(status, sizeof(status));
myTransfer.sendData(sizeof(status));
delay(100);
}
Código para el módulo ESP8266
#include <ESP8266WiFi.h>
#include "SerialTransfer.h"
SerialTransfer myTransfer;
const char* ssid = "Wifi Name";
const char* password = "WiFi Password";
const char* resource = "https://maker.ifttt.com/trigger/YOUR EVENT NAME HERE/with/key/YOUR KEY HERE";
const char* server = "maker.ifttt.com";
void setup() {
Serial.begin(115200);
pinMode(D5, INPUT);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
myTransfer.begin(Serial);
}
void loop()
{
if(myTransfer.available())
{
int status;
myTransfer.rxObj(myFloat, sizeof(myFloat));
if (status==1)
{
WiFiClient client;
client.print(String("GET ") + resource +
" HTTP/1.1\r\n" +
"Host: " + server + "\r\n" +
"Connection: close\r\n\r\n");
int timeout = 5 * 10; // 5 seconds
while(!!!client.available() && (timeout-- > 0))
{
delay(100);
}
while(client.available())
{
Serial.write(client.read());
}
client.stop();
delay(10000);
}
}
}
Código para NodeMCU
#include <ESP8266WiFi.h>
const char* ssid = "Wifi Name";
const char* password = "WiFI";
const char* resource = "https://maker.ifttt.com/trigger/YOUR EVENT NAME HERE/with/key/YOUR KEY HERE";
const char* server = "maker.ifttt.com";
int status;
void setup() {
Serial.begin(115200);
pinMode(D5, INPUT);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void loop()
{
status = digitalRead(D5);
delay(500);
Serial.println(status);
if (status==1)
{
WiFiClient client;
client.print(String("GET ") + resource +
" HTTP/1.1\r\n" +
"Host: " + server + "\r\n" +
"Connection: close\r\n\r\n");
int timeout = 5 * 10; // 5 seconds
while(!!!client.available() && (timeout-- > 0))
{
delay(100);
}
while(client.available())
{
Serial.write(client.read());
}
client.stop();
delay(10000);
}
else
{
return;
}
}
Finalmente podrás recibír una notificación de la aplicación IFTTT y luego un mensaje de texto poco después luego de que el sensor detecte movimiento.
