Het internet der dingen heeft een enorm DIY-potentieel. Met voldoende knowhow en een paar goedkope componenten zou je een complex systeem van aangesloten apparaten kunnen bouwen.

Soms wil je echter iets simpels. Geen toeters of bellen, maar een knop die een enkele taak uitvoert. Je bent misschien al bekend met zoiets als je ooit een Amazon Dash-knop hebt gebruikt om alledaagse huishoudelijke artikelen opnieuw te bestellen.

Vandaag zullen we een Wi-Fi-compatibele knop maken met behulp van een NodeMCU en deze programmeren om IFTTT te gebruiken om alles goed te doen! Schriftelijke instructies na de video, als je dat liever hebt.

Wat je nodig hebt

Onderdelen van de Wi-Fi-knop nodig

Je zal nodig hebben:

  • 1 x NodeMCU (ESP8266) bord, beschikbaar voor $2-3 op AliExpress
  • 1 x drukknop
  • 1 x LED (optioneel)
  • 1 x 220 Ohm weerstand (optioneel)
  • Breadboard en aansluitdraden
  • Micro-USB voor programmeren
  • Computer waarop de Arduino IDE is geïnstalleerd

Afgezien van de NodeMCU, zou je de meeste van deze onderdelen in elke Arduino-starterkit moeten kunnen vinden. In deze zelfstudie wordt ervan uitgegaan dat u de optionele LED en weerstand gebruikt, maar deze zijn niet essentieel.

Stap 1: Het circuit instellen

De hardware-installatie is heel eenvoudig voor dit project. Stel je bord in volgens dit schema.

NodeMCU Wi-Fi-knop Fritzing-diagram

De paarse draad hecht pin D0 aan één kant van de knop. De groene draad verbindt de andere kant van de knop met de RST-pin. De blauwe draad loopt van pin D1 naar de weerstand en LED. Het negatieve been van de LED wordt bevestigd aan de GND-pin van de NodeMCU.

Wanneer het breadboard is ingesteld, ziet het er ongeveer zo uit:

NodeMCU Wifi-knop circuit instellen

Als je je afvraagt ​​​​hoe ik mijn LED naar de grondpin heb gekregen met alleen die kleine stukjes kabel, zou onze snelle breadboard-crashcursus moeten helpen om het op te lossen! Controleer uw instellingen en sluit uw NodeMCU via USB op de computer aan.

Stap 2: De IDE instellen

Voordat u aan de slag gaat met coderen, moet u enkele voorbereidingen treffen. Als je dat nog niet hebt gedaan, stel dan de Arduino IDE in om je NodeMCU-bord te herkennen. Je kunt het toevoegen aan je lijst met borden via Bestand > Voorkeuren.

arduino board manager URLS

U kunt een meer gedetailleerde uitleg van deze stap vinden in ons NodeMCU-introductieartikel.

Voor dit project zijn twee bibliotheken nodig. Navigeren naar Schets > Bibliotheek opnemen > Bibliotheken beheren. Zoeken ESP8266WIFI door Ivan Grokhotkov en installeer het. Deze bibliotheek is geschreven voor het maken van Wi-Fi-verbindingen met het NodeMCU-bord.

Arduino IDE Bibliotheek Manager

Volgende zoeken naar de IFTTTWebhook door John Romkey en installeer de nieuwste versie. Deze bibliotheek is ontworpen om het proces van het verzenden van webhooks naar IFTTT te vereenvoudigen.

Dat is alle voorbereiding die we nodig hebben, laten we coderen!

Hoe de code werkt

We gebruiken de ESP8266WIFI bibliotheek om een ​​Wi-Fi-verbinding tot stand te brengen. De IFTTTWebhooks bibliotheek doet een verzoek aan IFTTT — in dit geval om op Twitter te posten. Geef vervolgens het NodeMCU-bord de opdracht om te slapen wanneer het niet in gebruik is om energie te besparen.

Wanneer de knop wordt ingedrukt, wordt de D0 en RST pinnen. Hierdoor wordt het bord gereset en gebeurt het proces opnieuw.

De meeste code in deze tutorial is eenvoudig genoeg voor beginners. Dat gezegd hebbende, als je begint, zul je het een stuk gemakkelijker te begrijpen vinden na het volgen van onze Arduino-beginnersgids.

Deze tutorial doorloopt de code in stukjes om te helpen bij het begrijpen. Als u direct aan de slag wilt, kunt u de volledige code vinden op Pastebin. Houd er rekening mee dat u nog steeds uw Wi-Fi- en IFTTT-inloggegevens in deze code moet invullen om te kunnen werken!

Stap 3: Diepe slaap testen

Om te beginnen zullen we een eenvoudige test maken om te laten zien hoe diepe slaap werkt. Open een nieuwe schets in de Arduino IDE. Voer de volgende twee codeblokken in.

#include <IFTTTWebhook.h>#include <ESP8266WiFi.h>#define ledPin 5 #define wakePin 16#define ssid "YOUR_WIFI_SSID"#define password "YOUR_WIFI_PASSWORD"#define IFTTT_API_KEY "IFTTT_KEY_GOES_HERE"#define IFTTT_EVENT_NAME "IFTTT_EVENT_NAME_HERE"

Hier nemen we onze bibliotheken op, samen met het definiëren van een paar variabelen die we nodig hebben in onze schets. U zult merken dat de ledPin en wakePin hier anders zijn genummerd in vergelijking met het Fritzing-diagram hierboven. De NodeMCU heeft een andere pinout dan Arduino-boards. Dit is echter geen probleem, dankzij dit handige schema:

NodeMCU__v1.0_pinout

Maak nu een setup-functie:

void setup() {  Serial.begin(115200);  while(!Serial) {   }  Serial.println(" ");// print an empty line before and after Button Press  	  Serial.println("Button Pressed");  Serial.println(" ");// print an empty line    ESP.deepSleep(wakePin); }

Hier stellen we onze seriële poort in en gebruiken we een while-lus om te wachten tot deze begint. Aangezien deze code wordt geactiveerd na het indrukken van de reset-knop, printen we “Knop ingedrukt” naar de seriële monitor. Vervolgens vertellen we de NodeMCU om in diepe slaap te gaan totdat de knop die de verbindt, wakePin naar de RST pin wordt ingedrukt.

Tot slot, om te testen, voeg dit toe aan je lus() methode:

void loop(){  //if deep sleep is working, this code will never run.  Serial.println("This shouldn't get printed");}

Gewoonlijk voeren Arduino-schetsen de lusfunctie continu uit na de installatie. Omdat we het bord in de slaapstand zetten voordat de installatie eindigt, loopt de lus nooit.

Sla je schets op en upload deze naar het bord. Open de seriële monitor en je zou moeten zien: “Knop ingedrukt.” Elke keer dat de knop wordt geactiveerd, wordt het bord gereset en wordt het bericht opnieuw afgedrukt. Het werkt!

Knop ingedrukt seriële monitortest

Een opmerking over de seriële monitor

U hebt tijdens sommige van uw projecten misschien enkele onzinnige tekens in de seriële monitor opgemerkt. Dit komt meestal doordat de seriële monitor niet op dezelfde baudrate is ingesteld als de Serieel.begin(XXXX) tarief.

Veel handleidingen stellen voor om de seriële verbinding te starten met een baudrate van 115200 voor een project als dit. Ik heb veel combinaties geprobeerd, en ze hadden allemaal verschillende gradaties van gebrabbel voor en na seriële berichten. Volgens verschillende forumberichten kan dit te maken hebben met een defect bord of een probleem met de softwarecompatibiliteit. Omdat het het project niet al te erg beïnvloedt, kies ik ervoor om te doen alsof het niet gebeurt.

Als u problemen ondervindt met de seriële monitor, probeer dan verschillende baudrates en kijk welke het beste voor u werkt.

Stap 4: Verbinding maken met wifi

Maak nu een functie om verbinding te maken met uw wifi-netwerk.

void connectToWifi() {  Serial.print("Connecting to: SSID NAME"); //uncomment next line to show SSID name  //Serial.print(ssid);   WiFi.begin(ssid, password);    Serial.println(" ");// print an empty line  Serial.print("Attempting to connect: ");  //try to connect for 10 seconds  int i = 10;  while(WiFi.status() != WL_CONNECTED && i >=0) {    delay(1000);    Serial.print(i);    Serial.print(", ");    i--;  }  Serial.println(" ");// print an empty line  //print connection result  if(WiFi.status() == WL_CONNECTED){    Serial.print("Connected.");     Serial.println(" ");// print an empty line    Serial.print("NodeMCU ip address: ");     Serial.println(WiFi.localIP());  }  else {    Serial.println("Connection failed - check your credentials or connection");  }}

Deze methode probeert tien keer verbinding te maken met uw netwerk met een seconde ertussen. Succes of mislukking van verbindingsprints naar de seriële monitor.

Stap 5: De verbindingsmethode aanroepen

Op dit moment, de verbindenToWifi() wordt nooit gebeld. Voeg een oproep toe aan uw setup-functie tussen het bericht “Knop ingedrukt” en het bord in slaapstand brengen.

connectToWifi();

Als je je afvraagt ​​​​waar dit past, zou het er als volgt uit moeten zien:

Waar connectToWifi() past

Vervang bovenaan de schets de ssid en wachtwoord variabelen met uw Wi-Fi-inloggegevens. Sla je schets op en upload naar het bord.

Wanneer het bord nu opstart, zal het proberen verbinding te maken met uw Wi-Fi-netwerk, voordat het terugkeert naar de setup-functie. Laten we nu de IFTTT-integratie instellen.

Stap 6: IFTTT-integratie instellen

IFTTT maakt integratie met een breed scala aan webservices mogelijk. We hebben het gebruikt in onze Wi-Fi PC Tower LED-tutorial om een ​​waarschuwing te sturen wanneer er een nieuwe e-mail wordt ontvangen. Vandaag gebruiken we het om met één druk op de knop een tweet te versturen.

Navigeer naar de Mijn applets pagina en selecteer Nieuwe applet

Klik op +dit en maak verbinding met Webhooks. Selecteer “Ontvang een webverzoek” en geef uw evenement een naam. Hou het simpel! Noteer de naam van de gebeurtenis, u moet deze later aan uw NodeMCU-code toevoegen. Klik “Trigger maken”.

Webverzoek met IFTTT-webhooks

Selecteer nu +dat. Zoek naar de Twitter service en er verbinding mee maken — je moet het autoriseren om op je Twitter-account te posten. Selecteer “Plaats een tweet” en kies je bericht.

IFTTT - Tweet verzenden

In het volgende scherm wordt u gevraagd de applet te bekijken. Klik op voltooien. Dat is het!

Stap 7: IFTTT-referenties aan de code toevoegen

Terug in de Arduino IDE moet u uw IFTTT API-sleutel en gebeurtenisnaam toevoegen aan uw gedefinieerde variabelen. Om de API-sleutel te vinden, navigeert u naar Mijn applets en selecteer Webhooks onder de Diensten tabblad. Selecteer Documentatie om toegang te krijgen tot uw sleutel.

Kopieer de sleutel en de gebeurtenisnaam in uw code en vervang de tijdelijke namen die ervoor zijn ingesteld.

#define IFTTT_API_KEY "IFTTT_KEY_GOES_HERE"#define IFTTT_EVENT_NAME "IFTTT_EVENT_NAME_HERE"

Let op, de aanhalingstekens moeten blijven staan, alleen de tekst vervangen.

Tussen het bellen van de verbindenToWifi() en het bord naar de slaapstand sturen, maak een instantie van het IFTTTWebhook-bibliotheekobject. De LED geeft aan dat de taak is voltooid voordat de diepe slaap opnieuw begint.

//just connected to Wi-FiIFTTTWebhook hook(IFTTT_API_KEY, IFTTT_EVENT_NAME);hook.trigger();pinMode(ledPin, OUTPUT);digitalWrite(ledPin, HIGH);   delay(200);              digitalWrite(ledPin, LOW); //now sending board to sleep

Bellen trigger op de haak object vuurt de IFTTT-applet af en zou op uw Twitter-account moeten worden geplaatst. Sla je schets op en upload hem. U zou nu een volledig functionele tweetknop moeten hebben.

Werkende Wi-Fi-knop Gif

Als het niet lijkt te werken, controleer dan zorgvuldig uw code en inloggegevens op fouten. Als je echt vastloopt, haal dan de volledige code van hierboven en vergelijk deze met die van jou.

Gedaan! Hoe zou je het verder kunnen verbeteren?

Dit is een basisversie van een Wi-Fi-knop, maar er zijn veel manieren waarop deze kan worden verbeterd. Voor de eenvoud wordt hier de USB-aansluiting voor stroom gebruikt. Een batterij zou het volledig mobiel maken, en een behuizing met het circuit zou het perfecte 3D-printproject voor beginners zijn.

Ondanks het gebruik van diepe slaap, kan het zijn dat een batterij vrij snel leeg raakt. Er zijn veel Arduino-energiebesparende tips die helpen bij dit soort projecten. Hoewel moeilijker dan deze tutorial, als je je eigen stroombewuste Arduino helemaal opnieuw hebt gemaakt, kan een wifi-knop op batterijen maanden meegaan!

Dit project zou perfect zijn voor een afstandsbediening voor slimme thuistoepassingen. Er zijn al een aanzienlijk aantal domotica-applets beschikbaar op IFTTT. Als je eenmaal de basis onder de knie hebt, kun je bijna elke sensor of schakelaar gebruiken om praktisch elke service te activeren die je maar kunt bedenken.

Afbeelding tegoed: Vadmary / Depositphotos