ESP8266 WiFi Project – Arduino Mega + RGB LED + Blynk app
Project door:
Hannes Beem
Arduino Mega
In dit voorbeeld heb ik voor het gemak een Arduino Mega gebruikt omdat deze meerdere seriele poorten heeft.
Je kunt natuurlijk ook een Arduino UNO gebruiken bijvoorbeeld, maar dan is het noodzakelijk dat je de RX en de TX poorten even loskoppeld tijdens het flashen van de sketch naar de Arduino.
FTDI Programmer
De FTDI Programmer gebruiken we om het programma op de ESP-01 te flashen.
Om de FTDI Programmer te kunnen gebruiken met de Arduino IDE is een driver nodig.
Klik hier voor de driver download pagina.
ESP-01
De ESP-01 is een draadloze module gebaseerd op de ESP8266.
Denk eraan dat je nooit 5v op de ESP-01 zet! De ESP-01 raakt dan defect.
Condensatoren
De 470uF Condensator wordt gebruikt om de spanning te stabiliseren en kan foutmeldingen voorkomen. De 100 nF condensator moet zo kort mogelijk bij de ESP-01 zijn voor stabilisatie.
Voedingsspanning
Zelf gebruik ik een universele adapter die 1 ampere kan leveren bij 3 volt.
De ESP verbruikt continu 300mA, maar kan uitschieters hebben naar 500mA. Zorg ervoor dat je voeding altijd voldoende stroom kan leveren.
Knoppen
Drukknop 1 reset de ESP-01. Om de ESP-01 te kunnen flashen moet de GPIO0 Pin aan de min gekoppeld worden. Door drukknop 2 vast te blijven houden blijft de ESP in Flash modus.
Stabiliteit
De afbeelding voor het aansluiten geeft een breadboard weer, maar het is beter voor de stabiliteit dat de esp op een (experimenteer)printje gesoldeerd wordt. Op een breadboard kan het zo zijn dat de connecties niet altijd goed contact maken en de ESP-01 is gevoelig voor storingen door onderbrekingen in spanning.
Arduino IDE
Voor het flashen gebruik ik de Arduino IDE versie 1.6.5.
De ESP-01 moet nog wel geïnstalleerd worden als je de ESP8266 afgeleide boards nog niet kunt kiezen.
ESP-01 en Arduino Sketches
De ESP-01 zal nadat de sketch ge-upload (knop 2 vasthouden) is en je de ESP-01 ge-herstart hebt (Knop 1) contact met je router maken en om een IP-adres vragen.
De DHCP server van je router zal de ESP-01 een IP-adres toekennen.
Dit IP-adres is te zien in de Seriële monitor van de Arduino IDE.
Dit IP-adres typ je in een browser zoals je zou doen wanneer je een webpagina zou bezoeken. Het poortnummer moet er in de volgende vorm -> :8888 achter komen te staan.
Kopieer en plak de sketch in de Arduino IDE voor de ESP-01:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
#define BLYNK_PRINT Serial // Voor eventuele troubleshooting van de communicatie met Blynk #include <ESP8266WiFi.h> // Voeg de ESP8266 Wifi bibliotheek toe #include <BlynkSimpleEsp8266.h> // Voeg de Blynk bibliotheek toe voor de ESP8266 // De authentication token vind je in de Blynk app bij de project instellingen (het logo van het moertje) char auth[] = "********************************"; // Zet de Authenticion token van Blynk op de plaats van de sterretjes int valueR; // De waarde die de lichtsterkte van Rood bepaald wordt opgeslagen in een Integer variabele int valueG; // De waarde die de lichtsterkte van Groen bepaald wordt opgeslagen in een Integer variabele int valueB; // De waarde die de lichtsterkte van Blauw bepaald wordt opgeslagen in een Integer variabele char buffer[10]; // buffer is een variabele waarin 10 characters opgeslagen worden. Deze worden verzonden in 1 reeks naar de Arduino Mega void setup() { Serial.begin(115200); // Zet Seriele communicatie op naar de Seriele monitor voor troubleshooting doeleinden Blynk.begin(auth, "SSID Naam hier", "Wachtwoord hier"); // Plaats hier je SSID naam en wachtwoord } BLYNK_WRITE(V6) // Geef de Virtuele Pin op waar de ZeRGBa Widget in Blynk gebruik van maakt { valueR = param[0].asInt(); // Sla de waarden (lichtsterkte) die gegenereerd worden door de ZeRGBa Widget voor Rood op in de variabele valueG = param[1].asInt(); // Sla de waarden (lichtsterkte) die gegenereerd worden door de ZeRGBa Widget voor Groen op in de variabele valueB = param[2].asInt(); // Sla de waarden (lichtsterkte) die gegenereerd worden door de ZeRGBa Widget voor Blauw op in de variabele } void loop() { Blynk.run(); // Start Blynk // Print de waarden naar de Seriele monitor voor Troubleshooting doeleinden (verwijder de forward slashes als je er gebruik van wilt maken) // Serial.print("R ");Serial.print(valueR); Serial.print(" | "); Serial.print("G ");Serial.print(valueG); Serial.print(" | "); Serial.print("B ");Serial.println(valueB); sprintf(buffer,"%03d%03d%03d",valueR,valueG,valueB); // Zet de waarden uit de Integer variablen om naar characters in een string die verzonden kan worden naar de Arduino Mega Serial.write(buffer); // Verzend de string in zijn geheel delay(100); // Wacht 100 milli seconden met het verzenden van de volgende string } |
Koppel de FTDI programmer via USB en stel onder Tools de Port in.
Druk op de Upload knop en houdt knop 2 vast (druk voor de zekerheid ook een keer kort op knop 1 voor een reset) totdat de Arduino IDE “Done saving” aangeeft.
Kopieer en plak de sketch in de Arduino IDE voor de Arduino MEGA:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
String readString, R, G, B; // Variabelen waar de Integers in opgeslagen worden als string #define Rled 7 // Rood van de RGB LED aan pin D7 op de Arduino Mega #define Gled 6 // Groen van de RGB LED aan pin D6 op de Arduino Mega #define Bled 5 // Blauw van de RGB LED aan pin D5 op de Arduino Mega int R1; // Integer waar de waarde van de lichtsterkte voor ROOD in opgeslagen wordt int G2; // Integer waar de waarde van de lichtsterkte voor GROEN in opgeslagen wordt int B3; // Integer waar de waarde van de lichtsterkte voor BLAUW in opgeslagen wordt void setup() { Serial.begin(115200); // Start de Seriele communicatie voor eventuele troubleshooting Serial1.begin(115200); // Start de Seriele communicatie die de waarden ontvangt van de ESP-01 pinMode(Rled, OUTPUT); // Geef pin D7 voor Rood op als een uitgang pinMode(Gled, OUTPUT); // Geef pin D6 voor Groen op als een uitgang pinMode(Bled, OUTPUT); // Geef pin D5 voor Blauw op als een uitgang } void loop() { while (Serial1.available()) // Zolang er data communicatie is op de Seriele poorten TX1 en RX1 doe het volgende: { delay(10); // Wacht 10 milliseconden if (Serial1.available() >0) // Als er data ontvangen wordt, doe dan: { char c = Serial1.read(); // Ontvang de Bytes readString += c; // Maak een String van de ontvangen Bytes } } if (readString.length() >0) // Als de lengte van de String groter is dan niets: { Serial.println(readString); // Print de String naar de Seriele monitor voor troubleshooting doeleinden R = readString.substring(0, 3); // Plaats de eerste vier characters uit de string in Variabele R G = readString.substring(3, 6); // Plaats de tweede vier characters uit de string in Variabele G B = readString.substring(6, 9); // Plaats de laatste vier characters uit de string in Variabele B // De characters in de string moeten weer terug omgezet worden naar integers en opgeslagen worden in variabelen char carray1[6]; R.toCharArray(carray1, sizeof(carray1)); R1 = atoi(carray1); // De daadwerkelijke omzetting van de characters naar een Integer (opgeslagen in variabele R1) char carray2[6]; G.toCharArray(carray2, sizeof(carray2)); G2 = atoi(carray2); // De daadwerkelijke omzetting van de characters naar een Integer (opgeslagen in variabele G2) char carray3[6]; B.toCharArray(carray3, sizeof(carray3)); B3 = atoi(carray3); // De daadwerkelijke omzetting van de characters naar een Integer (opgeslagen in variabele B3) readString=""; // Beeindig het ontvangen van characters in een string } Serial.print("R "); Serial.print(R1); Serial.print(" | "); // Print de ontvangen waarde van Rood naar de Seriele monitor Serial.print("G "); Serial.print(G2); Serial.print(" | "); // Print de ontvangen waarde van Groen naar de Seriele monitor Serial.print("B "); Serial.println(B3); // Print de ontvangen waarde van Blauw naar de Seriele monitor analogWrite(Rled, R1); // Geef de ontvangen waarde van Rood door aan de LED analogWrite(Gled, G2); // Geef de ontvangen waarde van Groen door aan de LED analogWrite(Bled, B3); // Geef de ontvangen waarde van Blauw door aan de LED } |
Koppel de Arduino Mega aan de PC.
Stel de Arduino IDE in op het gebruik van een Arduino Mega.
Kies de juiste poort.
Druk op de Upload knop
Blynk
Blynk is een app die je kunt downloaden voor je Android of iOS apparaat, met deze Blynk app gaan we de RGB LED aansturen.
Om toegang te krijgen tot je Blynk project heb een Authentication Token nodig die de Blynk app voor je aanmaakt wanneer je een nieuw project genereert in de app of wanneer je op de Refresh knop drukt in de app.
Deze code moet terug te vinden zijn op de juiste plaats in de sketch anders zal de app niet samen kunnen werken met je ESP-01.
Open de Seriële monitor en kijk of de ESP-01 contact maakt met de server van Blynk.
De waarden die RGB LED nodig heeft om een kleur te maken zijn in de Blynk app te genereren met de Widget “ZeRGBa”.
Deze Widget stel je in met de Virtuele pin, in dit geval Virtuele pin 6.
Druk op de Play knop in Blynk en speel met de ZeRGBa Widget.