Bouw Een Externe Tekstknop Met Sigfox & Twilio Voor Remote Messaging
Onderdelen en benodigdheden
| Onderdeel | Aantal |
|---|---|
| Arduino MKR Fox 1200 | 1 |
Apps en online diensten
- Sigfox
- Twilio SMS Messaging API
Over dit project
Inleiding
We hebben allemaal gehoord over de knop die Trump gebruikte om een Diet Coke te bestellen, toch? (https://time.com/4758059/donald-trump-coke-nuclear-button/)
We dachten dat we een betere versie konden bouwen met het Sigfox-netwerk. Alles wat je nodig hebt is een grote knop, een Arduino MKRFox1200 board en een Twilio-account om de tekstbericht te sturen.
Wat is Sigfox?
Sigfox biedt een wereldwijd, simpel en energiezuinig netwerk voor het Internet of Things. Het Sigfox-netwerk is momenteel beschikbaar of wordt uitgevoerd in 32 landen. Het netwerk aanvult bestaande systemen met hoge bandbreedte door economische, laag-energetische, tweerichtings-transmissie van kleine hoeveelheden data over lange afstanden. Sigfox-technologie wordt ondersteund door honderden hardware- en oplossingspartners.
1. Hardware vereisten
- Arduino MKRFox1200
- Een grote knop
- LiPo-batterij of 2x AA/AAA batterijen
- Een drukknopschakelaar
- thethings.io sticker
- En natuurlijk een Trump-masker
We gebruiken een drukknopschakelaar verbonden met pinnen 7 en GND van de Arduino. In ruststand is de schakelaar gesloten. Bij indrukken opent de schakelaar. De schakelaarstaat kan eenvoudig omgekeerd worden in de Arduino-code.
2. Arduino-code
Je kunt de Arduino-code op GitHub ophalen: https://github.com/aureleq/TrumpButton
We gebruiken de low-power bibliotheek om het board in diepe slaap te zetten. Een interrupt wekt het board op om een Sigfox-bericht te sturen:
// Schakelaarpin koppelen en interrupt inschakelen op stijgende flank
pinMode(SWITCH_PIN, INPUT_PULLUP);
LowPower.attachInterruptWakeup(SWITCH_PIN, buttonPressed, RISING);
// Schakelaar is standaard gesloten, open bij indrukken
void loop() {
// Slaap tot een evenement herkend wordt
LowPower.sleep();
// Als we hier komen, is er een evenement ontvangen
Serial.println("Knop ingedrukt!");
delay(100);
sendString(payload);
}
3. Twilio
- Registreer gratis hier
- Voeg een nieuw nummer toe in "Verified Caller IDs" (telefoonnummer om notificatie te ontvangen)
- Noteer je gegenereerde Twilio Telefoonnummer, ACCOUNT SID en Auth TOKEN:
4. Sigfox callback configuratie
- Log in op je Sigfox backend-account. Als je je Arduino-board nog niet geregistreerd hebt, activeer het hier: https://backend.sigfox.com/activate/
- Selecteer het Device Type van je Arduino-apparaat. Link naar Device Type vind je onder de categorie Informatie.
Maak een nieuwe custom callback met deze parameters:
- Type:
DATA UPLINK - Channel:
URL - URL patroon:
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=[JouwTwilioTelefoonnummer]&To=[TelefoonNummer]&Body=covfefe!
De tekst covfefe! wordt elke keer verstuurd wanneer de knop ingedrukt wordt.
5. Validatie
Druk stevig op de knop en wacht tot de butler je een drankje brengt!
Code
Arduino broncode (Arduino)
/*
* @aureleq
* Beschrijving: Stuurt een Sigfox-bericht bij indrukken op een knop
* Knop moet bedraad zijn tussen GND en pin 7 (standaard)
* Interrupts worden gebruikt voor lage stroommodus.
* Omdat het board meestal in slaapmodus zit, is een board-reset nodig
* om een nieuwe sketch te uploaden (dubbel tikken op reset-knop)
*/
#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 == true) {
Serial.begin(9600);
while (!Serial) {};
}
if (!SigFox.begin()) {
Serial.println("Shield fout of niet aanwezig!");
return;
}
// Debug LED inschakelen en automatische diepe slaap uitschakelen
// Commentaar deze regel bij productie :)
// SigFox.debug();
Serial.println("Sigfox shield gedetecteerd");
String ID = SigFox.ID();
Serial.println("ID = " + ID);
delay(100);
// Module in diepste slaap zetten
SigFox.end();
// Schakelaarpin koppelen en interrupt inschakelen op stijgende spanning
pinMode(SWITCH_PIN, INPUT_PULLUP);
LowPower.attachInterruptWakeup(SWITCH_PIN, buttonPressed, RISING);
// Schakelaar is standaard gesloten, open bij indrukken
}
void loop() {
// Slaap tot een evenement herkend wordt
LowPower.sleep();
// Als we hier komen, is er een evenement ontvangen
Serial.println("Knop ingedrukt!");
delay(100);
sendString(payload);
}
void sendString(String str) {
// Module starten
SigFox.begin();
// Wacht minstens 30ms na eerste configuratie (100ms voor zekerheid)
delay(100);
// Wis alle pending interrupts
SigFox.status();
delay(1);
SigFox.beginPacket();
SigFox.print(str);
int ret = SigFox.endPacket(); // Stuur buffer naar SIGFOX-netwerk
if (ret > 0) {
Serial.println("Geen transmissie");
} else {
Serial.println("Transmissie OK");
}
Serial.println(SigFox.status(SIGFOX));
Serial.println(SigFox.status(ATMEL));
SigFox.end();
}
void buttonPressed() {
// Interrupt handler - leeg, want we waken op via LowPower.sleep()
}
GitHub
Productieproces
- De Knop: Van Oude Sluiting tot Moderne Innovatie
- LED helderheid regelen met PWM via drukknop op Arduino Mega
- Waterdruppels vastleggen met Arduino Nano – DIY High-Speed Fotografie
- Giftduino: De Ultieme Arduino Cadeau-set voor Hobbyisten en Docenten
- Maak een Aangepaste 'Punchable' Toetsenbordknop met Arduino: Stap-voor-Stap Handleiding
- De massa van de aarde meten met Arduino: een stapsgewijze DIY-gids
- MAX30100 hartslagsensor integreren met Arduino: Stapsgewijze handleiding
- De Fridgeye-app bouwen met een Nextion-display: stapsgewijze handleiding
- Stapsgewijze handleiding: YL-39/YL-69 bodemvochtigheidsensor aan Arduino UNO koppelen
- Health Band: slimme weerebare assistant voor senioren
- Sigfox lanceert Private Area Network, verbetert geolocatie en breidt IoT-oplossingen uit