IoT-0/Knoop met webserver
Inleiding
Sommige apparaten beschikken over een webserver waarmee je het apparaat kunt bedienen. Voorbeelden hiervan zijn een (thuis)router en een netwerkprinter. Via de browser van een computer of smartphone bedien je het apparaat op afstand.
In de figuur zie je het interface van een netwerkprinter, als webpagina. Via de browser kun je de status en de instellingen van de printer bekijken en aanpassen. De webserver biedt een uitgebreid gebruikersinterface; het apparaat zelf kan dan met een eenvoudig interface volstaan, met een paar knoppen en eventueel een klein schermpje.
De ingebouwde webserver gebruikt de standaardprotocollen van het internet en van het web: HTTP (over TCP) voor de communicatie, waarbij het gebruikersinterface de vorm heeft van een HTML-document. De interactie tussen de browser en de webserver is een client-server interactie, via het HTTP-protocol. De client (browser) stuurt een HTTP request (bijv. GET) met een bepaald URL-pad naar de webserver; de webserver stuurt als respons een HTML-document terug, dat de browser vervolgens weergeeft voor de gebruiker.
Enkele eigenschappen van deze aanpak
- het apparaat is verbonden in het lokale netwerk
- draadloos (via WiFi) of bedraad (Ethernet)
- het apparaat (de IoT-knoop) moet permanent in het (lokale) netwerk verbonden zijn
- dit is geen probleem voor apparaten met een netsnoer, voor batterij-apparaten is dit wel een probleem.
- het apparaat is alleen binnen het lokale netwerk te bedienen
- je moet het IP-adres of de lokale domeinnaam (zeroconfig) van het apparaat kennen
- de client (browser of een andere computer) moet de gegevens actief van de webserver halen ("pull")
- de client-server interactie via HTTP is een "pull" interactie
Inleiding bij de opdrachten
In de opdrachten gebruiken we een IoT-knoop met daarop een webserver. Via een computer (browser) in hetzelfde netwerk als deze IoT-knoop maak je contact met deze webserver: daarmee kun je toestand (sensorwaarden) van de IoT-knoop opvragen, en de actuatoren (LEDs) van de knoop besturen.
Wat heb je nodig?
- IoT-knoop met webserver
- computer of smartphone met browser, verbonden in het lokale netwerk
Opdracht (1): IoT-knoop met webserver voor het aansturen van een LED
In het eerste voorbeeld gebruiken we eenvoudig ding (IoT-knoop) met een webserver voor het aansturen van een LED.
- je hebt een IoT-knoop nodig met een LED en de
LED-webserver-0
-software. - zorg ervoor dat deze knoop verbonden is in het lokale (WiFi) netwerk.
- zoek uit wat het IP-adres is van de IoT-knoop; hierbij heb je het MAC-adres van de IoT-knoop nodig.
- vraag dit aan degene die de knoop geconfigureerd heeft;
- of gebruik de lokale domeinnaam, in het geval van Bonjour/zero-config (mDNS):
- de lokale domeinnaam is
esp8266-xxxx.local
, waarin xxxx de laatste 4 cijfers van het MAC-adres zijn.
- voer dit adres in in het URL-venster van je browser;
- je krijgt nu het html-document van de webserver te zien.
- via de "knoppen" (links) in dit html-document kun je de LED aan- en uitschakelen.
Het MAC-adres van de IoT-knoop is het hardware-adres van het WiFi-interface. Dit adres is vast onderdeel van het apparaat, en is wereldwijd uniek. Een WiFi-MAC-adres is een 48-bits adres, geschreven als een reeks van 6 bytes in hexadecimale notatie: 00:00:00:00:00:00
Bestudeer de programmatekst van de IoT-knoop
In de programmatekst van de IoT-knoop kun je zien hoe de server een verzoek afhandelt, en op basis van het URL-pad beslist welke actie op de LED plaatsvindt.
- welke functie bevat de tekst van de webpagina?
- welke functie wordt aangeroepen bij een request met URL
/
? - welke functie wordt aangeroepen bij een request met URL
/ledon
? - welke functie wordt aangeroepen bij een request met URL
/ledoff
? - wat gebeurt er als je een onbekende URL invoert?
- geef daarbij eventueel parameters mee, bijvoorbeeld "?x=123&y=groen"
Experimenten
- bestudeer de brontekst van het html-document, via de browser webtools, bronbestanden-sectie.
- ga via de browser webtools na wat het IP-adres is van de webserver (netwerk-sectie, "headers"/"kopteksten" gedeelte)
- soms krijg je meer informatie als je op de naam van het document klikt
- uit hoeveel tekens (bytes) bestaat het brondocument?
- welke URL wordt gebruikt voor het inschakelen van de LED? welke voor het uitschakelen?
- je kunt de webserver benaderen via het IP-adres of via de lokale domeinnaam.
- ga na (via de browser webtools, netwerk-sectie) of dit verschil uitmaakt in de totale tijd tussen aanvraag en resultaat.
Opdracht (2): webserver voor het uitlezen van sensor-waarden
We kunnen via de webserver ook de waarden van de sensoren in de IoT-knoop uitlezen. Deze kunnen we als getallen beschikbaar maken, maar we kunnen ook kiezen voor een grafische weergave, bijvoorbeeld in de vorm van een dashboard.
- hiervoor heb je een knoop nodig met de
sensor-webserver-0
-software. - elke keer als je de webpagina ververst krijg je de actuele sensorwaarden te zien.
- je krijgt veranderde sensorwaarden niet automatisch te zien: je moet daarvoor de webpagina verversen.
- dit verversen kun je wel automatiseren, maar dat verandert niets aan het principe: de client vraagt aan de server wat de actuele toestand is.
- regelmatig de toestand opvragen heet ook wel "polling"; dit staat tegenover het wachten op een bericht met een veranderde toestand.
Opdracht (3)
Zoek een apparaat in je omgeving dat via een webinterface bediend kan worden. Enkele suggesties: router; netwerkprinter; IoT-gateway (zoals de Hue Bridge). Maak een schermafdruk van een bedieningspagina van dit apparaat.
- wat zijn de karakteristieken van dit apparaat?
- is de webserver altijd online?
- hoe kun je de webserver vinden?
- hoe krijg je veranderingen in de toestand van het apparaat gemeld?
- moet je daarvoor de pagina in de browser verversen?
Toetsvragen
- waarom kun je de IoT-knoop alleen in het lokale netwerk benaderen?