ESP8266 en ESP32¶
De ESP8266 is een microcontroller die speciaal voor IoT-toepassingen veel mogelijkheden heeft. Naast de gebruikelijke microcontroller-aansluitingen (binaire en analoge in- en uitgangen, en seriële bussen zoals I2C en ISP), beschikt de ESP8266 over een WiFi radio. Je kunt de ESP8266 als WiFi client en als WiFi base station gebruiken. De nieuwere ESP32 heeft daarnaast ook nog Bluetooth-radio, en is geschikt voor Bluetooth LE. Bovendien heeft de ESP32 meer low-power mogelijkheden: dit is belangrijk voor IoT-knopen met batterijvoeding.
Je kunt de ESP8266 (en de ESP32) programmeren via de Arduino IDE. Een andere mogelijkheid is microPython.
(We beschrijven eerst de voorbeelden voor de Arduino-IDE. In een latere versie werken we deze uit in microPython. Een belangrijke reden hiervoor is dat de Arduino-omgeving nu nog stabieler is dan de microPython-omgeving.)
Enkele belangrijke informatiebronnen voor de ESP8266/ESP32:
- ESP8266 community forum
- ESP8266 tutorial (zeer uitgebreid)
- tutorial: https://developers.wia.io/v1.0/docs/espressif-esp8266 (check)
ESP8266 hardware¶
Er zijn verschillende bordjes beschikbaar voor de ESP8266. Als voorbeeld gebruiken we de WeMos D1 mini pro. Dit is een klein formaat bordje met alle relevante aansluitingen. Bovendien biedt WeMos een reeks andere bordjes aan met sensoren, display, e.d. We gebruiken dit om gemakkelijk een IoT-knoop samen te stellen.
Geschikte bordjes zijn:
- WeMos D1 mini: https://wiki.wemos.cc/products:d1:d1_mini_pro.
- WeMos D1 mini: https://wiki.wemos.cc/products:d1:d1_mini
- NodeMCU (v1 of hoger): (p.m.)
- Adafruit Feather Huzzah ESP8266: https://www.adafruit.com/product/2821
- Adafruit Feather Huzzah8266: http://www.adafruit.com/products/2821
- Adafruit Feather Huzzah32: https://www.adafruit.com/product/3405
In de Arduino IDE moet je aangeven welk bordje je gebruikt, met onder andere de grootte van het Flash geheugen.
ESP8266 - USB driver¶
De WeMos D1 mini pro gebruikt een CP2104 USB-naar-serieel converter. Hiervoor heb je een driver nodig. Deze vind je op: https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers Download de versie voor je eigen OS, en installeer deze.
Je kunt de werking als volgt controleren, in de Arduino IDE. Sluit hiervoor een (voorgeprogrammeerd) WeMos D1 mini pro bordje aan via een USB-poort.
- selecteer in de Arduino IDE de juiste poort: Hulpmiddelen -> poort
- selecteer Hulpmiddelen -> Seriële Monitor, en stel de baudrate in op 115200
- reset het WeMos-bordje (reset button)
- in het venster van de Seriële Monitor zie je nu tekst verschijnen.
SPI-Flash filesysteem (SPIFFS)¶
Veel ESP8266-bordjes hebben een extra Flash-geheugen als programma-geheugen. Dit geheugen kan ook gebruikt worden als filesysteem (SPIFFS). Bij het programmeren van het bordje via de Arduino IDE geef je (bij de bord-instellingen) aan welk deel als je als programmageheugen wilt gebruiken, en welk deel als filesysteem.
Dit filesysteem gebruiken we voor het opslaan van de configuratie (WiFi/MQTT). Bij het programmeren moet je dan voldoende ruimte voor het filesysteem reserveren. Enkele kilobytes is voldoende; in veel gevallen kun je alleen 1MB als minimum opgeven, bijvoorbeeld 4M (1M SPIFFS).
ESP32 hardware¶
De ESP32 is de uitgebreide opvolger van de ESP8266. Deze omvat naast de WiFi-radio ook een BLE-radio (Bluetooth Low Energy). Om energie te sparen heeft deze een extra “low power processor”, waardoor het gemakkelijker is om een systeem met batterijvoeding te maken. Bovendien heeft deze nogal wat extra aansluitingen: waar je bij de ESP8266 soms te weinig aansluitingen hebt, zal dat bij de ESP32 minder snel het geval zijn.
De PyCom LoPy heeft naast WiFi en BLE bovendien een LoRa-radio: deze kun je gebruiken voor een LoRaWan-netwerk zoals TTN.
- WeMos LoLin D32 (Pro): https://wiki.wemos.cc/products:d32
- Adafruit HUZZAH32 ESP32 Feather: https://www.adafruit.com/product/3405
- PyCom LoPy, WiPy enz.: https://pycom.io/hardware/
Filesysteem (SPIFFS)¶
Zie de opmerkingen bij de ESP8266; ook veel ESP32-bordjes hebben een extra SPI-Flash-geheugen.
Lokaal WiFi netwerk¶
De ESP8266 heeft beperkte mogelijkheden om met een lokaal WiFi-netwerk te communiceren. Er zijn alleen voorzieningen voor netwerktoegang via de netwerknaam (SSID) en een netwerkwachtwoord (PSK, pre-shared key). Dit betekent dat de ESP8266 niet geschikt is voor WiFi-netwerken met toegang via een gebruikersnaam en een persoonlijk wachtwoord (WPA2-Enterpripse, PEAP). Veel scholen gebruiken een dergelijke WiFi-beveiliging.
Mogelijke oplossingen om de ESP8266 in de schoolomgeving te gebruiken:
- gebruik een apart WiFi base station, aangesloten op het lokale netwerk (in overleg met systeembeheer);
- gebruik een MiFi: WiFI-base station met 3G/4G-mobiele verbinding. (IoT-knopen gebruiken niet veel data: je hebt aan een abonnement met beperkt dataverkeer waarschijnlijk voldoende.)
N.B. de ESP32 heeft meer mogelijkheden voor WPA2-enterprise: dit werken we later uit.