Botón Remoto de Mensajería con Sigfox y Twilio: Arduino MKR Fox 1200
Componentes y suministros
| Componente | Cantidad |
|---|---|
| Arduino MKR Fox 1200 (con módem Sigfox integrado) | 1 |
| Botón grande (pulsador) | 1 |
| Batería LiPo o 2 pilas AA/AAA | 1 |
| Interruptor pulsador (normalmente cerrado) | 1 |
| Etiqueta thethings.io (opcional) | 1 |
| Máscara de Trump (para la broma original) | 1 |
Aplicaciones y servicios online
- Red Sigfox (backend.sigfox.com)
- Twilio SMS Messaging API
Sobre el proyecto
Introducción
Todos hemos oído hablar del botón que usaba Trump para pedir una Diet Coke. Pensamos: "¡Podemos hacer una versión mejor con la red Sigfox!". Solo necesitas un botón grande, una placa Arduino MKR Fox 1200 y una cuenta Twilio para enviar el SMS.
¿Qué es Sigfox? Sigfox ofrece una red global, simple y eficiente energéticamente para IoT. Disponible en 32 países, complementa redes de alta banda ancha transmitiendo pequeños paquetes de datos a larga distancia con muy bajo consumo. Soportado por cientos de partners hardware.
1. Requisitos de hardware
El pulsador se conecta entre el pin 7 y GND. En estado normal el contacto está cerrado; al pulsar se abre. La lógica puede invertirse en el código.
Las imágenes muestran el montaje: botón, placa, batería y carcasa.
2. Código Arduino
El código completo está en GitHub: github.com/aureleq/TrumpButton
Usamos la librería ArduinoLowPower para dormir profundamente. Una interrupción despierta la placa y envía el mensaje Sigfox:
const uint8_t SWITCH_PIN = 7;
const String payload = "COKE NOW!";
const uint8_t debug = false;
void setup() {
if (debug) { Serial.begin(9600); while (!Serial); }
if (!SigFox.begin()) { Serial.println("Error shield Sigfox"); return; }
SigFox.end(); // Modo sueño profundo
pinMode(SWITCH_PIN, INPUT_PULLUP);
LowPower.attachInterruptWakeup(SWITCH_PIN, buttonPressed, RISING);
// Contacto normalmente cerrado -> flanco ascendente al abrir
}
void loop() {
LowPower.sleep(); // Duermen hasta interrupción
Serial.println("¡Botón pulsado!");
delay(100);
sendString(payload);
}
void sendString(String str) {
SigFox.begin();
delay(100);
SigFox.status(); delay(1);
SigFox.beginPacket();
SigFox.print(str);
int ret = SigFox.endPacket();
if (ret > 0) Serial.println("Sin transmisión");
else Serial.println("Transmisión OK");
SigFox.end();
}
void buttonPressed() { } // ISR vacía, solo despierta
3. Configuración de Twilio
- Regístrate gratis en twilio.com
- Añade tu número en "Verified Caller IDs" (destinatario del SMS)
- Anota: Phone Number, Account SID, Auth Token
4. Configuración del Callback en Sigfox Backend
- Accede a backend.sigfox.com y registra tu placa si no lo has hecho: activate
- Selecciona el Device Type de tu Arduino (en categoría Information)
- Crea un Custom Callback:
- Type:
DATA UPLINK - Channel:
URL - URL pattern:
https://[AccountSID]:[AuthToken]@api.twilio.com/2010-04-01/Accounts/[AccountSID]/Messages.json - HTTP Method:
POST - Content-Type:
application/x-www-form-urlencoded - Body:
From=[TuNumeroTwilio]&To=[NumeroDestino]&Body=covfefe!
El mensaje "covfefe!" se enviará cada vez que se pulse el botón.
5. Validación
Pulsa firmemente el botón y espera a que el mayordomo te traiga la bebida. ¡Funciona!
Código fuente completo (Arduino)
/* Botón Sigfox + Twilio - por aureleq
* Envía mensaje Sigfox al pulsar botón (pin 7-GND)
* Usa interrupciones para modo bajo consumo.
* Para subir nuevo sketch: doble tap en reset (entra en bootloader)
*/
#include <SigFox.h>
#include <ArduinoLowPower.h>
const uint8_t SWITCH_PIN = 7;
const String payload = "COKE NOW!";
const uint8_t debug = false;
void setup() {
if (debug) { Serial.begin(9600); while (!Serial); }
if (!SigFox.begin()) { Serial.println("Shield error or not present!"); return; }
SigFox.end(); // Deep sleep
pinMode(SWITCH_PIN, INPUT_PULLUP);
LowPower.attachInterruptWakeup(SWITCH_PIN, buttonPressed, RISING);
}
void loop() {
LowPower.sleep();
Serial.println("Button pushed!");
delay(100);
sendString(payload);
}
void sendString(String str) {
SigFox.begin();
delay(100);
SigFox.status(); delay(1);
SigFox.beginPacket();
SigFox.print(str);
int ret = SigFox.endPacket();
if (ret > 0) Serial.println("No transmission");
else Serial.println("Transmission ok");
Serial.println(SigFox.status(SIGFOX));
Serial.println(SigFox.status(ATMEL));
SigFox.end();
}
void buttonPressed() { }
Enlace al repositorio
https://github.com/aureleq/TrumpButton
Proceso de manufactura
- El Botón: De Sujetador Ancestral a Innovación Moderna
- Control de Brillo LED con PWM mediante Pulsador en Arduino Mega
- Captura Gotas de Agua en Acción con Arduino Nano: Fotografía de Alta Velocidad DIY
- Giftduino: El Set de Regalo Arduino Definitivo para Aficionados y Educadores
- Crea un Botón de Teclado Personalizado y "Apuñalable" con Arduino: Guía Paso a Paso
- Mide la masa de la Tierra con Arduino: Guía paso a paso DIY
- Integración del Sensor de Pulso MAX30100 con Arduino: Guía Paso a Paso
- Construye la App Fridgeye con una Pantalla Nextion: Guía Paso a Paso
- Guía Paso a Paso: Conectar Sensor de Humedad de Suelo YL-39/YL-69 a Arduino UNO
- Health Band: Asistente Inteligente Vestible para Personas Mayores
- Sigfox lanza red de área privada, mejora geolocalización y expande soluciones IoT