-
VOOR U BEGINT Wanneer u het IoT-WiFi-Board (hierna ook NanoESP- genoemd) voor het eerst aansluit, kan het gebeuren dat de computer de vereiste driver voor de USB-to-Serial-omzetter niet automatisch vindt. Als dit het geval is, dient u de driver van de pagina www.iot.fkainka.de/driver te downloaden en manueel te installeren. In de Arduino-software kunt u dan de port en als board Arduino Nano (processor: Atmega328) selecteren. Daarna moet de controller volledig gebruiksgereed zijn.
-
Bij moeilijkheden of problemen met het board of het leerpakket kunt u op elk moment op de website www.iot.fkainka.de hulp vinden. Op deze website vindt u bovendien een forum, nieuwe gebruikersprojecten en ook alle hier voorgestelde programma's in de meest recente versie. In het leerpakket bevindt zich een breadboard waarop u de NanoESP, kunt aansluiten, zoals getoond in de onderstaande afbeelding.
-
De pin-lay-out van het board Op het board zijn er veel verschillende elementen, zoals bv. de pins, waarvan enkele een bijzondere functie hebben of de LED's, wier functies niet altijd op het eerste zicht zichtbaar zijn. Opdat u het overzicht niet verliest, zijn de belangrijkste functies en omschrijvingen van de afzonderlijke elementen in de volgende afbeelding aangebracht. De belangrijkste pins en omschrijvingen van het board De WLAN-module wordt via zogenaamde AT-commando's gestuurd.
-
Geïntegreerde low-power-32-bit-CPU Communicatie via UART ELEMENTEN IN HET LEERPAKKET Hieronder vindt u een overzicht van de elementen die zich in het leerpakket bevinden.
-
voorbeeldprogramma's, hulp en andere informatie vindt u overigens op www.iot.fkainka.de Het makkelijkst is om het volledige zip-bestand te downloaden en de uitgepakte map in uw sketch-map te kopiëren. Dan kunt u uit het Arduino-oppervlak alle programma's makkelijk na elkaar openen. 1.1 | Algemene AT-bevelen Men krijgt de beste eerste indruk van het gebruik van AT-bevelen door ze gewoon uit te proberen. Daarom leert u in dit hoofdstuk enkele van de algemene bevelen kennen.
-
Terminal-instellingen CR en NL en een Baudrate van 19200 1.1.1 | Basisbevelen Enkele algemene bevelen van de module kunt u nu testen door het commando gewoon in te tikken en met [Enter] naar de module te zenden. Het is daarbij van belang om hoofdletters te gebruiken voor het bevel. U kunt uw eerste eigen bevel aanmaken door AT in de seriële monitor in te tikken en op [Enter] te drukken. Het opgeladen programma geeft het bevel opnieuw naar ESP-module door, dat opnieuw met AT en daarna OK antwoordt.
-
Hiermee is het mogelijk om de zogenaamde echo van de module te deactiveren. Dit betekent dat u niet wilt dat het verzonden commando wordt teruggestuurd, maar alleen het antwoord. Wanneer u bijvoorbeeld AT verzendt, komt niet eerst AT en dan OK, maar alleen OK terug. Voor uw eerste passen is het echter aangewezen om de echo met ATE1 opnieuw te activeren. Eerste verzoeken met de AT-bevelen 1.1.2 | WLAN-bevelen Met de volgende WLAN-commando's kunt u belangrijke WLAN-eigenschappen van de module wijzigen.
-
AT+CWMODE? Als returnwaarde komt in regel +CWMODE=2 gevolgd door OK. Wanneer u AT+CWMODE=? intikt, antwoordt de module met de mogelijke parameters van het bevel; hier namelijk 1-3. Bij CWMODE gaat het overigens om het bevel waarmee u de WLANmodule kunt vastleggen. Er zijn dus drie bedrijfsmodi die ik hieronder na elkaar vermeld: 1 AT+CWMODE=2 – de module als Access Point (AP-modus) In de leveringstoestand is de module een Access Point.
-
u nogmaals uw invoer, vooral de aanhalingstekens. Als ERROR toch verschijnt, controleert u of de CWMODE echt 2 is. Wanneer alles heeft gewerkt, kunt u zich met een WLAN-compatibel apparaat met het board verbinden. Alle met de module verbonden apparaten kunt u met IP- en MAC-adressen via het bevel AT+CWLIF laten weergeven. De module in stationsmodus. Het IP van de verbonden computer is gemarkeerd.
-
verbonden en heeft veel meer mogelijkheden. Vooraf kunt u echter met het bevel AT+CWLAP alle netwerken in uw bereik laten oplijsten en zo controleren, of uw netwerk zich in de ontvangstradius bevindt. Om een verbinding met uw router te kunnen aanmaken, hebt u het bevel AT+CWLAP nodig Deze bevat, net zoals het CWSAP-bevel, belangrijke parameters, namelijk de naam van het WLAN-netwerk (ook SSID genaamd) en het wachtwoord, beiden opnieuw in aanhalingstekens en door een komma gescheiden.
-
Het board maakt een verbinding met een tweede NanoESP aan. 3 AT+CWMODE=3 – de duale modus De derde mogelijke modus van de WLAN-instelling is de duale modus. Zoals de naam reeds laat vermoeden, laat dit u toe om de module zowel in de stations- als in de AP-modus te gebruiken. Dit betekent dat apparaten zowel een rechtstreekse WLAN-verbinding met de module kunnen aanmaken of de module via de router als tussenstation bereiken. Een handige modus, n bijlage en op de website bv.
-
1.2 | Automatische configuratie De algemene bevelen kunt u reeds manueel testen. In dit hoofdstuk moet nu de vraag worden beantwoord, hoe deze bevelen automatisch via de controller kunnen worden bediend. Bovendien leert u een bijkomend bevel kennen, waarmee u kunt testen of een pc in het netwerk of een server in het internet bereikbaar is. In dit voorbeeld wordt namelijk de Google-server aangepingt.
-
programma verder gaat. De wachttijd (time-out) wordt door esp8266.setTimeout gedefinieerd. Met findUntil() kan echter ook een tweede datareeks worden gedefinieerd waarbij de zoekfunctie uitstapt en false als returnwaarde levert. Dit gebruiken wij in de functie sendCom(): 001 //-------Controll ESP-------002 003 boolean sendCom(String command, char respond[]) 004 { 005 esp8266.println(command); 006 if (esp8266.
-
001 String sendCom(String command) 002 { 003 esp8266.println(command); 004 return esp8266.readString(); 005 } 2 Zoeken naar fouten Bij het ontwikkelen van programma's komt het tot fouten en complicaties. Opdat men überhaupt een kans heeft, zijn er twee debug-functies die via een parameter helemaal aan het begin van het programma geactiveerd of gedeactiveerd worden.
-
002 void serialDebug() { 003 while (true) 004 { 005 if (esp8266.available()) 006 Serial.write(esp8266.read()); 007 if (Serial.available()) 008 009 esp8266.write(Serial.read()); } 010 } 3 Configuratie Om de programma's over het algemeen overzichtelijker vorm te geven, werden de meeste instellingen eveneens in eigen functies ondergebracht, met vooreerst de functie espConfig, waarin de belangrijkste parameters voor het respectievelijke programma kunnen worden ondergebracht.
-
014 } 015 else 016 { 017 018 success &= false; } 019 020 success &= sendCom("AT+CIPMODE=0", "OK"); 021 success &= sendCom("AT+CIPMUX=0", "OK"); 022 023 return success; 024 } Bij het begin van de functie wordt eerste de variabele success op true gezet aangezien deze variabele nu met verschillende functies En-gekoppeld wordt. Dit betekent dat wanneer er ook slechts een van de functies de waarde false teruglevert, success eveneens onmiddellijk false wordt en de hele configuratie mislukt.
-
003 boolean success = true; 004 success &= (sendCom("AT+CWMODE=1", "OK")); 005 esp8266.setTimeout(20000); 006 success &= (sendCom("AT+CWJAP=\"" + String(vSSID) + "\",\"" + String(vPASSWORT) + "\"", "OK")); 007 esp8266.setTimeout(1000); 008 return success; 009 } De functie configStation() werd in de espConfig()-functie opgeroepen. Hier wordt het instellen van de WLAN-modus op stationsmodus met het bevel CWMODE en tenslotte het verbinden met het netwerk via het CWJAP-bevel uitgevoerd.
-
lijk sneller kan verwerken. In latere verzoeken wordt dan in de espConfig()-functie in de plaats van configStation() de configAP()-functie opgeroepen. 001 void setup() 002 { 003 // Open serial communications and wait for port to open: 004 Serial.begin(19200); 005 // set the data rate for the SoftwareSerial port 006 esp8266.begin(19200); 007 008 if (!espConfig()) serialDebug(); 009 else debug("Config OK"); 010 011 if (sendCom("AT+PING=\"www.google.de\"", "OK")) 012 { 013 Serial.
-
026 } De belangrijkste functies die u in bijna elk programma zult vinden, zijn daarmee behandeld. In de bekende Arduino-functies setup() en loop() worden deze functies nu gebruikt. Eerst worden beide seriële interfaces met 19200 Baud geïnstalleerd. Pas dan wordt de functie espConfig() opgeroepen. In geval van fout wordt onmiddellijk de serialDebug()-functie gestart. Als alles in orde was, wordt een positief bericht verzonden.
-
Aansluiten van de Piezo-luidsprekers De brontekst voor dit project is hoofdzakelijk in de volgende functies verschillend van het vorig verzoek: 001 void findSSID() 002 { 003 004 005 esp8266.println("AT+CWLAP"); if (esp8266.
-
011 012 digitalWrite(LED_ALARM, HIGH); 013 014 for (int i; i <=30; i++) 015 { 016 tone(PIEZO, 400, 500); 017 delay(500); 018 tone(PIEZO, 800, 500); 019 delay(500); 020 } 021 022 digitalWrite(LED_ALARM, LOW); 023 } De functie findSSID() wordt ca. elke 30 seconden in de loop-routine opgeroepen en zoekt dan naar alle netwerken in de omgeving. Wanneer het gezochte netwerk werd gevonden, wordt de functie alarm() geactiveerd die LED D3 inschakelt en een geluidssignaal aan de Piezo uitgeeft.
-
Wat is een IP-adres? Een IP-adres werkt als een postadres. Via dit adres kan een computer in een netwerk eenduidig worden geïdentificeerd en geadresseerd. Een IP-adres op basis van de gangbare IPv4-standaard ziet er bijvoorbeeld als volgt uit: 192.168.4.1 Het gaat om vier getallen of, juister gezegd, om vier bytes. Dit betekent dus dat de waarde van een getal maximum 255 kan bedragen. In principe zijn er lokale IPadressen, i.e. IP's die bv.
-
later zullen behandelen. De vergelijking is op dit moment nog niet bijzonder eenvoudig, maar u kunt het volgende merken over de eigenschappen van het protocol: U UDP is in staat om te broadcasten. U Er is geen controle van de data op correctheid en er is ook geen correctie van fouten. U Er is dus ook geen garantie dat data met succes is overgedragen. U Er is bovendien geen garantie dat data niet onderweg worden vervalst of door derden afgeluisterd.
-
AT+CWLIF via de seriële monitor naar de module te zenden. Dit bevel geeft alle met het Access Point verbonden computers met IP- en MAC-adres aan. Nu start u Packet Sender, zet u onder Settings -> Network de UDP Server Port op 90 in en klikt u op de checkbox Enable UDP Server an. In regel moet linksonder dan UDP 90 staan. Indien niet, moet u de software nog eens opnieuw opstarten.
-
Het bericht werd met succes overgedragen. Om gegevens te verzenden , gebruikt u het bevel: AT+CIPSEND=7 Daarbij staat de 7 voor het aantal te verzenden tekens. Het teken > verschijnt als teruggavewaarde. Dit betekent dat u nu uw bericht kunt overmaken. Tik Hello in en bevestig opnieuw met [Enter]. Als teruggavewaarde zendt de module SEND OK en dat hoewel u slechts vijf tekens hebt ingevoerd. Dit komt door het feit dat er na uw invoer nog Carriage Return en New Line mee verstuurd worden, i.e.
-
Het bericht werd door Packet Sender ontvangen. 001 boolean configUDP() 002 { 003 boolean success = true; 004 005 success &= (sendCom("AT+CIPMODE=0", "OK")); 006 success &= (sendCom("AT+CIPMUX=0", "OK")); 007 008 success &= sendCom("AT+CIPSTART=\"UDP\",\"192.168.4.
-
009 } In het Arduino-programma is voor de communicatieweg vooral de functie configUDP() beslissend. Daar worden de voor de overdracht belangrijke instellingen uitgevoerd. Als eerste wordt de datatransparantiemodus met CIPMODE op 0 gezet. Tenslotte wordt met CIPMUX=0 ingesteld dat er slechts een enkele verbinding is toegestaan. Het beslissende bevel is CIPSTART. Daarmee wordt een verbinding aangemaakt en wel met IP 192.168.4.2, i.e.
-
Het Packet Sender heeft met succes »Hi« overgedragen. Het bericht werd dus ontvangen. U kunt nu ook antwoorden door opnieuw het CIPSEND-bevel te gebruiken, dus bv.: 001 AT+CIPSEND=7 002 >Hello Het verschil met het vorige programma ligt uitsluitend in een enkele regel: success &= sendCom("AT+CIPSTART=\"UDP\",\"192.168.4.2 \",90,91", "OK"); Zoals u ziet, werd een tweede port aangegeven.
-
luistert. Met de bijlagen van deze eenvoudige regel is het mogelijk, ook data naar de module te verzenden. U kunt overigens ook aan dezelfde port, waarnaar u verzendt, luisteren. U kunt dus ook voor beide ports het getal 90 invoeren. In theorie is het met de wijziging ook mogelijk dat de module zijn eigen data ontvangt. 2.3 | Een LED met UDP schakelen In het programma P06_UDPLED.ino gaat het nu eindelijk om het besturen van hardware via het UDP-protocol.
-
de +IPD-melding worden aangekondigd. Legitieme bevelen die u via Packet Sender kunt verzenden, luiden led1 en led0. De controller interpreteert ze en schakelt dienovereenkomstig de LED in of uit. Een terugmelding naar de zender wordt eveneens overgedragen. Als een ander bevel wordt verzonden, verschijnt in de Serial Monitor de melding "Wrong UDP Command". Hetzelfde bericht wordt ook via het netwerk aan de zender overgedragen.
-
014 } 015 } 016 017 else { 018 debug("Wrong UDP Command"); 019 if (sendCom("AT+CIPSEND=19", ">")) 020 { 021 sendCom("Wrong UDP Command", "OK"); 022 } 023 024 } 025 026 } } 027 } Het analyseren van de inkomende bevelen gebeurt in de loop-routine, die permanent wordt doorlopen. Als er data van de module is aangekomen (esp8266.available()), worden ze geanalyseerd op de aanwezigheid van »+IPD,«.
-
ten NanoESP, 1 x LED (rood), 1 x knop, hm (bruin-zwart-rood), draadbrug De schakelaar plaatsbesparend aan D8 aangesloten Het programma Het programma analyseert verder de aankomende bevelen. Bovendien wordt de button echter voortdurend afgetast. Als hij door de gebruiker wordt geactiveerd, zendt de controller de tekst Button=1 naar het netwerk. Alle met de module verbonden apparaten met een UDP-server aan port 90 kunnen het bevel ontvangen. U kunt dit met de Packet Sender opnieuw controleren.
-
Het verloop in het Packet Sender De wijzigingen in het programma zijn vooral in de loop-routine te vinden. Een eenvoudige if-vraag controleert, of de schakelaar wordt ingedrukt. Als dit het geval is, geeft de controller de melding Button=1 aan het netwerk door. Bovendien is er een debug-melding. De daarop volgende while-lus heeft tot gevolg dat niet onmiddellijk een hele vloed aan commando's wordt verzonden, zolang u de schakelaar ingedrukt houdt.
-
Bij een huisautomatiseringsproject zou een server bijvoorbeeld de statusmelding van een bewegingsmelder ontvangen en dan het bevel voor het inschakelen van het licht naar een andere controller verzenden. Zo kan een heel netwerk van sensoren en actoren worden opgebouwd. 2.5 | Analoge sensor In het laatste project werd met een drukknopschakelaar de eenvoudigste vorm van een sensor behandeld.
-
feedback zeer nuttig zijn. Via de seriële monitor krijgt u ook informatie welk IP het board van de router kreeg toegewezen. Dit IP is belangrijk aangezien het u het board later wilt adresseren. Het communiceren met het board werkt ook op gelijkaardige manier als in de vorige verzoeken. Slechts het IP van de module en uw computer zullen gewijzigd zijn aangezien beide apparaten nu een IP van de router toegewezen krijgen. Packet Sender ontvangt na het starten eerst nog geen meetresultaten.
-
zich op het nieuwe IP in. success &= sendCom("AT+CIPSTART=\"UDP\",\" 192.168.255.255\",90,91,2", "OK"); Voor deze parameter zijn er de volgende mogelijkheden: 1 Modus 0: Dit betekent dat het IP en de port niet wijzigen. Dit is ook de defaultinstelling, wat duidelijk wordt wanneer u de andere modi beschouwt. 2 Modus 1: De instellingen veranderen een maal.
-
Het verzenden van de analoge waarde gebeurt in de loop-routine. Daartoe wordt de functie sendUDP() gebruikt die de bekende functies makkelijker toegankelijk maakt. Er moet niet absoluut een delay tussen het zenden van bevelen staan aangezien de overdracht zekere tijd in beslag neemt. Alleszins is de frequentie waarmee de nieuwe data overgedragen worden, zo hoog dat de pc bijna met berichten wordt gebombardeerd.
-
Het programma Het programma komt in haar werkwijze overeen met het SoftwareSerialprogramma van het eerste verzoek, maar maakt in elk geval onder andere de WLAN-verbinding bij de start zelfstandig aan. Zo spaart u een hoop schrijfwerk en kunt u sneller starten. Vergeet niet de gegevens van uw thuisnetwerk in het programma in te voeren. Tik dan in de seriële monitor, de volgende bevelregel in: AT+CIPSTART="TCP","www.example.com",80 Met dit commando stelt u een TCP-verbinding naar website www.example.com in.
-
Uittreksel uit het antwoord van de webserver In dit voorbeeld ziet u de basis van het HTTP-formaat. Een client maakt een verbinding met een webserver. Dat u het IP niet moet intikken, maar de Domainnaam in tekstvorm kunt gebruiken, ligt aan het zogenaamde DNS (Domain Name System). Het stuurt de vraag aan het moeilijk te merken IP door. Als de client verbonden is, zendt de browser een Get-Request-vraag.
-
Het programma Terwijl het vorige programma van gisteren nog grotendeels met de hand moest worden bediend, werkt dit verregaand autonoom. Volledig zelfstandig verbindt de controller zich met de website. http://chronic.herokuapp.com/ Via de URL kunnen verschillende tijdsystemen en tijdzones worden opgeroepen. De huidige, in België en Nederland geldige tijd, wordt door de URL http://chronic.herokuapp.com/utc/in-one-hour opgevraagd.
-
012 if (esp8266.find("+IPD")) 013 { 014 if (esp8266.find("\r\n\r\n")) 015 { 016 xyear = esp8266.parseInt(); 017 xmonth = esp8266.parseInt(); 018 xday = esp8266.parseInt(); 019 xhour = esp8266.parseInt(); 020 xminute = esp8266.parseInt(); 021 xsecond = esp8266.
-
woord van de server moet nu geanalyseerd worden. Daartoe wordt het gehele Request-Header-gedeelte overgelaten door naar \r\n\r\n te zoeken, wat niets anders betekent dan dat het na een dubbele Carriage Return en New Line verder gaat. De volgende getallen komen met de gezochte datum en tijd overeen die door een reeks van parseInt()-functie-oproepen in tussenvariabelen worden opgeslagen.
-
Aansluiting van de RGB-LED aan de pins D3, D5 en D6 Het programma In de sketch gaat het opnieuw om de vraag van een internetpagina, maar dit keer gaat het om een speciaal voor het programma geprogrammeerde pagina die gegevens van de weersite http://www.openweathermap.com/ onttrekt. Op deze pagina kan men door variatie van de URL, informatie met betrekking tot het weer in zijn stad bekomen. De stad, die u wilt bevragen, kunt u in de brontekst gewoon na City invoeren.
-
002 { 003 int green, blue, red ; 004 005 006 007 if (val <= 10 & val >= -20) blue = map(val, -20, 10, 255, 0); else blue = 0; 008 009 010 if (val >= 10 & val <= 40) green = map(val, 10, 40, 255, 0); 011 else if (val >= -20 & val < 10) green = map(val, -20, 10, 0, 255); 012 else green = 0; 013 014 if (val > 10 & val <= 40) red = map(val, 10, 40, 0, 255); 015 else red = 0; 016 017 analogWrite(RED, red); 018 analogWrite(GREEN, green); 019 analogWrite(BLUE, blue); 020 } De aanpassing van de
-
TCP-SERVER Nadat u in het vorige hoofdstuk iets over het gebruik van de module als TCP-client hebt geleerd, moet de module nu als eigen TCP-server handelen. Praktisch gezien is er ook daarvoor een eenvoudig AT-bevel waarmee u deze complexe servertoepassing kunt starten. De module gedraagt zich dan als een TCP-server uit het internet, behalve dan dat u het verzenden van de website zelf moet programmeren. 4.1 | TCP-webserver De eerste verzoeken inzake TCP-webserver gebeuren zonder bijkomende hardware-opbouw.
-
De Browservraag De browser op een antwoord en geeft zolang een laadteken weer tot de verbinding wegens time-out wordt verbroken. U kunt de browser met een variante van een bekend bevel een bericht sturen: AT+CIPSEND=0,7 De parameter 0 geeft hier de cliënt aan, naar wie het bericht moet worden verzonden. Dat is nodig omdat er meerdere verbindingen zijn toegelaten en daarom ook meerdere clients kunnen zijn verbonden. De tweede parameter, hier 7 geeft opnieuw het aantal te verzenden tekens weer.
-
ma gebruikt. Het nieuwe programma verzendt echter niet alleen een gewone website naar de browser, maar maakt het bovendien ook mogelijk om een LED aan te sturen. Op het opbouwscherm ziet u bovendien hoe u een externe stroomverzorging aan het board kunt aansluiten.
-
003 { 004 if (esp8266.find("+IPD,")) 005 { 006 debug("Incomming Request"); 007 int connectionId = esp8266.parseInt(); 008 009 if (esp8266.findUntil("LED","\n")) digitalWrite(LED, !digitalRead(LED)); 010 011 String webpage = "
Hello World!
Open [IP]/LED to Toggle LED on D9"; 012 013 if (sendCom("AT+CIPSEND=" + String(connectionId) + "," + String(webpage.
-
002 Open [IP]/LED to Toggle LED on D9 Daarbij moet
een aanwijzing aan de browser, de tekst tot
als kopregel van type 1 worden weergegeven. Het gaat nog niet om de juiste HTML-code, maar veel meer om een eenvoudige vorm van tekstweergave. De lengte van de website wordt met webpage.length() (een functie van de string-klasse) aan het CIPSEND-bevel doorgegeven en de pagina tenslotte overgedragen. 4.3 | Website met buttons Bij dit verzoek is de weergave van de website nog gedetailleerder.
-
mem-functie wordt nu de inhoud van de website in het programmageheugen ondergebracht dat met rond 32 kB duidelijk groter is. De toegang tot de data is daardoor alleszins ook een beetje complexer. 001 const char site[] PROGMEM = { 002 "
\n
-
001 boolean sendWebsite(int connectionId, String webpage) 002 { 003 boolean success = true; 004 005 if (sendCom("AT+CIPSEND=" + String(connectionId) + "," + String(webpage.length()), ">")) 006 { 007 esp8266.print(webpage); 008 esp8266.find("SEND OK"); 009 success &= sendCom("AT+CIPCLOSE=" + String(connectionId), "OK"); 010 } 011 else 012 { 013 success = false; 014 } 015 return success; 016 } In de loop-routine wordt nu gewacht op een Request-vraag.
-
aanmaken van invoer- en uitvoerelementen en tenslotte het inbinden van enkele websites in het Arduino-programma. Een HTML-bestand wordt altijd door aan het begin van het document gekenmerkt. Het einde van het document moet door worden gekenmerkt. In regel worden begin en einde van een deel of element in vergelijkbare vorm weergegeven, zoals men ook bij de header kan zien. In de header staan belangrijke informatie en vormen, zoals in dit geval bv.
-
001
002
003 004 Switch the LED
005 on D9 ON and OFF 006
007
Alle totnogtoe vooringestelde elementen waren zuivere vormfactoren, die dienen voor de vormgeving van de website. Als volgende komt alleszins het belangrijke form-element waarmee het schakelen van een LED wordt gerealiseerd.
-
Zo ziet de URL eruit nadat de button LED ON werd ingedrukt. 001
002
003 004 005 De laatste regels van de HTML-brontekst bevatten niets nieuws. Een sprong naar de volgende regel en een horizontale lijn ronden de afbeelding af voor het document met wordt beëindigd. U kunt de website in Sketchmap nu naar eigen wens wijzigen. U kunt bijvoorbeeld de achtergrondkleur wijzigen of meer tekst in de website invoegen.
-
De Swiss-Converter-Tool-site na een geslaagde convertering Daar voegt u de tekst uit de tussenopslag in en stelt u in punt 2. Select Output: de instellingen C/C++/PHP – StringText en UTF-8 – Unix (LF) in. In het onderste venster verschijnt al snel de Arduino-vriendelijke tekst die u naar de progmemvariabele site kunt kopiëren. Wanneer u het gewijzigde programma met de nieuwe variabele uploadt, ziet u de nieuwe website bij het oproepen van het board-IP in de browser. 4.
-
Aansluiting van de RGB-LED aan de pins D3, D5 en D6 Het programma De nieuwe website is opnieuw in de progmem-variabelen site te vinden. Ook dit keer kunt u de HTML-pagina in de Sketch-map bekijken. Na het instellen van de WLANbestanden en het uploaden van het programma kan de website van de webserver via het IP van de module worden bereikt. De pagina is met betrekking tot de achtergrondkleur en een titel op gelijkaardige manier vormgegeven dan de vorige.
-
De website in de browser De keuze van de kleur in de Chrome-browser Ook wanneer het design van de website niet zeer van deze van de voorgaande verschilt, zijn er toch een paar elementen die ik kort in meer detail wil beschrijven.
-
Deze regel is daar om te zorgen dat de browser na het laden van de website niet probeert het zogenaamde Favicon te laden. In principe heeft een website namelijk nog een bijzonder symbool dat van andere websites verschilt en de website in een browserlijst met meerdere tabs eenduidig identificeert. Opdat de browser dit teken kan laden, stuurt hij na het oproepen van de site een tweede request-vraag en vraag naar dit Favicon.
-
002
003 De gekozen kleur wordt nu in de vorm /?rgb=%23, gevolgd door zes bijkomende tekens, overgedragen. De uitdrukking %23 wijst erop dat het om een hexadecimaal getal gaat. Voor de kleur wit, luidt de URL dus als volgt: [IP]/?rgb=%23ffffff Uit dit HEX-getal moet de controller nu de afzonderlijke kleurwaarde van de LED afleiden, wat in het volgende deel van de loop-functie gebeurt: 001 if (esp8266.
-
4.6 | Lichtsensor In dit project wordt de website van de webserver niet als stuuroppervlak, maar als uitvoerelement gebruikt. De via een helderheidssensor gemeten helderheid wordt als relatieve waarde met een nieuw HTML-element overzichtelijk weergegeven. Voor de opbouw van het verzoek is de fototransistor, die als lichtsensor dient, nodig. De fototransistor kan makkelijk met een LED worden vergist. U kunt de fototransistor onderscheiden door van bovenaf in de kop van het element te kijken.
-
overzichtelijk in de browser weergegeven. De website van de helderheidssensor Opdat het systeem kan werken, zijn er in de HTML-bestanden opnieuw een paar kleine wijzigingen. De eerste wijziging is opnieuw in het Header-bereik te vinden: Deze kleine regel zorgt ervoor dat de browser de website automatisch alle drie seconden opnieuw laadt. Dat bespaart u het voortdurend indrukken van [F5] om nieuwe waarden te kunnen zien.
-
001 String createWebsite() 002 { 003 String xBuffer; 004 005 for (int i = 0; i <= sizeof(site); i++) 006 { 007 char myChar = pgm_read_byte_near(site + i); 008 xBuffer += myChar; 009 } 010 011 xBuffer.replace("*bright*", String(analogRead(SENSOR))); 012 013 return xBuffer; 014 } Het vervangen van de wildcard wordt in de functie createWebsite() uitgevoerd. Eerst wordt de progmem-variabele, zoals gewoonlijk, uit het geheugen geladen en in een string opgeslagen.
-
ten NanoESP, 1 x RGB-LED, 1 x RGBug Aansluiting van de LED aan D2-D7 Let op! LED's mogen niet zonder voorweerstanden worden aangesloten. Dat het in dit geval toegelaten is, ligt aan de on-weerstanden van de interne port-FET's van ca. 30 Ohm. Omdat de LED's tussen twee ports liggen, werken ze inderdaad met een voorweerstand van 60 Ohm. Naargelang het LED-type en de LED-kleur stelt zich daarbij een LED-stroom tussen de 15 mA en maximum 30 mA in, wat nog toegelaten is.
-
De website GPIO-control In deze HTML-code wordt de website zowel als invoerformulier en als uitvoerelement gebruikt. Wanneer u een blik op het vormelement werpt, ziet u dat een reeks van invoerelementen van het type checkbox wordt gebruikt. U krijgt een individuele naam toegewezen, die van de pinnaam wordt afgeleid. Als wildcard in de tekst dient telkens de tekst *checkedX*. Wanneer de pin low is, wordt de wildcard gewoon gewist.
-
De analyse in het programma werkt nu op de volgende manier: We nemen aan dat in het formulier de boxen 3, 5 en 7 werden geselecteerd. Dan wijzigt de URL naar: [IP]/?ld3=on&ld5=on&ld7=on Dit betekent dat alleen de geselecteerde boxen overgedragen worden en zich aan de hand van de index laten identificeren. In de loop-routine gebeurt dan dit. Eerst wordt de hele port D waaraan de digitale uitgangen zijn aangesloten, low geschakeld. Dan zoekt een while-lus naar alle "Id"'s in de ressources-link.
-
Daardoor wordt de juiste weergave van de actieve port gegarandeerd. 001 String createWebsite() 002 { 003 String xBuffer; 004 005 for (int i = 0; i <= sizeof(site); i++) 006 { 007 char myChar = pgm_read_byte_near(site + i); 008 xBuffer += myChar; 009 } 010 011 for (int x = 2; x <= 7; x++) 012 { 013 if (PORTD & (1 << x)) 014 { 015 xBuffer.replace("*checked" + String(x) + "*", "checked"); 016 } 017 else 018 { 019 xBuffer.
-
kwam ik dan op de oplossing: Het SRAM-geheugen was aan zijn grenzen gekomen en daardoor kwam het tot zeer merkwaardige, onberekenbare fouten. Ik moest de oorspronkelijke versie van het programma en de HTML-code duidelijk inkrimpen zodat het programma in deze versie kan werken. Ik vermeld dit aangezien u bij het creëren van eigen projecten precies hetzelfde kan overkomen.
-
De juiste instellingen in de Fritz!Box De instellingen in de router zouden daarmee in orde moeten zijn en men kan een eerste verzoek wagen. Daarvoor hebt u dit keer niet het IP van het board in uw lokaal netwerk nodig, maar uw globale IP. Dit kunt u opnieuw via de site http://www.meine-aktuelle-ip.de/ vinden. Wanneer u het daar gegeven IP nu in uw browser invoert, moet de website van de module verschijnen. Dit keer werd alleszins de lange weg via het internet genomen.
-
http://www.anydns.info/ voor, waarbij u ook elke andere webdienst kunt gebruiken die deze service aanbiedt. De website AnyDns.info Eerst moet u zich op de website registreren en ook reeds een domeinnaam geven. Ik heb de naam nanoesp gekozen en als host dynpc.net. Daaruit volgt het domain na de aanmelding: http://nanoesp.dynpc.net/ Nu moet de dienst alleszins nog hun IP vernemen. Voer de dienst in uw router in, zodat een nieuw IP rechtstreeks naar de DDNS-dienst wordt doorgestuurd.
-
De instellingen in de Fritz!Box voor het gebruik van Dynamic DNS Enkele woorden van waarschuwing: De dynamische DNS-dienst is wel praktisch, maar u moet voorzichtig zijn aan wie u de domeinnaam vertelt. U maakt uzelf kwetsbaar voor aanvallen want nu hoeft een hacker alleen uw domain en niet uw huidig IP te kennen om uw router aan te vallen. Daarom zal ik de bovengenoemde site ook slechts als test in het net laten.
-
5.1 | ThingSpeak Voor u dus zoals gewoonlijk met de opbouw en het programma begint, moet u een eerst account op de site www.ThingSpeak.com aanmaken. Log dan in met uw gebruikersgegevens onder het punt Sign In . U ziet een pagina die uw channels (kanalen) weergeeft. Aangezien u nog geen kanalen hebt, zal deze pagina er leeg uitzien. Klik op New Channel en geef dan een naam, bv. Light, want u zult in dit project de helderheid meten. Onder het punt Field 1 kunt u nu nog een naam voor het veld geven, evt.
-
Kanaal op de ThingSpeak-site aanmaken Klik dan op Save Channel om de instellingen op te slaan. U wordt naar de site van uw channel gebracht, waarop echter alleen een leeg diagram te zien is. Klik in de bovenliggende driver op API Keys. De cijfer- en lettervolgorde die u onder het punt Write API Key vindt, hebt u meteen nodig.
-
De opbouw van het verzoek bestaat uit een sensor aan de analoge ingang A6. Een spanningsdeler met 10-kΩ-weerstand en fototransistor maakt het meten van de huidige helderheid mogelijk. U kunt echter ook de temperatuursensor gebruiken. De schakeling blijft bijna dezelfde, behalve ten dat u de lichttransistor door de zwarte NTC verNanoESP, 1 x fototransistor, 1 x vangt. De verpoling is bij NTC willekeurig.
-
De meetresultaten in het diagram De brontekst schijnt sterk van alle voorgaande programma's te verschillen, maar in wezen gaat het om een samenstelling van oude, bekende elementen. Een programma-variabele bevat de HTTP-vraag die naar de ThingSpeak-site moet worden verzonden, naast een paar wildcards die telkens na vragen moeten worden vervangen. 001 POST *URL* HTTP/1.1 002 Host: api.thingspeak.
-
volgende structuur gebruiken: *URL* is /update. Dat is de subpagina waarnaar de gegevens moeten verzonden worden. Het bericht is nu samengesteld uit uw API-key, het in te vullen veld en de waarde. De lengte van het bericht kan gewoon door de lengte van de string worden bepaald. Over het algemeen ziet een voorbeeld-POST er zo uit: 001 POST /update HTTP/1.1 002 Host: api.thingspeak.
-
ten NanoESP, 1 x LED (rood), 1 x weern-zwart-rood), draadbrug schikt voor een eerste test. Later kunt u natuurlijk een kanaal naar keuze instellen. De verzoeksopbouw met een LED aan pin D9 Het programma Naast de hardware-opbouw zijn er ook enkele stappen op de ThingSpeak-pagina nodig. Wanneer u op de website in het bovenste menu op Apps klikt, krijgt u een reeks verschillende toepassingsmogelijkheden te zien. Dit keer bekommeren wij ons met de app ThingHTTP.
-
Dit project is mogelijk aangezien de Twitch-site informatie ook in het bekende JSON-formaat ter beschikking stelt. Via de site https://api.twitch.tv/kraken/streams?channel=rocketbeanstv kunt u de editie in JSON-formaat bekijken. Er is een hoeveelheid tekst, maar ons interesseert alleen het attribuut _total dat het aantal actieve streams weergeeft. Als dit aantal groter is dan nul, betekent dit dat er minstens een stream actief is.
-
Lichtsensor aan A0, Piezo aan D8 Het programma Het thema is onder meer de Twitter-app van de ThingSpeak-site. Klik dus op Apps en vervolgens op ThingTweet. Met een klik op Link TwitterAccount en het invoeren van uw toegangsgegevens maakt u een verbinding tussen beide diensten. Als u nog geen Twitter-account hebt, is het aangewezen om een account aan te maken als test voor het werken met het leerpakket.
-
5.4 | TalkBack In dit project gaat het om een bijkomende app van de ThingSpeak-site, namelijk de TalkBack-app. Met deze functie is het mogelijk om een commando aan te maken dat door de controller wordt geanalyseerd en uitgevoerd. Wat met slechts een controller aanvankelijk zinloos schijnt, is zinvol wanneer men twee of zelfs een heel netwerk controllers gebruikt.
-
Wanneer u nu het programma uploadt en de seriële monitor oproept, krijgt u eerste de melding No Command te zien. Druk nu op één van beide drukknopschakelaars. Na korte tijd verschijnt dan de melding OpenDoor of CloseDoor, naargelang de button u hebt ingedrukt. Bij het OpenDoor-commando begint de LED bovendien te branden. Het TalkBack-overzicht bij het invoeren van een commando Er is natuurlijk ook de mogelijkheid waarmee u commando's rechtstreeks via het internet kunt invoeren.
-
commando's. Wanneer iets werd gevonden, wordt het commando teruggegeven. U moet nu de parameters key en id aangeven. 5.5 | Cheerlights Dit verzoek is gebaseerd op een project van Hans Scharler, dat Cheerlights heet. Het idee: wereldwijd vernette lichtjes, die zich simultaan via Twitter-commando's laten sturen. Een goed voorbeeld van het feit dat ten de wereld door het internet altijd dichter bij elkaar NanoESP, 1 x RGB-LED (rood), 3 x komt.
-
De Cheerlightssite met de huidige kleur paars Voor het programma is bovendien de Crossfrade Library van Radek Wierzbicki nodig (bron: https://github.com/radekw/Arduino/tree/5f24ce7c8db9dfbb5252b59824c3217d851b3 a3c). Omwille van praktische redenen bevat de Sketch-map een kopie van de door mij gebruikte Library-versie. Deze moet in de map libraries van uw Sketchbook-map worden gekopieerd.
-
woord staan. Bij de voorgedefinieerde kleuren horen: red, green, blue, cyan, white, warmwhite, purple, magenta, yellow, orange, pink Een mogelijke tweet kan er bv. zo uitzien: Testing my #cheerlights project on my #NanoESP with the color blue #ThingSpeak #IoT U hebt al de hele wereld een nieuwe kleur gegeven. De vraag van de huidige kleur wordt met de functie getCheerlightColor() gerealiseerd. Als parameter worden de host, i.e. api.thingssspeak.com en de URL, hier /channels/1417/field/1/last.
-
De opbouw van het brandmelderproject Het programma Het programma moet meerdere verschillende elementen met elkaar verenigen. Daarbij speelt de ThingSpeak-site opnieuw een belangrijke rol. Onder andere wordt deze keer ook de drempelbewaking van de NTC door een ThingSpeak-app overgenomen. Van daaruit worden dan ook de alarmfuncties uitgevoerd, namelijk een Twitter-bericht verzonden en een TalkBack-commando ingevoerd, dat op de controller het alarm activeert.
-
den en testen of de overdracht van de actuele temperatuurwaarde functioneert en of het board de commando's uitvoert. Hier is het de moeite om met een kamerthermometer de NTC via de potentiometer te kalibreren. In principe is dit reeds een volwaardig project, maar de bonusfuncties ontbreken nog. Deze moeten alleszins niet meer in het programma worden uitgevoerd, maar alleen nog op de ThingSpeak-site. Daarvoor gaat u naar Apps en kiest u vervolgens React .
-
Body: api_key=[YOUR TALKBACK ID]Key command_string=Alarm&position=1 Let op dat u [YOUR TALKBACK ID] en [YOUR TALKBACK KEY] in de URL en in het body-part door uw TalkBack ID en uw KEY vervangt. Nu kunt u een ander React-element aanmaken dat dezelfde parameters zoals het eerste bevat, maar met dit verschil dat u bij Action ThingHTTP en daar het punt Alarm selecteert. Daarmee hebt u gegarandeerd dat een alarm weerklinkt wanneer de kritische waarde overschreden wordt.
-
De juiste TalkBack-instellingen voor het brandalarm Voor een eerste test is het aangewezen om een tijdstip in een paar minuten te kiezen. Wanneer dit gefunctioneerd heeft, kan men het juist tijdstip instellen. Het is beslist niet het mooiste geluid om gewekt te worden, maar in elk geval bijzonder doeltreffend.
-
AT-commando's Bevel Schrijfwijze Fundament Testbevel AT Reset AT+RST Firmware-info AT+GMR Echo Aab/Uit ATE<1/0> WLAN-bevelen WLAN-modus (1 = Client, 2 = AP, 3 = Dual) AT+CWMODE= WLAN-netwerken zoeken AT+CWLAP WLAN verbinden AT+CWJAP=««,«« WLAN verbreken AT+CWQAP WLAN-Access-Point-instellingen AT+CWSAP=««,««[,,] IP-adres uitgeven AT+CIFSR DHCP activeren/deactiveren AT+CWDHCP=<1/0> Automatisch met WLAN verbinden AT+CWDHCP=<1/0> MAC-adres van
-
IP-adres instellen (Access Point) AT+CIPAP= Starte SmartConfig AT+CWSTARTSMART= Stoppe SmartConfig AT+CWSTOPSMART Communicatie Functie Ping AT+PING= Meerdere verbindingen toelaten AT+CIPMUX= Datamodus (0=transparant, 1=datamodus) AT+CIPMODE= Structuur van de ontvangen gegevens +IPD,,: Verbinding maken AT+CIPSTART=««,««, Data verzenden AT+CIPSEND=, Verbinding verbreken AT+CIPCLOSE= Serverbevelen Server starten A
-
Pinout