Arduino

Arduino en ESP8266 (ESP-01) als webclient

Laatst bijgewerkt: 24/07/2020

Na het werken met de ESP8266 (ESP-01) server in deel I, zullen we de ESP8266 (ESP-01) als een client gebruiken, op deze manier kunnen we verbinding maken met een server en informatie verzenden of opvragen.

Deze tutorial is meer georiënteerd op een programmeur of een webontwikkelaar, die via het internet data wil controleren of ontvangen van een hardware, in dit geval Arduino, maar alvorens door te gaan met deze tutorial, moeten ze Tutorial ESP8266 Part I, waarin uitleg over de module ESP8266 (ESP-01), de AT opdrachten en een voorbeeld is geïmplementeerd op de ESP8266 (ESP-01) server.

Met behulp van ESP8266 (ESP-01) als klant betekent dat onze Arduino door de ESP8266 (ESP-01) moet verbinding maken met een server bijvoorbeeld www.google.com, zijn er verschillende manieren om te communiceren tussen de client server, zullen we communiceren via HTTP, dat is op dezelfde manier waarop webbrowsers (Chrome, Mozilla, enz.) communiceren met servers.

Verzonden parameter in een HTTP dialoogvenster

Wanneer een web browser toegang wil krijgen tot een website (server) stuurt deze een HTTP verzoek (HTTP request)  de server ontvangt het verzoek en antwoordt met de website (HTTP response), die verantwoordelijk is voor het verzenden en het interpreteren is de webbrowser, de gebruiker schrijft alleen de URL en wacht tot de pagina is geladen, maar wanneer we met Arduino werken, moeten we communiceren via http verzoeken.

Er zijn twee eenvoudige manieren om gegevens samen met een HTTP verzoek te verzenden, dit zijn de GET methode en POST. Het belangrijkste verschil tussen deze twee methoden is dat in de GET methode de gegevens in de URL worden verzonden, zichtbaar voor de gebruiker, in de POST methode zijn de gegevens verborgen voor de gebruiker. Beide methoden worden veel gebruikt en worden bijna altijd geïmplementeerd in de webpagina's die we gebruiken.

We zullen werken met de methode GET en neem als voorbeeld de uitoefening toegelicht in de volgende link: info_php.php, met het verschil dat geen variabelen aan een ander zal overgaan van de ene pagina, maar van onze Arduino naar een webpagina.

Om gegevens te verzenden via de GET methode als we het vanuit de browser uitvoeren is eenvoudig, we hoeven alleen maar in de URL de gegevens te schrijven die we willen verzenden, het zou als volgt zijn: http://www.jackyb.be/arduino/esp8266/bestemming.php?a=125&b=26

Zoals je kunt zien is de link aan het einde toegevoegd "? a = 125 & b = 26". Op deze manier geven we aan dat we die parameters willen verzenden. Wanneer de server deze query bereikt, leest deze de twee gegevens (a = 125 en b = 26) en reageert met een webpagina die de gegevens weergeeft die deze heeft ontvangen

Wat de pagina doet, is ons de gegevens tonen die u hebt ontvangen.

De code van de webpagina is de volgende:

<!DOCTYPE html>
<html>
<head>
<title>bestemmingspagina</title>
</head>
<body>
<h1>Bij het openen van deze pagina zijn de volgende variabelen doorgegeven:</h1>
<?php 
$a=$_GET['a'];
$b=$_GET['b'];
?>
<p>
<?php
echo "variable a : $a";
?>
<p></p>
<?php
echo "variable b : $b";
?>
</p>
</body>
</html>

Deze code wordt geüpload naar een server en het is de server die de PHP code uitvoert en de geprogrammeerde acties uitvoert, wat in dit geval een eenvoudig HTML antwoord is waarin we de ontvangen gegevens kunnen zien.

In de code van de pagina die op de server is geüpload, kunt u deze programmeren om verbinding te maken met een database en de variabelen uploaden, informatie downloaden of een andere actie uitvoeren, maar dit is afhankelijk van uw behoefte en uw vaardigheden als webontwikkelaar .

U kunt dezelfde pagina gebruiken om de zelfstudie of het schema te ontwikkelen en uw eigen pagina naar een server te uploaden.

Nu zijn we hetzelfde, maar in plaats van het vanuit de browser te doen, zullen we werken vanuit onze ESP8266.

1. Verbindingen tussen ESP8266 (ESP-01) en Arduino

Om onze ESP8266 te verbinden, gebruiken we een breadboard om ons te helpen bij de bedrading, de namen van de pinnen worden niet op de print gedrukt, maar u kunt ze in de volgende afbeelding bekijken: Pinout module ESP8266 (ESP-01)

ESP-01 Arduino
TX D10
CH_PD 3V3
RST Niet verbonden
3.3V 3V3
GND GND
GPIO2 Niet verbonden
GPIO0 Niet verbonden
RX D11 (Gebruik van weerstanden)

De ESP8266 (ESP-01) werkt met 3,3V, dus in de TX pin van de Arduino wordt het aanbevolen om weerstanden te gebruiken om een spanningsdaling te genereren, de waarde van de weerstanden hoeft niet noodzakelijk 1K en 2K te zijn, maar ze kunnen de weerstanden gebruiken die ze bij de hand hebben, maar Deze moeten een verhouding van 1: 2 hebben, bij gebruik van deze weerstanden wordt een spanningsdeler gevormd en het 5V niveau van de Arduino TX wordt omgezet naar een 3,3V niveau. In het geval van de RX is dit niet nodig, omdat de ESP8266 (ESP-01) naar die penniveaus van 3,3 V niveaus stuurt die de Arduino als logisch beschouwt.

2. Zoekopdrachten uitvoeren op de server met behulp van AT opdrachten:

Voordat we de webclient op onze Arduino implementeren, zullen we eerst het AT script bekijken dat we moeten uitvoeren om deze actie uit te voeren.

Om de AT opdrachten te kunnen verzenden, laden we het volgende programma in onze Arduino: code_hoofdstuk_2.ino

Dit programma is slechts een seriële repeater, alle gegevens die door de ESP8266 worden verzonden, worden naar de pc verzonden en de gegevens die vanaf de pc worden verzonden, worden naar de ESP8266 (ESP-01) verzonden

Na het laden van het programma openen we de seriële monitor en controleren of onze seriële monitor de snelheid van 9600 heeft en heeft de optie "zowel NL & CR" geselecteerd, dan beginnen we de AT opdrachten te verzenden:

AT commandotest

  We sturen : AT
  We ontvangen : OK

Als we geen reactie ontvangen, kan het zijn dat onze ESP8266 (ESP-01) op een andere snelheid is geconfigureerd dan degene die is geprogrammeerd: hiervoor moeten we de volgende coderegel wijzigen en opnieuw laden: SerialESP8266.begin(115200);

Nu herhalen we het commando opnieuw en we moeten het antwoord krijgen:

3. Wijzig de seriële verzendsnelheid

Als de transmissiesnelheid van je ESP8266 (ESP-01) 115200 is, moeten we deze veranderen naar een snelheid van 9600, dit komt omdat we in onze Arduino werken met SoftwareSerial, en met 115200 zouden we aan de snelheidslimiet zitten die de SoftwareSerial ondersteunt en sommige tekens verloren kunnen gaan.

Als uw ESP8266 (ESP-01) werkt met de snelheid van 9600, voert u deze stap niet langer uit.

Om de snelheid te wijzigen gebruiken we het volgende AT commando:

We sturen : AT + UART_DEF = 9600,8,1,0,0
We ontvangen : 
AT + UART_DEF = 9600,8,1,0,0
OK

Als 9600 de snelheid is, zijn er andere communicatie configuraties.

Nadat we dit gedaan hebben, zullen we niet meer commando's kunnen sturen omdat het veranderd is naar de nieuwe snelheid, we zullen onze arduino moeten herprogrammeren met de snelheid van 9600, hiervoor moet dan opnieuw de snelheid in de volgende regel code veranderd worden:

SerialESP8266.begin(9600);

Om vervolgens met de nieuwe snelheid te laden, moeten we AT verzenden en wachten totdat deze met een OK reageert. Op deze manier bevestigen we dat de snelheid correct is gewijzigd.

Het hele proces dat we hebben gedaan, wordt maar één keer gedaan, daarna is onze ESP8266 (ESP-01) uitgeschakeld en wordt de geconfigureerde snelheid gehandhaafd.

Geconfigureerde Wifi modus:

We werken in de stationsmodus, dat wil zeggen dat we verbinding maken met een bestaand netwerk:

We sturen: AT + CWMODE = 1
We ontvangen: AT + CWMODE = 1
OK

Maak verbinding met een WiFi netwerk

We zullen verbinding maken met het netwerk waarvan de naam is: Naylamp, en het bijbehorende wachtwoord is: hail_hydra

We sturen:  AT + CWJAP = "Naylamp","hail_hydra"
We ontvangen: AV + CWJAP = "Naylamp",  "hail_hydra"
WIFI VERBONDEN
WIFI GOT IP
OK

Het antwoord bevestigt dat we al verbonden zijn met het wifi netwerk

We schakelen meerdere verbindingen uit:

Omdat we gaan werken als een webclient, schakelen we meerdere verbindingen uit, die over het algemeen worden gebruikt wanneer we als server werken:

We sturen: AT + CIPMUX = 0
We ontvangen: AT + CIPMUX = 0
OK

Maak verbinding met de server:

We sturen: AT + CIPSTART = "TCP",  "www.aprende-web.net", 80
We ontvangen: CONNECT

Door dit te doen starten we de verbinding op als een client en specificeren het type verbinding (TCP), de server (www.aprende-web.net) en de poort (80),

Verzend de grootte van het HTTP verzoek

Voordat u de HTTP aanvraag verzendt, moet u de grootte opgeven van het aantal tekens van de aanvraag:

We sturen: AT + CIPSEND = 83
We ontvangen: AT + CIPSEND = 83
OK
>

Wanneer we ">" ontvangen, betekent dit dat we nu het HTTP verzoek kunnen verzenden.

HTTP aanvraag verzenden

Na het ontvangen van ">" wacht de ESP op de aanvraag van de aangegeven grootte, hiervoor verzenden we regel voor regel het volgende verzoek

verzonden: 
/Php/ejemplos/ej10destino.php?a=23&b=56 GET HTTP /  1.1 (Voer in en verzend)
Host: www.aprende-web.net (Voer in en verzend)
(Voer in en verzend)

Wij ontvangen:
83 bytes recv
SEND OK
+  IPD, 463: HTTP / 1.1 200 OK
Datum: wo, 23 augustus 2016 19:22:56 GMT
Server: Apache
-X Powered-by: PHP / 3.5.29
Content-Length: 319
Content-Type: text / html

<! DOCTYPE html PUBLIC "- // W3C // DTD XHTML  1.0 Transitional // EN"
Http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<Html>
<Head>
<Title> landing page </ title>
</ Head>
<Body>
<H1> Als u deze pagina te openen zijn de volgende  variabelen doorgegeven: </ h1>
<P> variable $ a: 23 <p> variable $ b: 56  </ body>
</ Html>
CLOSED

Wat we krijgen is de reactie van de server, waar de HTTP header en HTML webpagina reactie wordt waargenomen.

Merk op dat we op het einde een CLOSED kregen. Dit geeft aan dat de verbinding met de server gesloten is.

3. Arduino als webclient met ESP8266 (ESP-01) :

Nu gaan we een schets programmeren die de AT opdrachten zal verzenden die in het vorige voorbeeld handmatig zijn verzonden:

De code is de volgende: code_hoofdstuk_3.ino

Zoals u kunt zien, is ze hetzelfde als wat handmatig is verzonden.

We werken met twee verschillende seriële communicatie, één (SoftwareSerial) om te communiceren met de ESP826 (ESP-01) en een andere (Serial) om te communiceren met de pc.

Vervolgens tonen we de uitvoer van de seriële monitor, gegevens die moeten worden ontvangen als alles goed gaat:

De code van dit project kan je hier downloaden.