Voor u begint... ... een paar belangrijke aankondigingen en voorschriften om succesvol en zonder stress met de kalender te werken. Het gebruik van deze handleiding is slechts een van twee mogelijke benaderingen m.b.t. de kalender. De tweede mogelijkheid bestaat erin om de website www.conrad.de/iot-adventskalender als informatiebron te raadplegen. Met betrekking tot de tekst, zijn beide handleidingen bijna identiek. Het medium internet laat echter een nog groter aanbod aan informatie toe die de weg naar succes kan vergemakkelijken. Een voorbeeld voor het grotere informatieaanbod is het feit dat er op de website enkele bijkomende foto's kunnen worden toegevoegd. Een website is niet gebonden aan beperkingen, zoals drukkosten of aantal pagina's en maakt een complexe en gekleurde vormgeving mogelijk. Het een of andere bijkomend artikel kan eveneens behulpzaam zijn voor de ontwikkeling en vormgeving van enkele projecten. Een bijkomende hulp is de commentaarfunctie. Internet van zaken is zowel een complex als spannend en veelzijdig thema. Er zijn veel struikelstenen op de weg naar een succesvol project. Het kan dus maar behulpzaam zijn om zijn probleem aan een grotere community te kunnen voorleggen. Daarom is onder elk artikel de commentaarfunctie geactiveerd, waarin men vragen kan stellen, verbeteringen kan voorstellen of andere projectdeelnemers bij hun probleem kan bijstaan. Ik hoop zo om de individuele frustratie te minimaliseren en het plezier aan het project over lange tijd hoog te houden, ook wanneer er eens iets fout gaat. Een derde voordeel van de website kan de verrassingsfactor zijn. De opwinding van een adventskalender ligt erin dat u niet weet wat zich achter het volgende deurtje bevindt. Bij een handboek ziet u meestal al de vraag op de volgende pagina en bent u »gespoilert«. Op de website verschijnt echter elke dag alleen het hoofdstuk van de overeenkomstige dag. Daarom mijn advies: Leg het handboek na dit hoofdstuk gewoon in een hoek en haal het niet meer uit. Ga in de plaats naar www.conrad.de/iot-adventskalender en plaats een bladwijzer op de pc, smartphone of tablet. Dan kunt u elke dag, waar u ook bent, vb. in de trein op weg naar het werk, het hoofdstuk van de dag lezen en later, wanneer u thuis komt, met het praktisch gedeelte van het dagproject experimenteren. Ledereen die toch fan van een klassiek handboek is, houdt het boek natuurlijk in de hand. Het kan uiteraard ook makkelijk zijn om geen digitaal apparaat in de hand te moeten nemen wanneer men zich een eerste overzicht over het huidige verzoek verschaft. In elk geval blijft een bezoek van de website niet uit, want u moet het huidige programma downloaden. U vindt het in het overeenstemmend artikel on het punt »Het programma«. Ongeacht welke weg u beslist te nemen bij het doornemen van de kalender, wens ik u veel plezier en een vrolijke, spannende kersttijd. Fabian Kainka
Dag 1: De eerste stappen Het is de eerste dag in december en daarom tijd om het eerste deurtje te openen. Achter het deurtje bevindt zich het belangrijkste onderdeel van deze kalender, namelijk het Arduino™-compatibele NanoESP-Board met geïntegreerde WLAN-module waarom het in deze kalender gaat, Zoals men aan de platine zeer goed kan herkennen, bestaat het board uit twee onderdelen. Bij de linkerhelft gaat het om een Arduino™compatibel microcontrollersysteem dat met de Arduino™ Nano kan worden vergeleken. Het rechterdeel is de WLAN-module met de omschrijving ESP8266. Deze beide componenten communiceren met elkaar via een door software gegenereerde seriële interface. Daarbij fungeert de Arduino™-zijde eerder als chef die de commando's naar de WLAN-module doorgeeft. Enkele van deze commando's worden vandaag al op de eerste dag uitgeprobeerd. Het programma Het programma van de respectievelijke dag kunt u downloaden door naar www.conrad.de/iot-adventskalender te gaan, uw taal te selecteren en het artikel voor het huidige project op te roepen. U vindt de download onder het overzicht »Het programma«. Als ontwikkelingsomgeving wordt de Arduino™-software gebruikt. De huidige versie vindt u op de website: arduino.cc Ik heb met de Arduino™-versies 1.6.4. – 1.6.5. gewerkt. Oudere versies kunnen problemen veroorzaken. Voor veel Linux-versies bestaat er alleszins slechts een zeer oude versie. Tips over hoe u deze en andere problemen kunt oplossen, vindt u op de website. In de Arduino™software moet u als Board Arduino™ Nano en de seriële poort selecteren. Dan kunt u het programma uploaden.
Bij de huidige download gaat het om een zeer eenvoudig programma dat niets meer doet dan alle gegevens die via de seriële hardware-interface van de microcontroller worden ontvangen, via de zelf gedefinieerde software-interface naar de ESP-controller door te geven. Het geheel werkt ook in omgekeerde richting. Zoals men in de brontekst kan zien, zijn beide aansluitingen van de software-interface pins 11 en 12. Deze moeten in eigen projecten niet als GPIO-pins worden gebruikt. U hebt bovendien de software Serial-Library nodig. De Library is bij de meeste Arduino™versies reeds voorgeïnstalleerd. Indien niet, moet u dit via de Manager downloaden. Nadat het programma werd geüpload, kunt u de seriële monitor van het Arduino™-oppervlak starten. Voor u kunt starten, moet u nog twee belangrijke instellingen aan de Serial Monitor uitvoeren, namelijk rechtsonder in de hoek de Baudrate op "19200" instellen en in de box links daarnaast de instelling "CR en NL" uitvoeren. Na het instellen ziet u al een melding, namelijk een AT en een paar regels daaronder een OK. Het commando AT werd door microcontroller naar de ESP-module verzonden en de module heeft met OK geantwoord. Daaraan kunt u herkennen dat de module werkt en gebruiksgereed is. U kunt dit opnieuw testen door zelf het bevel AT via seriële monitor te verzenden. Het opgeladen programma geeft het bevel opnieuw naar ESP-module door, dat opnieuw met OK antwoordt. Het volgende bevel dat u kunt testen, luidt: AT+GMR Met dit bevel worden de huidige firmware en versienummer weergegeven. Met het bevel AT+RST kunt u de module resetten. U ziet dan in de terminal eerst een paar onleesbare tekens en op het einde een ready, het teken dat de module nu gereed is. Met AT+CWMODE kunt u de WLAN-module vastleggen. Er zijn drie mogelijkheden: Modus 1 is de stationsmodus Dit betekent dat u met de module in een bestaand WLAN kunt inbellen. Modus 2 is de AccesPoint-modus. Dit betekent dat u zich met een WLAN-gereed apparaat in een door de module gereedgesteld WLAN kunt aanmelden. Modus 3 is de duale modus. U kunt zowel met de module in een bestaande WLAN inbellen of met een bijkomend apparaat een rechtstreekse verbinding opbouwen. Test de AccesPoint-modus door modus 2 via het commando AT+CWMODE = 2 vastleggen en dan met het bevel AT+CWSAP=”MyNanoESP”,”MyPassword”,5,3 de bij het Access Point passende parameters instellen. U kunt dan vb. met een WLAN-gerede pc het netwerk MyNanoESP zoeken en zich met het wachtwoord MyPasswort verbinden. Als de verbinding succesvol is, kunt u met AT+CWLIF het verbonden apparaat met IP- en MAC-adres laten weergeven.
De AT-commando's in de seriële monitor
U kunt nu ook de stationsmodus testen door eerst met AT+CWMODE=1 de modus om te zetten. U kunt alle beschikbare WLAN-netwerken binnen bereik door het bevel AT+CWLAP laten oplijsten. Tot slot stelt u met AT+CWJAP=“MySSID“,“MyPassword“ een verbinding met uw netwerk in, waarbij u MySSID en MyPassword door uw netwerknaam en uw wachtwoord vervangt. Het kan een hele tijd duren tot de verbinding is gemaakt, maar aan het einde staat er een OK als bevestiging. De opbouw van een eerste verbinding is daarmee zo gelukt.
Dag 2: Google Ping Met het huidige project wordt getest of u de Google-server kunt bereiken. Dit dient als test of er een principiële verbinding met het internet beschikbaar is of bijvoorbeeld een Firewall het NanoESP-board blokkeert. Achter het huidige deurtje vindt u een steekboard. Het steekboard dient later als experimenteerplatform om sensoren en andere elementen te kunnen aansluiten. Het beste is wanneer u de controller zoals op de onderstaande afbeelding op het steekboard steekt. Daardoor blijft de meeste plaats voor experimenten terwijl de WLAN-module achteraan boven het steekboard uitsteekt. De micro-USB-kabel hangt dan tussen de contactzijden en stoort maar minimaal.
De NanoESP op het steekboard
Het programma In het voorbeeldprogramma van de website werden de werkwijzen die u in het eerste voorbeeld manueel hebt ingetikt, grotendeels geautomatiseerd. De controller stuurt na elkaar bevelen naar de ESP-module en maakt zo o.m. de verbinding naar de WLAN. De verschillend lange time-outtijden geven de module voldoende tijd om te antwoorden.
Voor het programma echter correct kan functioneren, moet u achter beide #defines SSID en WACHTWOORD onmiddellijk bij het begin van de programmabroncode, uw WLAN-gegevens invoeren. De module heeft namelijk toegang tot het internet nodig om zijn laatste bevel te kunnen uitvoeren. Met het bevel AT+PING kunnen andere apparaten in het netwerk worden aangepingd. Pingen betekent dat men vraagt of een adres in principe bereikbaar is. Hier wordt de Google-server met AT+PING=“www.google.de“ aangepingd en wanneer er een antwoord terugkomt, verschijnt er een melding dat de verbinding in de Serial Monitor geslaagd is en de met D3 aangeduide LED die op pin D13 aan de boards is aangesloten, wordt geactiveerd. De eerste communicatie met het internet is geslaagd.
Dag 3: UDP-zenden In het huidige project worden voor het eerst gegevens tussen board en pc via het WLAN uitgewisseld. Voorwaarde is dat uw computer over een WLAN-adapter beschikt. Het zogenaamde UDP (User Datagram Protocol) wordt gebruikt. Een ander programma aan pc-zijde zorgt voor het succesvol ontvangen van de meldingen. Achter het derde deurtje van de kalender vindt u een geïsoleerde kabel die voor de opbouw van schakelingen niet betrouwbaar is. Als voorbereiding voor latere versies kunt u de verzorgingsleidingen massa en VCC op de buitenste banen leggen. Het programma Wanneer u het programma op de controller laadt, zal de Controller als AccessPoint worden geconfigureerd en u moet een open netwerk met de naam NANoESP zien. Voor u zich in elk geval met het netwerk verbindt, moet u eerst nog een programma uit het internet downloaden. Bij mijn verzoeken heb ik het programma Packet Sender van Dan Nagle gebruikt, aangezien men ze via deze link kan downloaden: https://packetsender.com/ Na het laden en installeren van het programma kunt u uw pc met het open netwerk van de NanoESP kiezen. Let op dat de Firewall het netwerk als thuisnetwerk herkent, zodat er geen gegevens geblokkeerd worden. Uw computer zou nu IP 192.168.4.2 moeten ontvangen hebben. U kunt dit controleren door het AT-bevel AT+CWLIF via de seriële monitor naar de module te zenden. Dit bevel geeft alle met het AccessPoint verbonden computers met IP- en MAC-adres aan. Start hier het programmapakket zender, stel onder Settings->Network de UDP-server-port op 90 en vink de checkbox "Enable UDP Server" aan. In regel moet linksonder dan UDP 90 staan. Indien niet, moet u de software nog eens opnieuw opstarten. Het programma op de computer dient nu als UDP-server, terwijl de controller als UDP-client is ingesteld. In het UDP-protocol is het onderscheid tussen client en server niet eenduidig, maar in dit geval betekent het dat u met de controller gegevens naar uw computer verzendt. Om gegevens te verzenden, gebruikt u het bevel: AT+CIPSEND=7 De 7 staat 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. twee tekens meer die u in uw berichtlengte moet incalculeren. Wanneer u opnieuw naar Packet Sender gaat en daar onder Log Traffic kijkt, kunt u de ingang van het bericht zien. In het ASCII-aanzicht ziet u zelfs beide meegezonden tekens, voorgesteld door \r en \n. De eerste communicatie tussen board en pc via WLAN was dus een succes.
Dag 4: UDP bidirectioneel In het project van gisteren werd de UDP-communicatie in een richting, i.e. van het board naar de pc getest. In dit programma wordt de module zo ingesteld dat een communicatie ook in de andere richting mogelijk is, bijna als in een chat. Achter het vierde deurtje van de adventskalender bevindt zich een weerstand met 1 kΩ (bruin, zwart, rood). Het onderdeel wordt in het huidige
verzoek nog niet gebruikt, maar moet voor later worden bewaard. Het programma Het programma van vandaag bevat in principe slechts een minimale wijziging die echter een grote invloed op de communicatie met het UPDprotocol heeft. Wanneer u het programma uploadt, wordt opnieuw een AccesPoint aangemaakt waarmee u zich met de pc kunt verbinden. Ook deze keer zult u Packet Sender of een vergelijkbaar programma nodig hebben. Start het programma en stel dezelfde instellingen als gisteren in (File-> Settings->Network: Enable UDP Server, Port 90). Vervolgens moet u in het hoofdvenster in het veld IP-adres het adres van de module (192.168.4.1) intikken, de port op 91 instellen en in het verder rechts staande dropdown menu het punt UDP selecteren. Als beide instellingen zijn gemaakt en de Serial Monitor geopend, kunt u het eerste bericht naar de module zenden door vb. Hi in het met ASCII gemarkeerde veld te tikken. Wanneer u nu op Send klikt, verschijnt in de Serial Monitor +IPD,2:Hi OK Het bericht werd dus ontvangen. U kunt nu ook antwoorden door opnieuw het CIPSEND-bevel te gebruiken, dus vb. AT+CIPSEND=7 >Hello Chatten via twee apparaten isn u ook mogelijk, zelfs indien het nog erg omstandig is.
Dag 5: LED schakelen In het huidige programma gaat het uiteindelijk erom hardware via het UDP-protocol te besturen. In dit geval wordt een LED met eenvoudige bevelen in- en uitgeschakeld. Achter het vijfde deurtje bevindt zich een LED. De passende voorweerstand bevond zich al gisteren in het vak. Bouw de schakeling op, zoals weergegeven in de afbeelding. Het programma Terwijl de voorgaande voorbeeldprogramma's veel invoer van de gebruiker nodig had, moet het huidige programma autonoom werken. Toch worden via de seriële monitor omwille van Debug-redenen verder informatie uitgegeven. De controller wacht nu op de door de module ontvangen gegevens die via 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 aan 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.
Dag 6: UDP-button In het programma van gisteren werden eerste commando's door de controller geanalyseerd. Het huidige programma omvat deze functie, maar kan bijkomend zelfstandig een commando naar het netwerk zenden. Achter het huidige deurtje vindt u een drukknopschakelaar. Hij dient hier als gewone sensor. Verbind deze met de controller, zoals weergegeven op de opbouwafbeelding. Het programma Het programma analyseert verder de aankomende signalen. Bovendien wordt de button 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 poort 90 kunnen het bevel ontvangen. Bij een huisautomatiseringsproject zou een server bijvoorbeeld de statusmelding van een bewegingsmelder ontvangen en dan het bevel led=1 terugzenden om het licht te activeren.
Dag 7: Analoge sensor In het laatste project werd met een drukknopschakelaar de eenvoudigste vorm van een sensor behandeld. Dit keer moet een Poti als analoge sensor worden gebruikt om permanent meetwaarden naar het netwerk te zenden. Achter het 7e deurtje van de adventskalender bevindt zich een Poti met 10 kΩ. De opbouw wordt in het onderste afbeelding weergegeven. Het programma Naast de analoge sensor is er een bijkomende wijziging in het programma. Dit keer moet de controller niet als anders in de AccesPoint-modus worden gebruikt, maar zich met uw thuisnetwerk verbinden. Uw stationsgegevens kunt u echter dit keer ook gewoon bovenaan in het programma invoeren. Na de upload kan het een tijdje duren tot de verbinding met het netwerk werd gemaakt. Als dit succesvol was, begint LED D3 die vast op het board aangebracht is, te branden. Dit is het teken dat de controller nu gereed is. Zolang de seriële monitor actief is, zult u weliswaar ook een overeenkomstige melding zien, maar bij latere verzoeken wilt u het board eventueel zelfstandig inzetten en dan kan deze feedback zeer nuttig zijn. Via de seriële monitor krijgt u ook informatie welk IP het board van de router kreeg toegewezen. Deze IP is belangrijk wanneer u zich later met het board wilt verbinden. De verbinding met het board werkt op dezelfde manier als eerder. Alleen de IP van de module en uw computer zullen zich hebben gewijzigd. Het programma ontvangst eerst nog geen meetresultaten. U moet eerste een bericht, vb. het commando led=1 verzenden en er komen ca. eenmaal per seconde nieuwe meetgegevens binnen.
Dag 8: Een browser In de voorbije dagen hebben wij ons vooral op het UDP-protocol geconcentreerd, waarmee eenvoudig en rechtstreeks gegevens kunnen worden verzonden. De volgende dagen zullen wij ons met het TCP-protocol (Transmission Control Protocol) bezig houden. TCP laat altijd slechts een verbinding tussen precies twee computers toe. Het wordt vooral voor het internet gebruikt wanneer het om browsen van websites gaat. Achter het huidige deurtje bevindt zich opnieuw een weerstand met 1 kΩ (bruin, zwart, rood). Zoals ook bij alle andere modules geldt: goed bewaren, ook wanneer de module vandaag nog niet wordt gebruikt. Het programma Het programma komt in haar werkwijze overeen met het SoftwareSerial-programma, 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 bevelsregel in: AT+CIPSTART=“TCP“,“www.example.com“,80 Met dit commando stelt u een TCP-verbinding naar website www.example.com in. Poort 80 is de standaardpoort voor HTTP-vragen. Na de bevestiging van de verbinding met OK kunt u het volgende bevel intikken, dat u reeds kent: AT+CIPSEND=40 U wilt nu namelijk een bericht via de net aangemaakte verbinding verzenden. Wanneer u met > daartoe wordt aangemoedigd. Een tekst in te geven, tikt u eerst GET / HTTP/1.1 in en druk vervolgens op enter. De Enter verschijnt niet in de Serial Monitor, maar de module heeft het ontvangen. Daarna gaat het bericht verder met Host:www.example.com gevolgd door tweemaal enter. Er komt opnieuw een langere tekst. Het eerste deel is het antwoord van de server die een paar informaties voor de browser bevat. De tekst na is de website die u ook ziet wanneer u de pagina www.example.com direct oproept, hier alleszins in zuivere tekstvorm. Een browser zou deze teksten alleen interpreteren en in een voor ons traditionele vorm weergeven.
Uittreksel van een antwoord van de webserver
Dag 9: TCP-tijd Het project van vandaag gebruikt de functies van de vorige test om zelfstandig informatie uit een website te betrekken. Concreet laat het programma de huidige tijd van een speciaal daarvoor geconcipieerde pagina en stelt zo de via de library gerealiseerde interne klok van de controller. Achter het huidige deurtje bevindt zich opnieuw een weerstand met 1 kΩ. Voor het verzoek van morgen hebt u alle drie de weerstanden nodig. Het programma Terwijl het programma van gisteren nog grotendeels met de hand moest worden bediend, werkt het huidige programma verregaand autonoom. Volledig zelfstandig verbindt de controller zich met de website. http://chronic.herokuapp.com/ Via de URL kunnen verschillende tijdssystemen en omstellingen worden opgeroepen. De huidige, in België en Nederland geldige wintertijd, wordt door de URL http://chronic.herokuapp.com/utc/in-one-hour opgevraagd. Daarom staat in de oproep van de functie getTime als tweede parameter »utc/in-one-hour«. Uitgaand van de UTC (gecoördineerde wereldtijd) moet u in de zomer de oproep in »utc/in-two-hours« wijzigen. Volgens hetzelfde systeem kunt u ook alle andere tijdzones behandelen. De bepaalde tijd wordt nu aan de Time-Library van Michael Margolis doorgeven. (bron: http://www.pjrc.com/teensy/td_libs_Time.html). Omwille van praktische redenen bevat de Sketch-map een kopie van de door mij gebruikte Time-Library-versie. Deze moet in de libraries-map van uw Sketchbook-map worden gekopieerd In de achtergrond wordt permanent de nieuwe tijd berekend en elke seconde in de terminal uitgegeven. U kunt nu op een eenvoudige manier een wekker of andere tijdsgestuurde toepassing programmeren.
Dag 10: Temperatuuraanduiding Bij het huidige project gaat het om een intuïtieve weergave van de actuele temperatuur. Met een blik kan men inschatten of het zinvol is om een warme jas mee te nemen. Achter het huidige deurtje bevindt zich een andere LED, alleszins geen gewone. Het gaat om een RGB-LED. RGB staat voor Red, Green, Blue of Rood, Groen, Blauw aangezien de LED eigenlijk uit meerdere LED's met een gemeenschappelijke kathodenaansluiting bestaat. Door een combinatie van de verschillende kleuren met verschillende helderheden is het mogelijk om bijna elke kleur weer te geven. De LED kan, zoals getoond in de afbeelding, met voorweerstanden aan PWM-uitgangen D3, D5, D6 van de controller worden aangesloten. Het programma In de huidige Sketch gaat het opnieuw om een vraag van een internetpagina, maar deze keer een weersite, namelijk: www.openweathermap.org Op deze pagina kan men door variatie van de URL, informatie met betrekking tot het weer in zijn stad bekomen. Het voorbeeld is beperkt tot
live-data in het zogenaamde XML-formaat in het metrisch systeem. De stad, die u wilt bevragen, kunt u in de brontekst gewoon invoeren na CITY. Als voorbeeld gebruik ik mijn thuisstad Essen: http://api.openweathermap.org/data/2.5/weather?q=Essen&units=metric&mode=xml Het programma leest nu uit deze pagina de temperatuur en geeft het resultaat in kleur via de RGB-LED weer. Tegelijk wordt de waarde ook via de seriële monitor weergegeven. Het in het voorbeeldprogramma gebruikte temperatuurbereik voor de weergave aan de LED bedraagt -20°C tot +40°C.
Dag 11: TCP-webserver In de voorgaande verzoeken hebben wij ons voornamelijk op het thema TCP en de toegang tot de webserver geconcentreerd. Vandaag moet de module voor het eerst zelf als webserver fungeren. Achter het deurtje van de 11e dag bevindt zich een bijzondere kabel die binnenkort nog heel nuttig zal zijn. Een speciale opbouw is vandaag niet nodig aangezien het programma op gelijkaardige wijze als het Serial-Monitor-programma van de eerste dag werkt. Het programma Wijzig de WLAN-gegevens en laad het programma op uw board op. Start dan de monitor. Het kan opnieuw een paar seconden duren tot de melding verschijnt dat het board verbonden is. Wanneer de melding dat de verbinding geslaagd is, verschijnt en de IP van de module wordt weergegeven, kunt u in de Serial Monitor met het eerste bevel beginnen: AT+CIPMUX=1 Met dit bevel laat u meerdere verbindingen met de module toe. U kunt toegang krijgen tot meerdere computers op de webserver. Met het volgende bevel start u de webserver: AT+CIPSERVER=1,80 Parameter 1 betekent dat de server wordt gestart. Met 0 beëindigt u een server opnieuw. Het getal 80 staat voor de poort waaronder de server te bereiken is. Door de browser verzoden HTTP-vragen worden over het algemeen via port 80 verzonden. U kunt nu een browser naar keuze openen en in de adressenlijst de IP van de module tikken en oproepen. In de browser verschijnt eerst een laadbericht, maar in de Serial Monitor kunt u een wijziging zien. U ziet een Request-vraag gelijkaardig aan deze die u reeds manueel hebt verzonden.
De browser-vraag
De browser wacht nu dus 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 de te verzenden tekens weer. > verschijnt en u kunt een eenvoudig Hallo intikken en met enter verzenden. In uw browser zal er echter eerst niets veranderen aangezien u de verbinding eerst moet sluiten. Gebruik daartoe het bevel: AT+CIPCLOSE=0 Nu kunt u in uw browser een Hallo zien en zo hebt u een eerste webservertoepassing gerealiseerd.
Dag 12: Autonome webserver De resultaten van het verzoek van gisteren worden nu opnieuw in een autonoom programma gebruikt. Het huidige programma verzendt echter niet alleen een gewone website naar de browser, maar maakt het bovendien ook mogelijk om een LED aan te sturen. Achter het huidige deurtje bevindt zich een 9V-batterijclip waarmee u het board mobiel kunt maken. Als alternatief kunt u ook een Power Bank (een accupack, normaal gezien voor mobiele telefoons) gebruiken. Wanneer u de 9V-batterij wilt gebruiken, let u op dat de rode draad met Vin moet worden verbonden en de zwarte met GND. Op het scherm ziet u de opbouw van het huidige verzoek met externe stroomverzorging. Het programma Het huidige programma zendt een ietwat complexere pagina dan het vorige verzoek. Bovendien kunt u de LED aan pin 9 schakelen door deze achter de IP van de module /LED in te voeren. De huidige toestand van de LED wordt dan omgekeerd, dus elke keer omgeschakeld (getoggeld). Voer uw WLAN-gegevens in en laad dan het programma op. De IP van het board wordt in de seriële motor weergegeven. Dan kunt u de browser openen en de IP van het board oproepen. De website heeft nu een titel een een beetje meer tekst. De tekst wijst er ook op hoe u de LED kunt sturen. Een eerste volledig autonome webserver dus.
Dag 13: Website met buttons In het huidige verzoek is de weergave van de website nog gedetailleerder. Bovendien zijn er nu ook stuurelementen, via dewelke de LED duidelijk makkelijker kan worden gestuurd. De opbouw van het huidige verzoek is niet verschillend van dat van gisteren: een LED aan pin 09 die zich via de module laat sturen. Als bijkomend onderdeel vindt u achter het kalenderdeurtje opnieuw een weerstand met 1 kΩ. Indien nodig kunt u nu de helderheid van een LED verminderen door twee weerstanden in serie te schakelen. Het programma Het huidige programma slaat de website op een ietwat andere manier op dan in het vorige programma. Terwijl gisteren de eenvoudig gehouden website in de brontekst was inbegrepen, wordt deze keer de pagina in een zogenaamde progmen-variabele opgeslagen. Dit ontlast de SRAM van het board en maakt een complexere weergave van een website mogelijk. U hebt alleszins niet meer een zo goed overzicht over de pagina. U kunt echter het HTML-bestand in de Sketch-map bekijken en, indien nodig, wijzigen. Wanneer u de website op de website tools.thebuzzmedia.com/bytechar in bytes laat omrekenen en dit in de programmavariabele invoert, hebt u een nieuwe website voor uw webserver gegenereerd.
Dag 14: Webserver voor de RGB-LED In het project van vandaag gaat het om de aansturing van de RGB-LED met behulp van een webserver. Via een overzichtelijk oppervlak kan de kleur van de LED worden gewijzigd. De website werd bovendien aangepast en moet ook smartphones goed weer te geven zijn. Achter het huidige adventskalenderdeurtje bevindt zich opnieuw een weerstand, maar dit keer met 10 kΩ (bruin, zwart, oranje). Deze zult u nodig hebben voor het verzoek van morgen. De opbouw van het huidige verzoek komt overeen met de opbouw van de tiende dag. De RGB-LED wordt via voorweerstanden aan de PWMgerede pins D3, D5 en D6 aangesloten. Het programma De overgedragen website is opnieuw in binaire vorm in de programmavariabele site verborgen. Ook dit mkeer kunt u de HTML-pagina in de Sketch-map bekijken. Na het instellen van de WLAN-bestanden en het uploaden van het programma kan de website van de webserver via de IP van de module worden bereikt. De pagina is met achtergrondkleur en een titel op gelijkaardige manier vormgegeven dan de vorige. Echter bevindt zich een nieuw element op de pagina, namelijk het HTML5-element Color Picker. Daarmee is het mogelijk, een kleur voor de LED te zoeken. Van zodra u de kleur hebt bevestigd, wordt ze door de LED weergegeven. Daarbij kan de weergave van het Color Picker element afhankelijk van de gekozen browser sterk verschillen.
Dag 15: Lichtsensor Het project van vandaag gebruikt de website van de webserver niet als stuuroppervlak, maar als uitgave-element. De via een helderheidssensor gemeten helderheid wordt als relatieve waarde overzichtelijk weergegeven. Achter het huidige deurtje bevindt zich een fototransistor die als lichtsensor dient. De fototransistor ziet er uit als een LED, maar mag niet met een LED worden verwisseld. De afbeelding toont de opbouw van het huidige verzoek. De collector van de fototransistor is de kortere aansluiting en ligt aan +5 V. Het programma Tot vandaag bestonden de websites van de webserver altijd uit een niet-veranderbare pagina, die gegevens naar de controller verzonden heeft. Vandaag moet de website voor het overdragen naar de browser worden veranderd om de gemeten helderheid van de fototransistor weer te geven. Dit werkt omdat in de broncode van de website een soort plaatshouder is verborgen. Het programma vervangt nu bij het laden van de gegevens uit de programmavariabelen de plaatshouder *bright* door de huidige helderheidswaarde. Zo wordt de uitgavetekst en de uitslag van de schuifregelaar gewijzigd. Een andere regel in het HTML-bestand zorgt ervoor dat de pagina automatisch elke paar seconden opnieuw oplaadt. De huidige helderheid wordt al overzichtelijk in de browser weergegeven.
De website van de helderheidssensor
Dag 16: GPIO control Het project van vandaag maakt het mogelijk om de digitale pins D2-D7 via de website eenvoudig aan te sturen. De status van de respectievelijke pins wordt eveneens op de website weergegeven zodat men nooit het overzicht verliest. Opdat de toestand van de pins goed kan worden gecontroleerd, is het aangewezen om een opbouw zoals deze in de nevenstaande afbeelding te volgen. Zowel de RGB-LED als de normale LED worden ingezet. De kathoden van de LED's zijn dit keer echter niet aan de lange massaleiding aan de buitenzijde van het board aangesloten, maar liggen eveneens aan een digitale uitgang aan. Alleen wanneer deze pins low geschakeld zijn, kunnen de LED's dus oplichten. De kalendermodule van vandaag is een andere kabel. Dit maakt het mogelijk om de LED weg van het board te leggen. U kunt het board nu bijvoorbeeld in een behuizing in bouwen en de LED naar buiten leggen. 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. Het programma De website van het huidige programma gebruikt zogenaamde checkboxes als HTML-element. Wanneer u het programma oplaadt en de pagina van het board oproept, ziet u een reeks aanklikbare boxes. Een haakje in de box betekent dat de pin high is. Geen haakje betekent low. U kunt nu proberen welke pins high en welke low moeten zijn opdat alle LED's oplichten.
Dag 17: IR-module Het project van vandaag maakt de sturing van de controller via afstandsbediening mogelijk. Met toetsen die u zelf kunt kiezen op een infrarood afstandsbediening van uw keuze kunt u de kleur van de RGB-LED veranderen net zoals de achtergrondkleur van de website. Achter het huidige deurtje bevindt zich de voor het huidige project belangrijke module, namelijk de infrarood ontvangstmodule. U kunt de module zoals op de onderste afbeelding helemaal zonder kabel aansluiten. Het programma zet de overeenkomstige pins zo dat de module van stroom wordt voorzien.
Het programma Het programma van vandaag gebruikt opnieuw een externe library, en wel de IRremote-Library van Ken Shiriff. Een kopie van de door mij gebruikte versie bevindt zich opnieuw in de Sketch-map en moet alleen in de library-map van uw Sketchbook worden gekopieerd. Nadat het programma is geüpload moet u de Serial Monitor starten. Zoek een afstandsbediening en richt deze op de module. Wanneer u op een toets drukt, moet u in de monitor de waarde van het signaal als HEX-code en het type van het protocol als getal uitgegeven ontvangen. Wanneer als type -1 verschijnt, werd het protocol niet herkend. Het kan ook tot meerdere foute verzoeken komen tot een commando juist wordt gedecodeerd. Dus probeert u gewoon enkele keren of probeert u een andere afstandsbediening. Als u een passende hebt gevonden, kiest u zes toetsen (het best neemt u Power, luider, zachter, kanaal +, kanaal - en mute). De codes van de zes commando's moet u nu in het programma achter de zes #define irComX kopiëren (het 0x voor de hexcode niet vergeten). Daar zijn de commando's van een LG-TV-afstandsbediening voorgedefinieerd. Wanneer u de codes correct hebt ingevoerd, kunt u het programma opnieuw opladen. Met de door u gedefinieerde toetsen kunt u nu de kleur van de RGB-LED wijzigen. Wanneer u de boardzijde actualiseert, zult u bovendien zien dat de kleur is veranderd.
Dag 18: Universele afstandsbediening Gisteren hebt u een ontvanger voor infrarood afstandsbedieningen gebouwd. Vandaag bouwt u zo te zeggen de afstandsbediening zelf. Of beter gezegd, u knutselt een via computer of smartphone bedienbare universele afstandsbediening waarmee u uw televisietoestel of andere apparaten kunt sturen, ook wanneer u de originele afstandsbediening niet kunt vinden. Opdat u met het project kunt beginnen, hebt u de module nodig die zich achter het huidige deurtje bevindt, de IR-diode. Ze ziet er als een gewone LED uit, maar ze stuurt licht in een onzichtbaar infraroodbereik uit. De IR-signalen zijn echter voor een digitale camera zichtbaar. De opbouw van de huidige dag vindt u in de afbeelding. Wees niet verbaasd dat de IR-LED geen voorweerstand krijgt. De effectieve voorweerstand is alleen de On-weerstand van de port van ca. 30 Ohm. Zo is de stroom door de diode groot, de verzonden impulsen zijn echter zo kort dat de diode niet beschadigd raakt. Het programma Voor het project kan werken, moet u opnieuw enkele aanpassingen uitvoeren. Wanneer u gisteren de codes Power, luider, zachter, kanaal +, kanaal - en mute hebt gekozen en gebruikt, kunt u de codes gewoon volgens de rij in de Array irCommand invoeren. Indien niet, moet u het programma van gisteren opnieuw inspelen en de passende codes uitlezen. U kunt natuurlijk ook helemaal andere codes nemen, maar het opschrift op de website past dan niet meer daarbij. Naast de codes moet u ook het gebruikte protocol in de variabele irProtokoll invoeren als uw afstandsbediening wordt ondersteund. Tot slot moet u nog de lengte van het te verzenden signaal invoeren. Dit bepaalt u door de plaatsen van de hex-code met vier te vermenigvuldigen. Bijvoorbeeld: Mijn code voor Power was 0x20DF10EF. 0x is gewoon het teken voor een hex-code, waardoor 20DF10EF overblijft en zo een hex-code van acht tekens. 8•4 = 32, dus staat in het voorbeeldprogramma achter de variabele irLen een 32. Een gelijkaardige rekensom moet u uitvoeren voor een code die een andere lengte heeft. Wanneer u alle codes en parameters en natuurlijk ook hun WLAN-gegevens hebt ingevoerd, kunt u het programma uploaden. De website van het board bevat nu zes buttons met passende omschrijving. Wanneer u een van de buttons activeert, moet een melding via de Serial Monitor verschijnen en moet uw televisietoestel of ander apparaat passend op het signaal reageren. Indien niet, moet u eventueel even nakijken of controleren of de IR-diode überhaupt iets verzendt. Een verkeerd verpoolde LED is, vb een reden waarom het project niet zoals gewenst functioneert.
Dag 19: ThingSpeak In de laatste dagen van de adventstijd houden wij ons bezig met een geheel nieuw thema, namelijk de website ThingSpeak. Deze site werd speciaal voor het thema Internet of Things ontwikkeld en stelt verschillende praktische functies ter beschikking. Voor u dus zoals gewoonlijk met de opbouw en het programma begint, moet u een 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 weergeeft. Aangezien u nog geen kanalen hebt, zal deze pagina er leeg uitzien. Klik op New Channel en geef dan een naam, vb. Light, want u zult in dit project de helderheid meten. Onder het punt Field1 kunt u nu nog een naam voor het veld geven, evt. Brightness. Alle andere velden kunnen voorlopig leeg blijven. 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. Achter het huidige deurtje vindt u opnieuw een kabel. U kunt nu ook driebenige onderdelen, zoals de IR-ontvangstmodule weg van het
steekboard plaatsen. De opbouw van het huidige verzoek is identiek aan de verzoeksopbouw van de 15e dag. Een spanningsdeler met 10-kΩweerstand en fototransistor maakt het meten van de huidige helderheid mogelijk.
De opbouw met fototransistor aan A0
Het programma Het huidige programma meet, net zoals het programma van de 15e dag, de helderheid. Echter, anders dan in het vorige verzoek worden de gegevens rechtstreeks naar de ThingSpeak-pagina verzonden. Deze pagina slaat de gegevens niet alleen op, maar geeft ze ook overzichtelijk in een diagram weer. Een zeer praktische functie voor een meetstation met langdurige bewaking. Opdat het programma naar de website kan zenden, moet u behalve uw WLAN-gegevens eerst de bovenvermelde API-key onder het punt ThingSpeakKey in het programma invoeren. Na het uploaden is het aangewezen om de Serial Monitor te openen. In regel moet een UpdateSend-bericht de succesvolle overdracht begeleiden. Op de ThingSpeak-pagina kunt u nu opnieuw op de driver Private View van uw kanaal klikken. Daar ziet u het diagram van uw channel dat elke 15 seconden nieuwe gegevens ontvangt.
Dag 20: Twitch De website ThingSpeak biedt wat meer dan enkel de langdurige bewaking van sensoren. Het huidige project is in zijn basisidee gelijkaardig aan de projecten van dag 9 en 10. Er wordt namelijk informatie van een website uit het internet gehaald. In dit geval gaat het erom of een bepaalde stream al of niet on-line is. Daarbij zijn er twee belangrijke voordelen van de ThingSpeak-variant tegenover de eerste verzoeken. Ten eerste kunnen via de ThingSpeakpagina ook websites via HTTPS (HyperText Transfer Protocol Secure) worden aangesproken, terwijl de module alleen het onveilige HTTPprotocol ondersteunt. Ten tweede kan de website belangrijke informatie voorfilteren en zo de door de controller te bewerken gegevenshoeveelheid duidelijk verminderen. In het huidige project zult u een Twitch-Streaming-weergave realiseren als voorbeeld voor verschillende mogelijkheden. Twitch is een website waarop live games of informatie rond het thema computerspelletjes wordt gestreamd. Een van de bekendste streamingchannels heet RocketBeansTV van de voormalige GameOne-maker, die permanent uitzendt en daarom goed geschikt is voor een eerste test. Later kunt u natuurlijk een kanaal naar keuze instellen. 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. Vandaag concentreren we ons op de ThingHTTP-app. Wanneer u op de overeenkomstige button klikt, krijgt u eerst een leeg oppervlak te zien. Klik op New ThingHTTP. In het formulier dat nu verschijnt, voert u het volgende in: Naam:
Twitch
URL:
https://api.twitch.tv/kraken/streams?channel=rocketbeanstv
Methode:
GET
HTTP-versie:
1.1
Parse String:
_total
Indien u voorkeur heeft voor een andere streamer, kunt u in het URL na channel een ander kanaal invoeren. Klik op Save ThingHTTP en kopieer vervolgens de in het overzicht verschijnende API-key in de tussenopslag. De Key moet u nu in het programma kopiëren, na #define ThingHTTP De WLAN-gegevens niet vergeten en u kunt het programma uploaden. Eenmaal per minuut wordt nu gecontroleerd of er een stream kan worden gevonden. Als dit het geval is, begint de LED op te lichten.
Dag 21: Alarminstallatie Bij het project van vandaag gaat het om een alarminstallatie waarmee u bijvoorbeeld kunt controleren, of iemand ongevraagd een lade opent. Er wordt constant gecontroleerd of er op de aangesloten lichtsensor te veel licht valt. Als dit het geval is, weerklinkt een alarmsignaal en wordt er bijkomend een bericht via Twitter verstuurd. Achter het deurtje van vandaag bevindt zich een Piezo-luidspreker die als alarmsignaalgever wordt gebruikt. De opbouw van de huidige dag vindt u in de afbeelding. Het programma Thema van vandaag is onder andere de Twitter-app van de ThingSpeak-site. Kik dus op Apps en vervolgens op ThingTweet. Met een klik op de 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 bewerken van de adventskalender. Nadat Twitter met succes aan ThingSpeak werd gekoppeld, kunt u de API-key die onder de Apps-ThingTweet staat in het huidige programma na het punt #define TwitterKEY invoeren. Het programma controleert nu permanent of de gemeten helderheid een waarde van 500 overstijgt. Als dit het geval is, wordt een Twitter-bericht verzonden en weerklinkt een alarm tot de helderheid opnieuw onder de 500 zakt. De huidig gemeten helderheidswaarde kunt u via de Serial Monitor volgen. Voor de eerste verzoeken raad ik aan om de lichtsensor af te dekken zodat het alarm niet voortijd wordt geactiveerd.
Dag 22: TalkBack In het huidige 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. Enkele boards kunnen dan als sensoren functioneren, bijvoorbeeld met bewegingsmelders, en bij het ontdekken van een beweging een TalkBack-commando verzenden. Een bijkomende module leest het commando van de ThingSpeak-site en opent dan de deur of meldt alarm. Achter het huidige deurtje vindt u een bijkomende drukknopschakelaar. De opbouw van het huidige verzoek bestaat uit een LED met voorweerstand en twee drukknopschakelaars, zoals op de afbeelding te zien is. Het programma Eerst moet onder APPS – TalkBack een nieuw TalkBack-kanaal worden aangemaakt. Wanneer u wilt, kunt u de commando's ook in een channel invoeren. Dit kan het reeds op de 19e dag aangemaakte Light-kanaal zijn of ook een eigen kanaal. Alle commando's worden dan geprotocolleerd. De API-key, die u in de plaats #define TalkBackKEY invoert, is vooral van belang. Bijkomend bij de API-key is deze keer ook een ID nodig die u in het overzicht onder TalkBackID vindt, nadat u op Save-TalkBack hebt geklikt. Voer hier #define TalkBackID in het programma in. 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.
Dag 23: Cheerlights Het huidige 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 dat de wereld met het internet altijd dichter bij elkaar komt. Achter het huidige deurtje bevindt zich een vierde verlengkabel waarmee ook de RGB-LED weg van het board kan worden geplaatst. Dit kan bijzonder praktisch zijn wanneer u bijvoorbeeld het board in de kerstboom wilt verbergen terwijl de RGB-LED de kruin van de boom versiert.
Het programma Voor het huidige programma moet u bij uitzondering geen eigen ThingSpeak-wijzigingen uitvoeren aangezien het project een openbaar kanaal hebt, dat u onder de link https://thingspeak.com/channels/1417 vindt. Op de site vindt u bovendien altijd de huidige kleur en meer informatie over het project. Voor het programma is bovendien de Crossfrade Library van Radek Wierzbicki nodig (bron: https://github.com/radekw/Arduino/tree/5f24ce7c8db9dfbb5252b59824c3217d851b3a3c). Omwille van praktische redenen bevat de Sketchmap een kopie van de door mij gebruikte Library-versie. Deze moet in de Libraries-map van uw Sketchbook-map worden gekopieerd De Library maakt het mogelijk om snel en eenvoudig kleuren te definiëren en zorgt er bovendien voor dat de LED's langzaam naar een andere kleur overgaan (fade genoemd). Wanneer u nu het programma uploadt, wordt na een paar seconden de huidige kleur van de LED weergegeven. U kunt nu een Twitter-bericht opmaken en zo uw en ook de kleur van alle andere Cheerlights-gebruikers wijzigen. Het bericht moet enerzijds #Cheerlights, @Cheerlights of gewoon het kernwoord Cheerlights bevatten en anderzijds moet een van de voorgedefinieerde kleuren achter het kernwoord staan. Bij de voorgedefinieerde kleuren horen: red, green, blue, cyan, white, warmwhite, purple, magenta, yellow, orange, pink Een mogelijke tweet is dus: Testing my #cheerlights project on my #NanoESP with the color blue #ThingSpeak #IoT of iets gelijkaardigs. U hebt al de hele wereld een nieuwe kleur gegeven.
Dag 24: Brandmelder voor de kerstboom Het afsluitende project bestaat uit meerdere elementen die u in de loop van de adventstijd hebt leren kennen. Een functie is op de voorgaande dag voorgestelde Cheerlights-functie. U kunt verder de huidige kleur van het Cheerlights-project ontvangen en met de RGB-LED weergeven. Bovendien wordt het board ingezet voor een langdurige bewaking van de temperatuur. Tegelijk kan het board een alarmsignaal uitgeven wanneer de temperatuur een bepaalde waarde overschrijdt, vb. omdat er brand ontstaat. En als laatste functie kan het board als kerstklok worden gebruikt omdat het via een tijdsgestuurd TalkBack-commando ertoe gebracht wordt, het lied Jingle Bells te spelen. Alles samen is het huidige project een all-rounder voor de kerstboom. Achter het huidige deurtje bevindt zich nog een echt spannende sensor, namelijk een NTC (Negative Temperature Coefficient). Deze wijzigt zijn weerstand afhankelijk van de temperatuur. Het loont zich dus om een paar oudere verzoeken opnieuw uit te rollen en dit keer de temperatuursensor te gebruiken. De huidige opbouw bestaat uit veel elementen. Ook de Poti wordt opnieuw gebruikt om een fijne afstelling aan de NTC te kunnen uitvoeren. Anders kunt u ook de 10-kΩ-weerstand gebruiken, dan is er alleszins geen fijnafstelling mogelijk. Het programma Het finale programma moet de vele verschillende elementen 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. Via de Time-Controle-app van ThingSpeak-site kunt u bovendien een tijdstip vastleggen waarop de familie met het Jingle Bells lied naar de kerstboom wordt geroepen of u de volgende dag met de muziek wilt worden wakker gemaakt. In de eerste stap moet u op de ThingSpeak-site een nieuw kanaal aanmaken. Dit kunt u bijvoorbeeld FireAlarm noemen. Het field1 krijgt dan de omschrijving Temp. Onder de API-key is de eerste sleutel die u voor ThingSpeakKEY moet invoeren. Zo wordt reeds de overdracht van de huidige temperatuurwaarde gegarandeerd. Als tweede stap moet u een nieuw TalkBalk-element aanmaken. Als naam kunt u bijvoorbeeld Alarm gebruiken. Bovendien kunt u de commando's in het Channel FireAlarm laten loggen. De API-key moet u na TalkBackKEY en de ID na TalkBackID invoeren. Nu kunt u ook reeds commando's naar het board verzenden. U kunt commando's ook manueel invoeren door in het TalkBack-overzicht de Alarm-channels op Add a new Command te klikken en daar onder Command String ofwel Alarm ofwel Jingle in te voeren. Het is niet nodig de positie aan te geven aangezien het bevel automatisch op de eerste plaats wordt opgeslagen. U kunt het programma nu reeds uploaden 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 het poti 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. Met React kan op bepaalde gebeurtenissen worden gereageerd. Maak een nieuwe React-functie aan door op New React te klikken en voer de volgende waarden in: Naam: FireDetect1 Condition Type: Numeric Test Frequency: On Data Insertion Condition: If Channel FireAlarm field 1 (Temp) is great than 40 Action: ThingTweet then tweet: Fire Alarm on the #NanoESP! Temp: %%trigger%%C #ThingSpeak #IoT Using Twitter Account [Twitter Account] Options: Run action only the first time the condition is met Met Save React slaat u de instellingen op. Daarmee is de eerste stap van de bewaking reeds uitgevoerd. Wanneer de waarde wordt overschreden, zendt ThingSpeak via uw account een Twitter-bericht. Voor de tweede stap, het invoeren van het alarmcommando, moet u nog een beetje dieper in de trukendoos grijpen, aangezien de functie niet automatisch wordt ondersteund. Wat ondersteund wordt, is ThingHTTP. Klik dus op Apps en dan op ThingHTTP. Daar maakt u een nieuw element aan en stelt u het volgende in. Naam: Alarm URL: https://api.thingspeak.com/talkbacks/[YOUR TALKBACK ID]/commands Method: POST HTTP Version: 1.1 Host: api.thingspeak.com Headers: Body: api_key=[YOUR TALKBACK 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 TalkBack-KEY vervangt. Nu kunt u een ander React-element aanmaken dat dezelfde parameters zoals de eerste bevat, maar met dit verschil dat u bij Action alleen ThingHTTP en daar het punt Alarm selecteert. Daarmee hebt u gegarandeerd dat een alarm weerklinkt wanneer de kritische waarde overschreden wordt. Als laatste functie kunt u een tijdsgestuurde Jingle Bells instellen. Daarvoor klikt u onder Apps op TimeControl en maakt u een nieuw element, vb. met de naam Bell aan. Daar voert u de volgende instellingen uit: Naam: Frequency: Time Zone: Run At: Fuzzy Time: TalkBack:
Presents One Time Berlin 2015-24-12 7:00 pm ± 0 minutes Alarms, add command: Jingle
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. Bovendien kan men het project met de 9V-batterijclip of ook een accubank mobiel maken. Wanneer het board in de kerstboom wordt verborgen zodat alleen de RGB-LED op het passend moment uit de mouw komt, wordt de sfeer ook niet onnodig gestoord. En stipt om 19.00 uur worden alle familieleden door de melodie van de Jingle Bells naar de boom geroepen. Ik wens u een vrolijk kerstfeest!