Arduino

Tutorial ESP8266 Deel 1

De ESP8266 is een chip die dankzij de community, de functies en een geweldige prijs is uitgegroeid tot een van de populairste wifi adapters, en deze chip heeft een groot vermogen in een klein formaat.

Wat is de ESP8266?

Ondersteunt protocol 802.11 b / g / n
Capaciteit voor WiFi Direct (P2P), Soft AP
Het heeft een TCP/IP protocolstack geïntegreerd
Het heeft een Diamond Core Core (LX3) kern gemaakt door Tensilica
Zijn RISC architectuur core 32bits draait op 80Mhz
64 KBytes RAM instructie
96 KBytes aan gegevens RAM
Het heeft GPIO's, I2C, ADC, SPI, PWM en meer http:/www.esp8266.com/wiki/doku.php?id=feature_set.
De modules hebben een flashgeheugen SPI Winbond W25Q40BVNIG
De ESP8266 worden vervaardigd door Espressif
De modules die deze chip gebruiken zijn van verschillende fabrikanten en zijn er in verschillende formaten.

Modules met ESP8266

De ESP8266 is opgenomen in een grote verscheidenheid aan modules van verschillende vormen en formaten.

In deze basis tutorial werken we samen met de ESP-01, een van de bekendste, deze module bevat de benodigde componenten, zodat u alleen de module invoert en gebruikt.

Firmware voor de ESP8266

De ESP-01 wordt in eerste instantie geleverd met de "AT firmware", waarmee u het kunt gebruiken als een wifi seriële adapter, een externe microcontroller kunt gebruiken als een Arduino om hem te bedienen en te communiceren met het draadloze netwerk

Zoals elke microcontroller kun je de firmware van de ESP8266 veranderen en een van de beschikbare, waaronder de meest opmerkelijke zijn, uLUA, microPython en zelfs programma's gemaakt in Arduino gebruiken.

ESP-1 verbindingen

De verbinding is heel eenvoudig, je hoeft alleen maar de module aan te zetten, de Rx pin en seriële Tx aan te sluiten en de CH_PD pin op 3.3 aan te sluiten om de chip te activeren.

Houd rekening met het volgende wanneer u de module gebruikt:

De ESP8266 wordt gevoed met 3.3V, gebruik geen 5V!
De ESP8266 heeft GEEN 5V tolerante ingangen, dus u moet het niveau van de ingangen converteren als u met 5V apparaten wilt communiceren
Tijdens periodes van draadloze communicatie heeft de ESP8266 mogelijk tot 250mA nodig, dus zonder een goede stroombron kan de ESP8266 worden gereset. Als dit het geval is, gebruik dan een condensator in de voedingsingangen of een hogere stroombron.

De AT Firmware gebruiken

De AT firmware die standaard wordt geleverd in de ESP-01 is de ai thinker V0.9.2.4.

Gebruik van de commando's:

In de file 4A-ESP8266-AT-Instruction-Set_v0.22.pdf kan je meer info vinden over het gebruik van AT comando's

Basistests met Arduino

We zullen enkele tests uitvoeren waarbij de module door Arduino software op een seriële poort wordt aangesloten, de seriële poort zal door hardware worden gebruikt om via seriële monitor met de Arduino te communiceren.

Voor deze test hebben we een ESP-1 module, een breadboard, dupont kabels, weerstanden en een Arduino UNO r3 nodig.

We verbinden zoals getoond in de afbeelding:

Nu laden we de volgende code in de Arduino : sketch_1.ino

Nu gaan we de seriële monitor openen in de Arduino IDE en de lijn instellen op NL & CR, en de baudrate op 9600 zoals getoond in de afbeelding:

Nu om te bewijzen dat alles correct werkt, gaan we de module resetten, hiervoor verbinden we de RST pin met aarde en maken hem vervolgens los. Als we hem loskoppelen, zou het volgende moeten verschijnen.

De eerste karakters maken deel uit van een bootloader bericht dat we op dit moment niet zullen zien, ze worden op die manier getoond omdat ze zich in een andere baudrate bevinden. De volgende regel tussen '[]' is de fabrikant en de versie van AT codes die is geladen. Wanneer de module "Ready" verzendt, betekent dit dat deze klaar is om opdrachten te ontvangen.

Laten we het AT commando proberen, deze modus retourneert "OK" als alles in orde is.

Nu gaan we de module configureren om verbinding te maken met een wifi netwerk in ons huis en gegevens gaan ontvangen:

De module zal alleen een client van een bestaand draadloos netwerk zijn, dus stellen we de modulemodus in op station (client), zend de opdracht:

AT+CWMODE=1

Deze opdracht geeft "OK" als alles klopt, of "geen verandering" als de module al in die modus was. De modus blijft opgenomen, zelfs als de module niet bekrachtigd is.

Laten we nu eens kijken naar de beschikbare draadloze netwerken die verzenden:

AT+CWLAP

Met deze opdracht wordt een lijst geretourneerd met: het type codering, de naam van het netwerk, de signaalsterkte, het MAC adres van het toegangspunt, als volgt.

+CWLAP:(4,"Naylamp",-55,"0a:18:d6:99:59:47",6
+CWLAP:(2,"VecinoWifi",-78,"10:fe:ed:7a:a9:42",6)
+CWLAP:(3,"Anonymous-Pro",-92,"c4:17:fe:8a:2d:24",11)
OK

Nu gaan we verbinding maken met een van die netwerken, hiervoor verzenden we de volgende opdracht met de netwerknaam gevolgd door het wachtwoord, elk gegevenstype String gaat altijd tussen aanhalingstekens:

AT+CWJAP="Naylamp","hail_hydra" 

Als de esp na een paar momenten met "OK" antwoordt, is alles goed gegaan, maar controleer of u de naam en het wachtwoord van het netwerk correct hebt ingevoerd.

Laten we nu een server in de module starten. Eerst activeren we de multi verbindingsmodus

AT+CIPMUX=1

Nadat u "OK" hebt beantwoord, starten we de server en wijzen we servicenummer 1 toe. Deze server wordt uitgevoerd op poort 80. Deze poort is dezelfde die browsers gebruiken bij het aanvragen van een webpagina, dus we kunnen deze in de volgende proberen stap.

AT+CIPSERVER=1,80

Laten we nu het IP adres dat we toegewezen krijgen aan de module in ons lokale netwerk opvragen. Hiervoor gebruiken we het volgende.

AT+CIFSR

De module reageert met een IP adres. In mijn geval was het 192.168.1.15 als we dit IP adres in de URL balk van een webbrowser invoeren, vraagt de browser de webpagina naar de module, hiervoor verzendt het een reeks gegevens die we kunnen zien op de seriele monitor, het zal zoiets zijn als dit:

+IPD,0,380:GET / HTTP/1.1
Host: 192.168.1.15
Connection: keep-alive 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8  Upgrade-Insecure-Requests: 1 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36  (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: es,en-US;q=0.8,en;q=0.6
OK

In de browser zal het wachten op een reactie (een webpagina) van de module, maar omdat het niet is geprogrammeerd om te reageren, zal het niets laden. In de seriële monitor betekent bovenstaande tekst dat er informatie is opgevraagd (met behulp van de http GET methode), het adres waartoe het is geadresseerd, het type verbinding, het type bestand dat u verwacht te ontvangen, het type client (browser) waaruit de applicatie en taal is gemaakt.

Probeer nu de browser met het volgende adres, waarbij je 192.168.1.15 vervangt door het adres dat je eerder hebt verkregen.

192.168.1.15/hola_mundo

In de seriële monitor zullen we het volgende verkrijgen:

+IPD,0,380:GET /Hola_mundo HTTP/1.1 
Host: 192.168.1.15 
Connection: keep-alive 
Accept:  text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
Upgrade-Insecure-Requests: 1 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36  (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36 
Accept-Encoding: gzip, deflate, sdch 
Accept-Language: es,en-US;q=0.8,en;q=0.6 
OK

Controleer in de bovenstaande tekst de regel die + IPD bevat, er is de tekst die we vanuit de browser verzenden. Nu kunnen we informatie doorgeven aan de module via de webbrowser.

Een led besturen vanuit de browser

We zullen een opdrachtinterpreter op de Arduino implementeren om een LED vanuit de browser te besturen.

We laden het volgende programma in de arduino: sketch_2.ino

Wat het programma doet, maakt automatisch verbinding met een draadloos netwerk met de naam SSID en wachtwoord PASSWORD. Start vervolgens een server op poort 80. Iets nieuws in dit programma is dat wanneer u de browserverzoek ontvangt, de module antwoordt met een klein bericht dat wordt weergegeven als een webpagina in de browser, dit gebeurt met de functie AT + CIPSEND.

We kunnen de ip die is toegewezen aan de module verifiëren van de seriële monitor van de Arduino, in mijn geval is dit 192.168.1.15. Met dit adres kan ik vanuit de browser de LED 13 van de Arduino bedienen met behulp van de subadressen

192.168.1.15/led = 0 om de LED uit te schakelen.


192.168.1.15/led = 1 om de LED in te schakelen.

Met deze tutorial hebben we geleerd om de Arduino in combinatie met de ESP-1 te gebruiken om een kleine en eenvoudige embedded server te maken.

Dit was slechts een voorbeeld en er zijn veel dingen te verbeteren, zoals: voer alleen de benodigde commando's uit bij het opstarten, sommige hoeven niet te worden uitgevoerd telkens wanneer de module wordt gestart. Verbeter reactietijden om onmiddellijk te zijn. U kunt ook extra functies toevoegen, zoals de status van de pinnen of de ADC op de website. Een interface met knoppen om de Arduino te besturen.

In deze tutorial hebben we alleen wifi connectiviteit gezien in een lokaal netwerk, maar met dezelfde principes kun je de module verbinden met internet en dus echt een systeem hebben met internet of things.

De code van dit project kan je hier downloaden.