ESP8266 programmeren

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:

  • Om de ESP8266 te kunnen programmeren dienen GND en GPIO0 verbonden te zijn.
  • Om te kunnen uploaden dien je kort GND en TX te verbinden.

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!

Arduino IDE en ESP8266

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:

  • Board: Generic ESP8266 module
  • Flash size: 1M (128K SPIFFS)
  • Upload speed: 115200

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.

ESP8266 Firmware

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?

  • De module gedraagt zich als WiFi hotspot wanneer er geen verbinding is met een Access Point.
  • De module moet verbinding kunnen maken met Access Points met alle op dit moment voorkomende soorten beveiliging.
  • De module moet in te stellen zijn via een intuïtieve gebruikersinterface zonder te veel poespas.
  • De gebruikersinterface dient beveiligd te zijn en door één gebruiker gelijktijdig te openen.
  • De module moet kunnen communiceren via het I2C protocol.
  • De module moet gegevens uit kunnen wisselen met een IoT API op het internet welke ik ook zelf zal schrijven.

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.