Vandaag heb ik mijn EXIN Databases en SQL Foundation certificaat behaald.
![](https://www.dennisbor.com/wp-content/uploads/2019/02/EXIN_Badge_ModuleDatabasesSQL_TheFoundationSeries.png)
isImpossible ? letsTryIt() : letsDoIt();
Vandaag heb ik mijn EXIN Databases en SQL Foundation certificaat behaald.
Laatst bijgewerkt op 26 maart 2019.
Dit document beschrijft de momenteel beschikbare HTML requests en de daarbij behorende waarden:
/findSlave
Methode: GET
Zoekt naar het eerst beschikbare (en compatibel) apparaat op de I2C bus en toont status, hardware-adres, aantal sensoren en aantal schakelbare stekkers of een foutstatus. De ESP fungeert als master en het andere apparaat (bijvoorbeeld een Arduino Uno) als slave.
Uitvoer:
{
"status":"ok",
"address":16,
"sensors":1,
"outlets":0
}
/getAdmin
Methode: GET
Toont de gebruikersnaam van de webinterface. Het wachtwoord wordt uiteraard om veiligheidsredenen niet getoond.
Uitvoer:
{
"username":"admin"
}
/setAP
Methode: POST
Stelt SSID en passphrase van het eigen access point in.
Het SSID wordt gecontroleerd op juistheid:
De passphrase wordt gecontroleerd op juistheid:
Vereiste parameters:
Optionele parameters:
Uitvoer:
{
"status":"ok"
}
/getAP
Methode: GET
Toont de SSID van het eigen access point.
Het wachtwoord wordt uiteraard om veiligheidsredenen niet getoond.
Uitvoer:
{
"ap_ssid":"DennisBor-IoT"
}
/getAPI
Methode: GET
Toont informatie over de verbinding met de DennisBor IoT API.
Uitvoer:
{
"api_status": 1,
"api_url": "api.dennisbor.com",
"api_key": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"api_secret": "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy",
"sha1_fingerprint": "00 11 22 33 44 55 66 77 88
99 AA BB CC DD EE FF 00 11 22 33",
"sha1_bypass": 0
}
/setAPI
Methode: POST
Slaat de opgegeven instellingen voor verbinding met de DennisBor IoT API op. Er vindt controle plaats op lengte van API-key, API-secret en SHA1-fingerprint. Er vindt controle plaats op juistheid van het formaat van de SHA1-fingerprint. Indien er een fout optreedt, dan krijgt de uitvoer een extra parameter “errno”.
Vereiste parameters:
Optionele parameters:
Uitvoer:
{
"status": "ok"
}
of
{
"status": "no",
"errno": 5
}
Mogelijke foutcodes:
/setWifi
Methode: POST
Probeert te verbinden met het opgegeven access point en stelt deze, indien gelukt, in als standaard. Indien de verbindingspoging mislukt, dan wordt teruggevallen op het laatst bekende netwerk.
Vereiste parameters:
Uitvoer:
{
"status":"ok"
}
/getWifi
Methode: GET
Toont de instellingen van het access point waarmee verbinding wordt gemaakt. Het wachtwoord wordt uiteraard om veiligheidsredenen niet getoond.
Uitvoer:
{
"ssid":"DennisBor-IoT",
"connection_attempts":25,
"mdns_hostname":"dennisbor_iot"
}
/listWifi?performscan=true
Methode: GET
Zoekt naar beschikbare WiFi netwerken en toont het aantal gevonden netwerken. De reden dat niet direct alle netwerkgegevens getoond worden, is dat de ESP8266 beschikt over een zeer beperkt geheugen. Wanneer er een groot aantal netwerken gevonden zou worden, zou dit na genereren van een grote JSON-string resulteren in een crash.
Uitvoer:
{
"count":15
}
Na deze functie kan ‘/listWifi?getnetwork=<index>’ aangeroepen worden, om per netwerk informatie te laden.
/listWifi?getnetwork=<index>
Methode: GET
Toont informatie van het opgegeven netwerk. Netwerken worden geïdentificeerd met nummers, waarbij het eerste nummer index 0 krijgt. Bij een netwerkaantal van 15 zijn indices 0-14 toegestaan. Deze functie kan pas aangeroepen worden na ‘/data_listwifi?performscan=true’.
Uitvoer:
{
"ssid":"DennisBor",
"channel":11,
"rssi":-52,
"security":4
}
/login
Methode: POST
Probeert in te loggen aan de hand van opgegeven POST-gegevens en zal, afhankelijk van of inloggen gelukt is, pagina index.html laden of anders een ‘401: unauthorized’ foutmelding geven.
Vereiste parameters:
Deze functie heeft geen uitvoer.
/logout
Methode: GET
Logt de gebruiker uit, waarna pagina login.html geladen wordt.
Deze functie heeft geen uitvoer.
/status
Methode: GET
Toont statusinformatie van de ESP8266 module.
Uitvoer:
{
"mode": "ap",
"ssid": "https://www.dennisbor.com",
"ip": "192.168.4.1"
}
Om de ESP8266 te programmeren gebruik ik een programmer. Deze programmer heb ik via jumpwires verbonden met een breadboard-adapter waarin de ESP8266 gestoken wordt.
Waarom deze constructie? Ten eerste gebruik je bij prototypen veelal een breadboard en door de pinout van de ESP kun je hem onmogelijk direct in een breadboard steken. De ESP8266 past natuurlijk wel direct in de programmer, maar om te kunnen programmeren zijn de volgende zaken belangrijk:
De verbinding tussen GND en GPIO0 is makkelijk met een jumpwire te maken. De verbinding tussen GND en TX heb ik door middel van een pushbutton gemaakt. Even indrukken en uploaden maar!
De Arduino IDE is een mooi hulpmiddel om de ESP8266 te programmeren echter dien je hiervoor nog wel de nodige aanpassingen te maken.
De eerste stap omvat het installeren van de Arduino IDE, waarbij de Windows-versie te downloaden is vanaf deze site:
https://www.arduino.cc/en/main/software
ESP8266 Board Drivers en libraries
Standaard kent de IDE het ESP8266 board nog niet. Om deze toe te voegen ga je eerst naar ‘Bestand’ > ‘Voorkeuren’ en vul je onder ‘Additionele Board Beheer URLs’ de volgende URL in:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
Ga nu naar ‘Hulpmiddelen’ > ‘Board xxx’ > ‘Board beheer…’ en vul de zoekterm ‘ESP8266’ in. Klik op board ‘esp8266 by ESP8266 Community’, selecteer de meest recente versie en klik op ‘Installeren’.
ArduinoJSON
JSON (Javascript Object Notation), een gestandaardiseerd gegevensformaat, wordt tegenwoordig gebruikt door veel API’s. Mijn firmware maakt ook gebruik van JSON en dus dienen we ook deze library te installeren. Download de library vanaf:
https://esp8266.dennisbor.com/ArduinoJson-v5.13.4.zip
Laad de library via ‘Schets’ > ‘Bibliotheek gebruiken’ > ‘.ZIP bibliotheek toevoegen’.
ESP8266 instellingen
Er zijn verschillende ESP8266 modules waarbij ook de instellingen anders zullen zijn. Voor de in mijn vorig bericht genoemde module zijn de instellingen als volgt:
Het poortnummer is afhankelijk van de computerconfiguratie, maar zorg er uiteraard voor dat er achter ‘Poort’ wel een poortnummer gekozen wordt.
SPIFFS
SPIFFS, Serial Peripheral Interface Flash File System, is simpelweg een bestandssysteem. De ESP8266 heeft een klein stukje (128kb) beschikbaar voor het opslaan van bestanden. Mijn firmware gebruikt deze ruimte voor het opslaan van oa. de Html-bestanden van de webinterface. Om de IDE naar het SPIFSS te kunnen laten schrijven dien je de volgende plug-in te installeren:
https://esp8266.dennisbor.com/ESP8266FS-SPIFFS-0.2.0.zip
Installeren doe je door de map ‘ESP8266FS’ uit het ZIP-bestand te kopiëren naar de ‘tools’-map van de Arduino IDE (in Windows veelal ‘C:\Program Files (x86)\Arduino\tools’). Je dient de IDE te herstarten om de plug-in te laden.
Om mijn DIY projecten te voorzien van internetfunctionaliteit voor onder andere besturing en vastleggen van gegevens, ben ik begonnen met het schrijven van aangepaste firmware voor de ESP8266 WiFi module.
De ESP8266 is niet groter dan een euromunt en kost niet meer dan een paar euro: uitstekend voor elk project.
De module kan gemakkelijk met een programmer van eveneens een paar euro geprogrammeerd worden vanuit bijvoorbeeld het Arduino IDE.
Wat moet mijn firmware kunnen?
Wat kan de firmware op dit moment?
De module start op als open Access Point met SSID ‘DennisBor-IoT’ en is na verbinding door middel van een mDNS (multicast DNS) hostname (dennisbor-iot.local) of IP-adres (192.168.4.1) te bereiken.
Na inloggen met de standaardgegevens wordt de verdere webinterface getoond waarin verbinding gemaakt kan worden met gevonden netwerken. Zowel de firmware als interface zitten nog vol met bugs en daar zal ik de komende tijd dan ook aan gaan werken. I2C verbinding is nog helemaal niet geïmplementeerd.
Open source
Deze artikelen zijn een project-dagboek waarin ik broncode en vorderingen zal delen en wat ook als naslagwerk gebruikt kan worden. Broncode mag vrij gedownload en gewijzigd worden.