Stap 10: De software voor de ESP8266 module - deel 3 "Setup en loop"
Setup
De Setup-functie wordt aangeroepen eenmaal na de ESP8266 bootet. Hier geef je de functie van de GPIO pinnen, verbinding maken met de lokale WiFi, de seriële verbinding initialiseren en start de HTTP-server te ontvangen.
Ik start alleen op de "meester" module ook een timer, die om de 60 seconden een update van het stroomverbruik (meer hierover in de volgende stap start).
WiFi-verbinding
Om gemakkelijker te identificeren van verschillende ESP8266 modules die heb ik besloten om het gebruik van statische IP-adressen in plaats van met behulp van de DHCP-functie van mijn WiFi-router.
Range 192.xxx.xxx.000 to 192.xxx.xxx.119 => DHCP assigned IP addresses for my PC's and laptops Range 192.xxx.xxx.120 to 192.xxx.xxx.129 => IP address range used by my phones and tablets (static IP address) Range 192.xxx.xxx.140 to 192.xxx.xxx.150 => Home automation, this range is used by my Arduino and ESP8266 modules 192.xxx.xxx.140 => Solar panel monitoring system 192.xxx.xxx.141 => Security system 192.xxx.xxx.142 to 192.xxx.xxx.148 => ESP8266 modules for appliances control
Om te verbinden met een statisch IP-adres, moeten enkele bijkomende parameters worden gebruikt met WiFi.config():
WiFi.mode(WIFI_STA);<br> WiFi.config(ipAddr, ipGateWay, ipSubNet); WiFi.begin(ssid, password); Serial.print("Waiting for WiFi connection "); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); }
ipAddr = > de ipAddr toegewezen aan deze module
ipGateWay = > de standaard-gateway (meestal het IP-adres van de router)
ipSubNet = > de IP-masker voor alle lokale IP-adressen, in mijn geval 255.255.255.0
WAARSCHUWING - Arduino OTA functie
De Arduino ESP8266 bibliotheken bieden ook een OTA-functie (software-update via WiFi). Dit zou een aardige functie mijn ESP8266 modules bijwerken zonder de verbinding tot stand brengt hen seriële verbinding met de PC.
Helaas is mijn ervaring met deze functie is zeer slecht. In 70% van mijn proeven de overdracht van de nieuwe software via WiFi was beschadigd en na Reset de module was opknoping en reageert niet. Alleen een reflash via seriële verbinding bracht hen terug naar werk.
Ik heb de OTA-functie in mijn code, maar ik gebruik het niet meer. Hopelijk met een latere update van de ESP8266 bibliotheken de OTA zullen functie betrouwbaarder.
loop
De loop-functie is het hoofdprogramma lus (zoals de naam al zegt). Hier controleren ik als een nieuwe klant heeft verbonden via WiFi, wanneer een opdracht is ontvangen via seriële verbinding of (alleen voor de "meester" module) als een update van het energieverbruik heeft teweeggebracht (meer hierover in de volgende stap.