Créez un Bouton d'Envoi de SMS à Distance avec Sigfox et Twilio
Composants et fournitures
| Composant | Quantité |
|---|---|
| Arduino MKR Fox 1200 | 1 |
Applications et services en ligne
- Sigfox (réseau IoT bas débit)
- Twilio API SMS
À propos du projet
Introduction
Vous avez entendu parler du bouton utilisé par Trump pour commander un Diet Coke ? Nous avons décidé d'en créer une version améliorée grâce au réseau Sigfox. Il suffit d'un gros bouton poussoir, d'une carte Arduino MKR Fox 1200 et d'un compte Twilio pour envoyer le SMS.
Qu'est-ce que Sigfox ?
Sigfox fournit un réseau mondial, simple et économe en énergie pour l'Internet des objets. Disponible dans 32 pays, il complète les réseaux à haut débit en offrant une transmission bidirectionnelle de petites quantités de données sur de longues distances, à faible coût et consommation.
1. Matériel nécessaire
- Arduino MKR Fox 1200
- Un gros bouton poussoir
- Batterie LiPo ou 2 piles AA/AAA
- Interrupteur poussoir
- Autocollant thethings.io (optionnel)
- Masque de Trump (pour le fun !)
L'interrupteur est connecté entre la broche 7 et GND. Au repos, le contact est fermé. L'appui ouvre le contact (logique inversable dans le code).
2. Code Arduino
Le code complet est disponible sur GitHub : https://github.com/aureleq/TrumpButton
On utilise la bibliothèque ArduinoLowPower pour mettre la carte en veille profonde. Une interruption réveille la carte à l'appui du bouton :
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("Erreur shield Sigfox !");
return;
}
Serial.println("Shield Sigfox détecté");
Serial.println("ID = " + SigFox.ID());
delay(100);
SigFox.end(); // Veille profonde
pinMode(SWITCH_PIN, INPUT_PULLUP);
LowPower.attachInterruptWakeup(SWITCH_PIN, buttonPressed, RISING);
}
void loop() {
LowPower.sleep(); // Dort jusqu'à interruption
Serial.println("Bouton appuyé !");
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("Échec transmission");
else Serial.println("Transmission OK");
SigFox.end();
}
void buttonPressed() { } // Gestionnaire d'interruption vide
3. Configuration Twilio
- Créez un compte gratuit sur Twilio.
- Ajoutez un numéro vérifié (destinataire du SMS).
- Notez votre Numéro Twilio, Account SID et Auth Token.
4. Configuration du callback Sigfox
Dans le backend Sigfox (backend.sigfox.com) :
- Sélectionnez le Device Type de votre Arduino.
- Créez un callback personnalisé :
| Paramètre | Valeur |
|---|---|
| Type | DATA UPLINK |
| Canal | URL |
| URL | https://[AccountSID]:[AuthToken]@api.twilio.com/2010-04-01/Accounts/[AccountSID]/Messages.json |
| Méthode HTTP | POST |
| Content-Type | application/x-www-form-urlencoded |
| Corps | From=[VotreNuméroTwilio]&To=[NuméroDestinataire]&Body=covfefe! |
Le message "covfefe!" sera envoyé à chaque appui.
5. Validation
Appuyez fermement sur le bouton et attendez que le majordome vous apporte une boisson !
Code source complet
/*
* @aureleq
* Envoie un message Sigfox à l'appui d'un bouton
* Bouton câblé entre GND et broche 7 (par défaut)
* Utilise les interruptions pour le mode basse consommation
* Double appui sur reset pour téléverser un nouveau sketch
*/
#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.debug(); // Commenter en production
Serial.println("Sigfox shield detected");
String ID = SigFox.ID();
Serial.println("ID = " + ID);
delay(100);
SigFox.end();
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() { }
GitHub : https://github.com/aureleq/TrumpButton
Processus de fabrication
- Le bouton : de la fixation antique à l'innovation moderne
- Sigfox lance réseau privé, améliore la géolocalisation et étend ses solutions IoT
- Contrôler la Luminosité de LEDs par PWM avec un Bouton Poussoir sur Arduino Mega
- Photographie Haute Vitesse : Capturez les Gouttes d'Eau avec Arduino Nano
- Giftduino : Boîte cadeau interactive Arduino pour makers et éducateurs
- Créer un bouton clavier personnalisé « frappable » avec Arduino : guide pas à pas
- Mesurer la masse de la Terre avec Arduino : Guide DIY étape par étape
- Intégrer le capteur de pouls MAX30100 avec Arduino : Guide complet
- Health Band : Bracelet intelligent fiable d'assistance pour personnes âgées