Inhoudsopgave:

Op afstand bediende timer met NodeMCU - Ajarnpa
Op afstand bediende timer met NodeMCU - Ajarnpa

Video: Op afstand bediende timer met NodeMCU - Ajarnpa

Video: Op afstand bediende timer met NodeMCU - Ajarnpa
Video: Иван Алексеевич Бунин ''Натали''. Аудиокнига. #LookAudioBook 2024, November
Anonim
Op afstand bediende timer met NodeMCU
Op afstand bediende timer met NodeMCU

Hier gaan we een timer maken met behulp van een NodeMCU en Adafruit. We gaan onze timer weergeven met een LED-strip en we kunnen hem bedienen met onze telefoon of computer!

Ons doel:

Maak een timer met behulp van een LED-strip die we kunnen: starten, pauzeren en resetten met onze telefoon of computer.

Benodigdheden

Hardware:

  • NodeMCU ESP 8266
  • Adafruit NeoPixel LED-strip

Bibliotheken:

  • Adafruit_NeoPixel.h
  • AdafruitIO_WiFi.h

Ander:

Een fatsoenlijke wifi-verbinding

Stap 1: Laten we een feed maken in Adafruit

Laten we een feed maken in Adafruit!
Laten we een feed maken in Adafruit!

Nu we alles hebben wat we nodig hebben, zijn we klaar om te gaan bouwen! Allereerst moeten we een feed aanmaken in Adafruit. Adafruit is een service die het voor ons heel gemakkelijk maakt om onze Arduino met internet te verbinden en handige op afstand bedienbare functies te maken. Meld je aan voor Adafruit als je dat nog niet hebt gedaan.

Laten we nu een nieuwe feed maken

We kunnen onze feed elke naam geven die we willen, ik noem het 'timer'.

Wat een feed doet, is alles wat we doen op te nemen in ons dashboard (dat we binnen een minuut zullen maken) en die gegevens naar ons bord stuurt, maar dat is iets waar we naar zullen kijken zodra we gegevens hebben die moeten worden verzonden.

Stap 2: Laten we nu een dashboard maken

Laten we nu een dashboard maken
Laten we nu een dashboard maken
Laten we nu een dashboard maken
Laten we nu een dashboard maken
Laten we nu een dashboard maken
Laten we nu een dashboard maken

Op dezelfde manier waarop we een feed hebben gemaakt, gaan we een nieuw dashboard maken. Ik noem mijn dashboard: 'timer interface' want dat is eigenlijk wat ons dashboard zal zijn: een interface met de knoppen om onze timer te bedienen.

Stap 3: Verkrijg onze sleutel

Ontvang onze sleutel
Ontvang onze sleutel

Als we onze Arduino met onze feed willen verbinden, hebben we onze Adafruit-sleutel nodig, dit is uw geheime wachtwoord dat ervoor zorgt dat alleen u verbinding kunt maken met uw feeds.

U kunt uw sleutel ophalen door op de gele AIO Key-knop rechtsboven in uw scherm in Adafruit te klikken.

Bewaar deze sleutel ergens, we hebben hem later nodig.

Deel uw sleutel niet! Anders kunnen mensen met slechte bedoelingen verbinding maken met uw feeds en apparaten.

Stap 4: Open het voorbeeld van het lezen van feeds

Open het feed-leesvoorbeeld
Open het feed-leesvoorbeeld

Laten we nu onze Arduino IDE openen en het coderingsproces starten. Allereerst moeten we de Adafruit IO Arduino-bibliotheek hebben geïnstalleerd.

Weet u niet hoe u bibliotheken moet installeren? dit is een geweldige gids van Adafruit: Arduino Libraries

Adafruit biedt veel kant-en-klare voorbeelden die we kunnen gebruiken en waarvan we kunnen leren. Een van deze voorbeelden is: adafruitio_21_feed_read. U kunt dit voorbeeld hier vinden: Bestand - Voorbeelden Adafruit IO Arduino adafruitio_21_feed_read

(excuseer mijn nederlandse interface in de afbeelding)

Stap 5: Laten we onze verbinding opzetten

Als je de schets adafruitio_21_feed_read met succes hebt geopend, zou je 2 tabbladen in je schets moeten zien: adafruitio_21_feed_read en config.h. Deze schets is gemaakt zodat we kunnen aansluiten op de feed die we in stap 1 hebben gemaakt.

Om verbinding te maken met deze feed moeten we een paar details invullen over onze wifi en ons Adafruit-account,

Laten we naar config.h reizen, hier vullen we de volgende details in:

Uw Adafruit-gebruikersnaam:

#define IO_USERNAME "joopert"

Uw Adafruit-sleutel:

#define IO_KEY "1234567890abcdefghijklmnop"

De naam van je wifi:

#define WIFI_SSID "MijnWifi"

En je wifi-wachtwoord:

#define WIFI_PASS "aVerySecretPassword"

Laten we nu teruggaan naar het tabblad adafruitio_21_feed_read en invullen:

Uw Adafruit-gebruikersnaam… nogmaals:

#define FEED_OWNER "joopert"

En tot slot je feednaam (van de feed die we in stap 1 hebben gemaakt):

AdafruitIO_Feed *sharedFeed = io.feed("timer", FEED_OWNER);

Stap 6: Controleer de verbinding met Adafruit IO

Controleer de verbinding met Adafruit IO
Controleer de verbinding met Adafruit IO

Om te controleren of de stappen die we eerder hebben genomen correct zijn uitgevoerd, gaan we onze schets uploaden naar de NodeMCU. Als u uw seriële monitor opent, zou deze er ongeveer zo uit moeten zien als de afbeelding hierboven. Eerst laat de seriële monitor zien dat hij verbinding probeert te maken met je wifi en met Adafruit. als dat compleet is, zou er moeten staan:

Adafruit IO aangesloten

Dit is geweldig nieuws! Nu kunnen we beginnen met het toevoegen van functionaliteit aan onze timer…

Stap 7: Laat LED

Laat LED
Laat LED
Laat LED
Laat LED

Nu is het tijd om onze LED-strip aan te zetten!

Verbind uw LED-strip met de D5-pincode (als u de D5 niet kunt vinden, verbind hem dan met een andere pincode en wijzig de LED_PIN in de code).

Definieer ledstrip

De volgende code voegt de NeoPixel-bibliotheek toe (lees hier meer over deze bibliotheek: https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-use) en zorgt ervoor dat onze Arduino weet waar onze LED-strip is en hoeveel lampen het heeft. Als je ledstrip andere specificaties heeft, verander dit dan in de code.

Voeg de volgende code BOVEN de void setup():

// stel NeoPixel-verbinding in#include #ifdef _AVR_ #include #endif

#define LED_PIN D5 // Waar is de ledstrip op aangesloten?

#define LED_COUNT 30 // Hoeveel pixels heeft het?

#define HELDERHEID 50 // NeoPixel-helderheid, 0 (min) tot 255 (max)

Adafruit_NeoPixel-strip (LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

Opstarten LED-strip

Nu zullen we onze LED-strip opstarten en de helderheid instellen (helderheid gaat van 0 min tot 255 max, maar ik raad 50 aan … 255 is ECHT helder).

Voeg de volgende code toe IN de void setup():

strip.begin(); // INITIALISEER NeoPixel-stripobject (VEREIST) strip.show (); // Schakel alle pixels zo snel mogelijk UIT strip.setBrightness (50); // Stel HELDERHEID in op ongeveer 1/5 (max = 255)

ledsAan(); // Roept de functie op om elke LED één voor één in te schakelen

Doe het licht aan

Misschien is het je al opgevallen dat we een functie aanroepen die nog niet bestaat, dat wordt ons volgende deel van het coderen. Als we onze lichten willen aandoen, moeten we een 'for-lus' maken die elke individuele LED één voor één aanzet (weet niet wat een for-lus is? Bekijk het hier: www.arduino.cc/reference/ nl/taal/structuur/controlestructuur/voor/).

Nu gaan we de functie maken: ledsOn();

Voeg de volgende code HIERONDER void handleMessage() toe:

void ledsOn () { for (int i = 0; i < strip.numPixels (); i ++) { // Voor elke pixel in strip … strip.setPixelColor (i, 0, 0, 255); // Stel de kleur van de pixel in op blue strip.show(); // Update strip om overeen te komen } }

Uploaden

Nu is het leuke gedeelte, laten we onze code uploaden naar de NodeMCU… Als alles correct werkt, zou je LED-strip nu volledig blauw moeten worden!

Verschijnen er geen pixels?: heb je de strip aan de juiste pincode gekoppeld? Of misschien is uw internetverbinding weggevallen.

Worden er maar een paar pixels niet weergegeven?: controleer of je het juiste aantal pixels hebt ingesteld!

Stap 8: Timing toevoegen aan de timer

Nu gaan we ervoor zorgen dat onze timer eigenlijk… nou ja… tijden, iets.

Er zijn verschillende manieren om timing te doen met Arduino, een daarvan is delay(), dit stopt de verwerking van ons bord voor een bepaalde periode. We gaan dit niet gebruiken omdat onze Arduino in principe vastloopt tijdens de vertraging, en we willen dat ons bord regelmatig wordt bijgewerkt. Dus we gaan Millis() gebruiken, dit is een elegantere manier om timing in Arduino te doen, met Millis() kunnen we nog steeds code tussen intervallen uitvoeren.

Als je geïnteresseerd bent in hoe dit werkt, kun je dit artikel lezen:

Laten we de code voor Millis() toevoegen:

Zet deze code BOVEN de void setup()

unsigned lange vorigeMillis = 0; // slaat de laatste keer op dat de LED-strip werd bijgewerktint interval = 1000; // interval van onze timer (milliseconden)

En laten we deze code IN de void loop():

unsigned long currentMillis = millis();// start TIMER RITHM ********************************************* ********** if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis;

// eind TIMER RITME ********************************************* **********

Wat we zojuist hebben gedaan, was een ritme maken voor onze LED-strip om LED's uit te schakelen, in de volgende stap zullen we de code toevoegen om precies dat te doen.

Stap 9: Aftellen

In deze stap: we zullen een functie maken die ervoor zorgt dat we elke seconde (of welk interval je ook hebt ingesteld) ÉÉN LED aan het einde van de strip uitschakelen totdat al onze LED's uit zijn.

We maken bovenaan een 'int' genaamd 'leds'. Dit zal onze timer later vertellen hoeveel leds hij nog moet uitschakelen.

Voeg de volgende code BOVEN de void setup():

int leds = LED_COUNT-1; // tels hoeveel pixels moeten worden verlicht

Laten we nu de functie 'timer();' toevoegen, hierdoor gaat elke seconde een lampje uit

Voeg de volgende code toe ONDER de lege ledsOn():

void timer () { strip.setPixelColor (leds, 0, 0, 0);

if (leds > -1) { leds--; } anders { blinkie(); } }

We willen de gebruiker wat feedback geven dat de timer klaar is nadat alle lichten zijn doorgebrand. Met 'blinkie();' de LED's knipperen rood nadat de timer is afgelopen!

Voeg de volgende code BOVEN de void setup():

int blinkStatus = 1; // vertelt de blinkie(); functie of het licht aan of uit moet zijn

Voeg de volgende code toe ONDER de void timer():

void blinkie() { if (blinkStatus == 1) {

knipperstatus = 0; strip.clear(); } else { blinkStatus = 1; for (int i = 0; i <strip.numPixels(); i++) {// Voor elke pixel in strip… strip.setPixelColor(i, 255, 0, 0); // Stel de kleur van de pixel in (in RAM) strip.show(); // Update strip zodat deze overeenkomt met } } } }

Ten slotte moeten we de functie aanroepen in onze void loop();, Weet je nog het TIMER RITHM dat we in stap 8 hebben toegevoegd? In dit if-statement noemen we de functie timer();.

TIMER RITHM zou er nu als volgt uit moeten zien:

// start TIMER RITHM ********************************************* *******

if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; tijdopnemer(); strip.show();} // einde TIMER RITHM ************************************ ****************

Upload nu deze code!

Op dit moment zou uw LED-strip elke seconde 1 LED moeten uitschakelen en rood knipperen als het klaar is …

Laten we deze motherlover nu op afstand bestuurbaar maken!

Stap 10: Maak het op afstand bestuurbaar: deel I

Maak het op afstand bestuurbaar: deel I
Maak het op afstand bestuurbaar: deel I
Maak het op afstand bestuurbaar: deel I
Maak het op afstand bestuurbaar: deel I

We hebben onze timer, dat is allemaal prima, maar ik heb je beloofd dat je hem met je telefoon zou kunnen bedienen, toch? Laten we de laatste fase van ons project ingaan: onze timer op afstand bedienen.

Staat je Adafruit-tabblad nog steeds open? Laten we teruggaan naar io.adafruit.com en laten we naar ons timerinterface-dashboard gaan en een nieuw blok maken: TOGGLE

  1. Verbind de schakelaar met de TIMER-feed
  2. Stel de AAN-waarde in op: 1
  3. Stel de UIT-waarde in op: 0

De reden hiervoor is dat Adafruit geen tekstgegevens naar onze NodeMCU stuurt, maar alleen cijfers.

Je kunt de Toggle ook een naam geven als je wilt, misschien: 'Aan/Uit schakelaar'

Laten we nu teruggaan naar de Arduino IDE

Laten we onze code nogmaals UPLOADEN om er zeker van te zijn dat onze code up-to-date is.

OPEN DE SERILE MONITOR zodra het uploaden klaar is en DRUK een paar keer op DE SCHAKELAAR op ons Adafruit-dashboard. We zouden nu zoiets als dit moeten zien opduiken in onze seriële monitor:

ontvangen <- 0ontvangen <- 1 ontvangen <- 0 ontvangen <- 1 ontvangen <- 0

Dit betekent dat we controles daadwerkelijk naar onze NodeMCU kunnen sturen!

Als u deze berichten niet ontvangt, controleer dan of uw Adafruit-gegevens in uw config.h nog steeds correct zijn.

Stap 11: Maak het op afstand bestuurbaar: deel II

Nu rest er alleen nog iets te doen met onze ontvangen controles.

Om dat te doen, moeten we ons TIMER RYTHM if-statement in de void loop(); een klein beetje.

We gaan onze NodeMCU vertellen dat hij de timer pas moet starten als we '1' (wat betekent: AAN) van Adafruit hebben ontvangen.

Laten we eerst de gegevens verzamelen die Adafruit ons stuurt

Voeg de volgende code BOVEN de void setup():

int adaData; // verzamelt de gegevens die AdaFruit ons stuurt

Laten we die gegevens nu eens gaan verzamelen

Voeg de volgende code toe BINNEN de void handleMessage():

adaData = data->toInt();

Laten we onze void loop();

TIMER RITHM zou er nu als volgt uit moeten zien:

// start TIMER RITHM ********************************************* *********if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; if (adaData == 0) { Serial.println ("ik ben niet actief"); } else if (adaData == 1) { timer(); } strip.show(); } // eind TIMER RITME ********************************************* ***********

UPLOADEN uw code…

Nu zou je de timer aan en uit moeten kunnen zetten met de schakelaar in Adafruit!

Stap 12: Speel rond! We zijn klaar… of zijn we dat?

Op dit moment zou je een volledig functionerende externe timer moeten hebben! Als dat het voor jou is, bedankt voor je komst met dit project!

Als je wat langer wilt doorgaan, voegen we in de volgende paar stappen een RESET-knop toe voor onze timer!

Stap 13: EXTRA: Tijdelijke knop maken

EXTRA: Tijdelijke knop maken
EXTRA: Tijdelijke knop maken

Laten we terugkeren naar ons dashboard. Nu willen we weer EEN NIEUW BLOK MAKEN.

  1. Een tijdelijke knop maken
  2. Sluit hem aan op de 'timer' feed
  3. Stel de perswaarde in op: 2
  4. VERWIJDER de vrijgavewaarde
  5. Geef het een mooi kleurtje!

Handig is dat de momentknop al 'Reset' heet!

Nadat je dit blok hebt gemaakt, test je het uit, de knop werkt als je het volgende ontvangt:

ontvangen <- 2

In uw seriële monitor.

Als je dit bericht niet ziet, probeer dan de schets opnieuw te uploaden

Stap 14: EXTRA: voeg de resetfunctie toe

Om de resetknop iets te laten doen, moeten we een functie toevoegen die alle LED's terugzet naar de oorspronkelijke staat.

Voeg de volgende code toe ONDER de void blinkie():

void rerun() { leds = LED_COUNT; ledsAan(); }

Nu rest alleen nog het aanroepen van onze functie, daarvoor moeten we TIMER RYTHM nog een laatste keer veranderen

TIMER RITHM zou er nu als volgt uit moeten zien:

// start TIMER RITHM ********************************************* *********if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis if (adaData == 0) { Serial.println ("ik ben niet actief"); } else if (adaData == 1) { timer(); } else if (adaData == 2) { rerun(); } strip.show(); } // eind TIMER RITME ********************************************* ***********

UPLOADEN uw code…

Nu zou je de timer ook moeten kunnen resetten door op de knop te drukken!

Aanbevolen: