ESP8266 NodeMCU-firmware. Een WiFi-stopcontact maken. Microcontroller ESP8266: aansluiting en configuratie

Doelen en redenen

Dit is het tweede artikel van de auteur over geïntegreerde schakeling ESP8266, met een volledig uitgeruste 32-bits RISC-microcontroller en ingebouwde 802.11 b/g/n Wi-Fi-circuits. beschreven met behulp van Arduino IDE voor ESP8266-programmering en bevat belangrijke informatie, wat hier niet zal worden herhaald. Als u het nog niet heeft gelezen, raden wij u aan dit alsnog te doen.

Er is geen tekort aan informatie over de ESP8266 op internet; in feite kan er te veel van zijn... verkeerd. De ontwikkelaars van de chip, Espressif, hebben blijkbaar besloten niet alleen de productie uit te besteden, maar ook om niet rechtstreeks betrokken te zijn bij de ontwikkeling van de reeks ESP-modules die de ESP8266-chip gebruiken. In plaats daarvan bieden ze via een forum informatie en ondersteunende diensten aan voor degenen die bereid zijn om met volharding en geduld door het labyrint te navigeren. Wat de verwarring nog groter maakt, is het bestaan ​​van een ander forum dat, ondanks dat het esp8266.com heet, niet wordt beheerd door Espressif. Daarnaast zijn er veel wederverkopers, vloggers en schrijvers die ook informatie aanbieden die varieert van goed tot verwarrend tot zelfs helemaal verkeerd.

ESP-modules zijn beschikbaar in diverse bronnen, en de firmware in de ESP8266-chips op de modules is bijna altijd verouderd en roept vaak vermoedens op over hun oorsprong. Ook soms verdacht zijn "updates" en tools die beschikbaar zijn via dezelfde bronnen. Daarom is het doel van dit artikel om de procedure te documenteren voor het rechtstreeks downloaden van de nieuwste beschikbare firmware van Espressif en het installeren ervan met behulp van de programmeertool van Espressif.

Apparatuur aansluiten

Om de firmware van een ESP8266 bij te werken, moet u deze op de juiste manier van stroom voorzien en op uw computer aansluiten. Bovendien is het noodzakelijk om een ​​manier toe te voegen om de chip te resetten en in de opstartmodus te zetten. Het onderstaande diagram en de foto tonen de aanbevolen aansluiting; Houd er rekening mee dat de draadkleuren in het diagram overeenkomen met de kleuren op de foto. Zoals je kunt zien, zal ik de firmware op de ESP-01-module updaten, maar dezelfde verbindingen zullen op andere modules werken, zolang dezelfde ESP8266 I/O's worden gebruikt zoals weergegeven in het diagram. Meer informatie kijk naar binnen.

Meer betrouwbare schakeling firmware wordt in dit artikel gegeven.


PuTTY-terminalprogramma

Zodra de hardwareverbinding voltooid is, is de volgende stap het inschakelen van de ESP8266 en proberen ermee te communiceren. Hiervoor is een eenvoudig terminalprogramma vereist; we zullen PuTTY gebruiken, gratis programma, hier beschikbaar. U kunt een ander terminalprogramma gebruiken, maar u zult rekening moeten houden met de verschillen tussen dit programma en PuTTY.

Open PuTTY en klik op het keuzerondje Serieel. Voer het COM-poortnummer in (dat kleiner moet zijn dan 10) en de baudsnelheid (hoogstwaarschijnlijk zal dit 115200 of 9600 zijn).

In een klein venster Opgeslagen sessies voer ESP8266 in en klik op de knop Redden. Het PuTTY-venster moet er uitzien als de onderstaande afbeelding.


Klik op de knop Open, waarmee een PuTTY-terminalsessievenster zou moeten worden geopend.

Schakel Caps Lock in op uw computer en typ AT, maar druk niet op Enter. U zou AT moeten zien in het PuTTY-terminalvenster. Als dit niet gebeurt, heeft u mogelijk de verkeerde COM-poort of de verkeerde baudrate geselecteerd. Sluit PuTTY en start dit subartikel vanaf het begin. Aanvaardbare baudsnelheden: 9600, 19200, 38400, 74880, 115200, 230400, 460800 en 921600; probeer ze allemaal om de beurt totdat je er een vindt die werkt.

Wanneer u AT in het PuTTY-terminalvenster ziet, houdt u de Ctrl-toets ingedrukt, drukt u op de M-toets en vervolgens op J. Laat de Ctrl-toets los. U zou OK moeten zien in het PuTTY-terminalvenster, zoals weergegeven in de onderstaande afbeelding.


Houd er rekening mee dat als u een typefout maakt in een terminalsessievenster, u de fout mogelijk niet kunt corrigeren. In plaats van te proberen de fout te bewerken en op te lossen, is het vaak beter om eenvoudigweg de Ctrl-toets ingedrukt te houden en eerst op de M-toets en vervolgens op de J-toets te drukken, waardoor een foutmelding wordt gegenereerd. Vervolgens kunt u opnieuw beginnen en de juiste tekst invoeren.

Als je het eerste OK-bericht ziet, betekent dit dat je een grote hindernis hebt overwonnen. Nu weet u dat de apparatuur correct is aangesloten, dat de ESP-module werkt en dat u de juiste COM-poort en baudrate hebt geselecteerd. OK

Start PuTTY nu opnieuw, selecteer de opgeslagen ESP8266-sessie en klik op de knop Laden Open


Op de eerste regel hierboven zie je het commando AT+GMR dat je hebt getypt. Zoals je misschien weet of al geraden hebt, wordt het commandoschema dat we gebruiken om met de ESP8266 te communiceren de “AT Command Set” genoemd, omdat alle commando’s beginnen met de letters “AT”.

Helaas zijn er veel versies van AT-opdrachtensets; ze bevatten allemaal enkele van dezelfde commando's, maar er zijn veel AT-commando's die niet standaard zijn in alle AT-commandosets. Zelfs binnen de ESP8266-gemeenschap zijn er verschillende versies. De tweede regel geeft aan dat dit zo is specifiek apparaat De 8266 is geprogrammeerd met firmware die versie 0.25.0.0 van AT-opdrachten gebruikt. Er is ergens een document dat de commando's definieert die in versie 0.25.0.0 zijn opgenomen, maar zelfs zonder dat document kun je met vallen en opstaan ​​bepalen welke AT-commando's worden ondersteund. Dit zal op zijn best een erg vervelend proces zijn, maar gelukkig is er een oplossing die zo meteen zal worden uitgelegd.

De derde regel specificeert de versie software(SDK) die voor deze specifieke ESP8266 werd gebruikt als versie 1.1.1. Elke SDK bevat ook een set AT-opdrachten die deel uitmaken van de firmware en geschikt zijn voor het besturen van die firmware. Blijkbaar werkt versie 0.25.0.0 van AT-opdrachten met versie 1.1.1 van de SDK. Maar je hebt nog steeds het document nodig dat AT-versie 0.25.0.0 beschrijft om erachter te komen welke opdrachten zijn ingeschakeld. Bestaat beste manier, beschreven in de volgende sectie van dit artikel, maar voordat we verder gaan, laten we nog een AT-commando proberen en kijken wat er gebeurt.

Schakel Caps Lock in op uw computer en voer AT+CWLAP in. Wanneer u AT+CWLAP ziet in het PuTTY-terminalvenster, houdt u de Ctrl-toets ingedrukt en drukt u eerst op de M-toets en vervolgens op de J-toets. Laat de Ctrl-toets los. Na een paar seconden zou het terminalvenster eruit moeten zien als de onderstaande schermafbeelding.


AT+CWLAP dwingt ESP8266 om alles op te sommen beschikbare wifi toegangspunten. In het bovenstaande geval zijn twee toegangspunten gevonden: één heet "ATT936" en de tweede heet "tracecom 2.4". Uiteraard zullen uw resultaten variëren en moeten deze ook uw eigen resultaten omvatten Wi-Fi-netwerk, evenals de netwerken van uw buren.

Sluit het PuTTY-terminalsessievenster en klik op OK wanneer PuTTY vraagt ​​of u het zeker weet.

ESP Flash-downloadtool

Hoewel het zelden online wordt vermeld, heeft Espressif, de ontwikkelaars van de ESP8266-chip, software gemaakt om de firmware in hun chips bij te werken. Dit is de ESP Flash Download Tool en deze tool is beschikbaar. Download, pak uit en installeer de nieuwste versie op uw computer; op het moment van schrijven is dit FLASH_DOWNLOAD_TOOLS_v2.4_150924.rar .

Voer het hulpprogramma uit en u zou twee vensters open moeten zien: venster GUI(GUI) met informatie-invoervelden en een terminalvenster waarin een logboek van voltooide acties wordt bijgehouden.

Grafische gebruikersinterface (GUI) venster van ESP Flash Download Tool

Er zijn een paar dingen die het vermelden waard zijn, maar geen reden tot bezorgdheid:

  • venster (GUI) wordt geïdentificeerd als V2.3, terwijl het logvenster wordt geïdentificeerd als V2.4. Blijkbaar is het GUI-venster verkeerd gemarkeerd;
  • velden selecteer COM poort- en baudsnelheden in het GUI-venster bevatten mogelijk al gegevens;
  • adresinvoervelden in het GUI-venster bevatten mogelijk al gegevens;
  • het logvenster bevat mogelijk al gegevens.

De nieuwste firmware downloaden

Espressif heeft een pagina met de nieuwste firmware. Ga naar bbs.espressif.com, klik op het item SDK's in de downloadlijst en klik vervolgens op 'nieuwste release' in het gedeelte Aankondigingen. Op het moment van schrijven was het volgende te zien op deze pagina:


De nieuwste versie van de Non-OS SDK (Software Development Kit) is wat we nodig hebben, en het lijkt erop dat als u op "Nieuwste versie: 1.4.0" klikt, u de nieuwste versie krijgt. Maar dit is niet helemaal waar; Houd er rekening mee dat er een patch beschikbaar is met de naam esp_iot_sdk_v1.4.1_15_10_22. Dit is geen patch; Dit is een gecorrigeerde versie van firmwareversie 1.4.0. We hebben hem nodig en bin-bestanden AT_v0.50. Klik achtereenvolgens op elk van hen en download de bestanden.

Tegen de tijd dat u dit leest, kunnen er uiteraard nog meer zijn nieuwste versies SDK's en hun locaties kunnen worden gewijzigd, maar volgens ten minste, je weet waar je moet kijken. Zorg ervoor dat u het aandachtig leest om er zeker van te zijn dat u de nieuwste versie downloadt. Zoals we eerder zagen, is dit niet altijd vanzelfsprekend.

Het is u misschien opgevallen dat er een sectie is voor het downloaden van documenten. Ze bevatten allemaal informatie van hoge kwaliteit, maar soms gaat een aanzienlijk deel ervan verloren bij de vertaling van het Chinees naar het Engels. Vergeet voorlopig niet te halen nieuwste versies ESP8266 AT-instructieset en Espressif IOT SDK-gebruikershandleiding.

Firmware-installatie

Voer de ESP Flash-downloadtool uit en zorg ervoor dat geen van de selectievakjes aan de linkerkant is aangevinkt bovenste hoek GUI-venster is niet aangevinkt. Voer in de invoervelden onder aan het venster de COM-poort die u gebruikt en de baudrate van 115200 in. Houd er rekening mee dat wanneer u gegevens invoert, deze worden vastgelegd in het logvenster.

Schakel uw ESP-programmeerkit in en sluit deze aan op uw computer. Houd ingedrukt Reset-knop en houd vervolgens de flitsknop ingedrukt. Laat de resetknop los en laat vervolgens de flitsknop los. Klik op de knop BEGIN ESP Flash Tool GUI-venster. Het flash-bootprogramma zou de ESP8266 in uw build moeten controleren en een rapport moeten produceren dat lijkt op het onderstaande. Druk kort op de Reset-knop op uw breadboard om de ESP8266-firmwaremodus te verlaten en te hervatten normaal werk.


Merk op dat het GUI-venster nu informatie bevat over de ESP8266, inclusief de grootte van het flashgeheugen (8 Mbit in het voorbeeld), klok frequentie(in het voorbeeld 26 MHz) en twee MAC-adressen voor de chip. Dezelfde informatie is opgenomen in het logvenster.

Klik vervolgens op het selectievakje in het GUI-venster met de tekst " SpiAutoSet", waardoor de downloadtool automatisch selecteert juiste maat flashgeheugen en kloksnelheid.

Nu moeten we de bestanden selecteren die we in de ESP8266 willen installeren en het startgeheugenadres voor elk bestand instellen. Om de ESP-chip te updaten, moeten vier bestanden correct worden geïnstalleerd. Open de Espressif IOT SDK-gebruikershandleiding en zoek naar het gedeelte over het schrijven van afbeeldingen naar flash-geheugen. In versie 1.4 van de handleiding begint het op pagina 20. Zoek vervolgens de subsectie die de versie beschrijft die wordt ondersteund door Cloud Update (FOTA), en zoek in die subsectie een tabel over de grootte van het flashgeheugen in uw ESP8266. In dit voorbeeld is de grootte van het flashgeheugen 8 Mbits, wat gelijk is aan 1024 kilobytes. Tabel 2 op pagina 25 van de handleiding bevat dus de informatie die nodig is voor het voorbeeld. Laten we naar de onderstaande afbeelding kijken.


Deze vier bestanden zijn nodig: esp_init_data_default.bin, blank.bin, boot.bin en user1.bin. Naast de bestandsnaam wordt het adres weergegeven waar elk bestand moet worden geïnstalleerd. De eerste drie van de vereiste bestanden bevinden zich in de map esp_iot_sdk_v1.4.1_15_10_22, eerder gedownload van bbs.espressif.com, en de vierde bevindt zich in AT_v0.50 bin-bestanden. Navigeer naar waar deze gedownloade bestanden zich bevinden en kopieer hun paden naar de invoervelden bovenaan het venster GUI-programma's Flash-downloadtool; Voer voor elk bestand het juiste adres in het veld naast de bestandsnaam in. Volg deze stappen voor elk bestand:

  • klik in het invoerveld "set firmware path";
  • klik op de knop... rechts van het invoerveld;
  • ga naar de locatie waar het bestand is opgeslagen en klik op het bestand. De GUI voert automatisch het bestandspad in het invoerveld in;
  • voer voor elk bestand het juiste adres (uit de tabel) in.

Houd er rekening mee dat de bestanden die moeten worden gedownload mogelijk niet dezelfde zijn als de bestanden die in de tabel in dit voorbeeld worden vermeld, maar er wel dicht bij zitten.

Klik nu op de vier selectievakjes links van elke bestandsnaam. Het GUI-venster van de Flash Download Tool zou er uit moeten zien als in de onderstaande afbeelding. Controleer de adressen nogmaals aan de hand van de tabel.

Houd op uw ESP-firmware-indeling de Reset-knop ingedrukt en houd vervolgens de Flash-knop ingedrukt. Laat de resetknop los en laat vervolgens de flitsknop los. Klik op de knop BEGIN ESP Flash Tool GUI-venster. Het downloaden zou moeten starten en de voortgang ervan zou moeten worden weergegeven in het GUI-venster en het Flash Download Tool-logvenster, zoals hieronder weergegeven.


Zoals hierboven weergegeven, zal een succesvolle flashfirmware-bewerking ertoe leiden dat alle bestanden naar de ESP8266 worden verzonden en dat de COM-poort wordt gesloten.

Het succes van de firmware controleren

Wanneer het knipperen is voltooid, sluit u de Flash Download Tool. Haal de stroom uit de ESP-programmeerlay-out en sluit de stroom vervolgens opnieuw aan.

Start PuTTY opnieuw, selecteer uw opgeslagen ESP8266-sessie en klik Laden. Dit zou uw eerder geselecteerde moeten plaatsen COM-instellingen poort- en overdrachtssnelheid in de juiste vensters. Klik Open, en er wordt een nieuw PuTTY-terminalsessievenster geopend.

Schakel Caps Lock in op uw computer en typ AT, maar druk niet op Enter. U zou AT moeten zien in het PuTTY-terminalvenster. Voer het +-symbool in, gevolgd door GMR. Wanneer u AT+GMR in het PuTTY-terminalvenster ziet, houdt u de Ctrl-toets ingedrukt en drukt u eerst op de M-toets en vervolgens op de J-toets. Laat de Ctrl-toets los. In het PuTTY-terminalvenster zou u informatie over de ESP8266-firmware moeten zien die vergelijkbaar is met de onderstaande informatie.


Zoals je kunt zien, is er uiteraard nieuwe firmware op de ESP8266 geïnstalleerd. Het is bijgewerkt van SDK-versie 1.1.1 naar SDK-versie 1.4.0. Bovendien werd ook de overeenkomstige versie 0.50.0.0 van de AT-opdrachtenset geïnstalleerd.

Sluit het PuTTY-terminalsessievenster en klik op OK wanneer PuTTY vraagt ​​of u het zeker weet.

En tot slot

Een paar trainingen en het hele firmware-updateproces zullen veel minder tijd in beslag nemen dan nodig is om dit artikel te lezen. Zodra u dit doet, heeft u vertrouwen in wat er in uw ESP8266 zit en kunt u zich concentreren op uw Wi-Fi-project in plaats van de ESP-firmware te raden en te hopen dat deze de vereiste AT-opdrachtenset ondersteunt.

Na hun verschijning werden borden op basis van de ESP8266 Wifi-chip echt populair. Enorme kansen en de minimumprijs, die zelfs bij het begin van de verkoop en in de detailhandel niet hoger was dan $ 5, voldeed. Rond de chip hebben zich gemeenschappen gevormd waarin mensen informatie delen en software maken.

Wat is de reden voor deze populariteit, naast de lage prijs?

Het punt is dat ESP8266-kaarten niet alleen modules zijn voor WiFi-communicatie. De chip is in wezen een microcontroller met eigen SPI-, UART- en GPIO-poorten, wat betekent dat de module autonoom kan worden gebruikt zonder Arduino en andere borden met microcontrollers.

Informatie

Onze Chinese kameraden produceren al een twaalftal soorten borden op basis van ESP8266: met een externe antenneaansluiting, met een keramische antenne, met een PCB-antenne, zonder antenne. Wordt ook weergegeven op verschillende modules verschillende hoeveelheden GPIO. Meer details zijn te vinden op de Russischtalige website.

IN deze recensie Ik zal een van de allereerste boards gebruiken ESP-01. Idem voor volwaardig werk met de chip heb je een converter nodig USB/UART, raad ik aan, waarvan een recensie al op mysku stond.

Verbinding

De pin-out van de ESP-01-connector wordt weergegeven in de afbeelding:

Als je in je projecten niet genoeg twee output-GPIO's hebt en je geen 'vuile hacks' wilt uitvoeren, dan raad ik aan om bijvoorbeeld onmiddellijk nieuwere boards aan te schaffen ESP-07 of ESP-12. Houd er wel rekening mee dat deze borden onafhankelijke bedrading vereisen en hiervoor zijn speciale mini-kits te koop.

Foto's van deze borden


ESP-01 gehackt door Dave Allan, bijvoorbeeld. Daarnaast krijg je 4 GPIO's: GPIO14, GPIO12, GPIO13 en GPIO15

Aansluitschema:
- ESP-01 VCC naar USB/UART VCC (+3,3 V);
- ESP-01 GND naar USB/UART GND;
- ESP-01 URXD naar USB/UART TXD;
- ESP-01 UTXD naar USB/UART RXD;
- ESP-01 CH_PD naar USB/UART VCC (+3,3 V);
- ESP-01 GPIO0 naar USB/UART GND - alleen tijdens firmware-update!..

Firmware

Voor de ESP8266 is er een SDK en originele firmware van Espressif Systems, maar velen zijn er niet tevreden mee vanwege de “ruwheid”, dus wordt er niet-originele firmware uitgebracht, zoals NodeMCU, Frankenstein en anderen.

Deze recensie maakt geen gebruik van de originele NodeMCU-firmware. Een lijst met opdrachten en voorbeelden kunt u vinden op.

We updaten de originele “fabrieks” firmware op NodeMCU:
- Laad het hulpprogramma voor knipperen -;
- Laad de firmware - ;
- We verbinden via ESP-01 met USB/UART volgens het hierboven weergegeven diagram. Vergeet niet om GPIO0 met GND te verbinden. Steek USB/UART erin USB-poort computer;
- Voer XTCOM_UTIL.exe uit, ga naar Extra -> Apparaat configureren, selecteer de COM-poort waarmee het bord is verbonden, stel de poortsnelheid in op 57600, klik op Openen en vervolgens op Verbinden. Het programma zou moeten zeggen "Verbinden met doel OK!", sluit het instellingenvenster. Ga naar het API TEST-menu, selecteer (4) Flash Image Download, specificeer het pad naar het bestand “nodemcu_512k_latest.bin”, laat het adres 0x00000 staan ​​en klik op DownLoad. Het downloaden van de firmware zou moeten beginnen en er zal een bericht worden weergegeven als het voltooid is;
- Schakel de stroom van het bord uit, koppel de GPIO0-pin los van de gemeenschappelijke draad en schakel de stroom in. Start de terminal Putty, CoolTerm of anderen (LET OP! Verander de poortsnelheid naar 9600), controleer de gereedheid van het bord met het commando
> print(knooppunt.chipid())
10013490

Eerste script

Als u problemen ondervindt bij het werken met scripts, is het raadzaam om 3,3V-stroom niet via USB/UART te leveren, maar vanuit een aparte bron. De spanning moet exact 3,3V zijn, bijvoorbeeld via een gestabiliseerde voedingsmodule op AMS1117 3,3V 800ma.

Om scripts in de ESP8266 te schrijven en te laden, wordt een kleine en handige IDE gebruikt:

Ons eerste script schakelt de LED elke 2 seconden uit en weer aan:
- Schakel de stroom uit, sluit een weerstand en een LED aan op GPIO2. Schakel de stroom in;
- Start ESPlorer, selecteer gewenste COM en poortsnelheid 9600, klik op Openen;
- Plak de code en klik op Opslaan in ESP;

Pin = 4 --GPIO2 gpio.mode(pin, gpio.OUTPUT) voor i=1, 10, 1 do gpio.write(pin, gpio.LOW) tmr.delay(2000000) gpio.write(pin, gpio.HIGH ) tmr.delay(2000000) einde
- Om opnieuw te starten, klikt u op DoFile.

De DHT11-sensor aansluiten

Om geavanceerder werk met NodeMCU-firmware te demonstreren, zullen we de DHT11-sensor verbinden met de ESP-01:
- DHT11 VCC naar USB/UART VCC
- DHT11 GND naar USB/UART GND
- DHT11 Uit naar USB/UART GPIO2

Code van gebruiker Pigs Fly van het ESP8266.com-forum

Werkt voor DHT11 op ESP-07 (versie met 16 pinnen) en ESP-01 - Alleen 20141219-firmware getest. --De timing van de datastroomacquisitie is van cruciaal belang. Er is --nauwelijks genoeg snelheid om mee te werken om dit mogelijk te maken. --Wijs vars vooraf toe die in de lus worden gebruikt. bitStream = () voor j = 1, 40, 1 do bitStream[j]=0 end bitlength=0 pin = 4; gpio.mode(pin, gpio.OUTPUT) gpio.write(pin, gpio.LOW) tmr.delay(20000) --Gebruik de truc van Markus Gritsch om het lezen/schrijven op GPIO te versnellen gpio_read=gpio.read gpio_write= gpio.write gpio.mode(pin, gpio.INPUT) --bus zal uiteindelijk altijd stoppen, maak je geen zorgen over een time-out terwijl (gpio_read(pin)==0) c=0 eindigt terwijl (gpio_read(pin)= =1 en c<100) do c=c+1 end --bus will always let up eventually, don"t bother with timeout while (gpio_read(pin)==0) do end c=0 while (gpio_read(pin)==1 and c<100) do c=c+1 end --acquisition loop for j = 1, 40, 1 do while (gpio_read(pin)==1 and bitlength<10) do bitlength=bitlength+1 end bitStream[j]=bitlength bitlength=0 --bus will always let up eventually, don"t bother with timeout while (gpio_read(pin)==0) do end end --DHT data acquired, process. Humidity = 0 HumidityDec=0 Temperature = 0 TemperatureDec=0 Checksum = 0 ChecksumTest=0 for i = 1, 8, 1 do if (bitStream >2) dan Vochtigheid = Vochtigheid+2^(8-i) eindpunt voor i = 1, 8, 1 do if (bitStream > 2) dan VochtigheidDec = VochtigheidDec+2^(8-i) eindpunt voor i = 1, 8, 1 do if (bitStream > 2) then Temperature = Temperatuur+2^(8-i) end end for i = 1, 8, 1 do if (bitStream > 2) then TemperatureDec = TemperatureDec+2^(8-i ) end end for i = 1, 8, 1 do if (bitStream > 2) then Checksum = Checksum+2^(8-i) end end ChecksumTest=(Vochtigheid+VochtigheidDec+Temperatuur+TemperatuurDec) % 0xFF print ("Temperatuur: "..Temperatuur.."."...TemperatuurDec) print ("Vochtigheid: "..Vochtigheid.."."..VochtigheidDec) print ("ChecksumOntvangen: "..Checksum) print ("ChecksumTest: "..ChecksumTest )


Mijn excuses voor de kwaliteit van de video, ik heb hem met mijn telefoon gefilmd.

HTTP-server

Een voorbeeld van verbinding maken met een Wifi-toegangspunt en reageren op een verzoek via HTTP.

Wifi.setmode(wifi.STATION) wifi.sta.config("SSID", "wachtwoord") print(wifi.sta.getip()) srv:listen(80,function(conn) conn:on("ontvangen", function(conn,payload) print(payload) conn:send("

Hallo gebruiker.

") einde) einde)

Epiloog

De ESP8266-chip is absoluut een doorbraak, vooral qua prijs-kwaliteitverhouding. Natuurlijk is het het vermelden waard bestaande problemen in originele en niet-originele firmware, maar er wordt aan gewerkt en ik hoop dat in de toekomst soortgelijke chips in elke ketel zullen worden ingebouwd. Van plan om +156 te kopen Toevoegen aan favorieten Ik vond de recensie leuk +103 +196

... Over het algemeen beperkt dit materiaal zich niet tot slechts één Arduino-onderwerp.

Het onderwerp ESP8266 is een behoorlijk moeilijk onderwerp. Maar als je hiermee werkt Wi-Fi-modules in de Arduino IDE-ontwikkelomgeving daalt de instapdrempel naar een niveau dat acceptabel is voor de gemiddelde Arduino-gebruiker. En niet alleen de Arduino-man, maar iedereen die iets over dit onderwerp wil vertellen, en zonder veel tijd te besteden aan het lezen van de documentatie voor de chip en het bestuderen van de API voor deze modules.

Deze video dupliceert volledig het materiaal dat in het onderstaande artikel wordt gepresenteerd.

Welnu, we weten al hoe we de ESP8266 moeten aansluiten en in de programmeermodus moeten zetten, laten we nu verder gaan met iets nuttigs.

Ik zeg meteen dat zodra we de module in de Arduino-ontwikkelomgeving programmeren, we de oorspronkelijke firmware vernietigen en dat we niet langer met de module kunnen werken met behulp van AT-opdrachten. Persoonlijk word ik er niet koud/heet van, maar als iemand het nodig heeft, laat ik je tegen het einde van het artikel zien hoe je de native firmware terug in de module kunt flashen, of in een soort bootloader zoals NodeMcu.

Download om te beginnen de nieuwste versie van Arduino IDE op de officiële website, momenteel is dit 1.6.7. Oudere versies zoals 1.0.5. passen niet omdat ze simpelweg niet de nodige functionaliteit hebben, en dansen met een tamboerijn interesseert ons niet, toch?

We starten de ontwikkelomgeving en gaan onmiddellijk naar Bestand/Instellingen:

Http://arduino.esp8266.com/stable/package_esp8266com_index.json

Ga vervolgens naar Extra/Bord:/Board Manager...:

Er verschijnt een bordmanagervenster voor ons, blader er helemaal doorheen, en als alles correct is gedaan, zullen we zoiets als dit zien:

Klik met de cursor op het opschrift " esp8266 door ESP8266 Gemeenschap"daarna hebben we een knop "Installeren", selecteer de gewenste versie, ik neem de nieuwste, vandaag is het 2.1.0 en installeer deze. De ontwikkelomgeving downloadt de bestanden die hij nodig heeft (ongeveer 150 megabytes) en tegenover de opschrift " esp8266 door ESP8266 Gemeenschap""GEÏNSTALLEERD" zal verschijnen, dat wil zeggen geïnstalleerd:

We scrollen door de lijst met borden en zien dat we veel verschillende ESP's in de lijst hebben, neem "Generieke ESP8266-module":

Ga naar “Tools” en selecteer de gewenste COM-poort (voor mij is het COM32), stel vervolgens de uploadsnelheid in: “115200”:

We stellen de snelheid in op 74880 en "NL & CR" en schakelen opnieuw uit en schakelen de stroom in en deze zal reageren met wat foutopsporingsinformatie:

Merk op dat 74880 niet de hoofdsnelheid is van de ESP8266, hij verzendt gewoon daarop foutopsporingsinformatie. Als de module niets naar de console stuurt, is er mogelijk iets verkeerd aangesloten.

Standaard zou de snelheid 115200 moeten zijn, maar in in sommige gevallen misschien 9600 en anderen... Probeer het dus op te pakken.

Na selectie vereiste snelheid we sturen de “AT” -module en deze zou moeten antwoorden dat alles “OK” is. Het commando "AT+GMR" geeft informatie over de firmware weer.

Voordat je de ESP8266 gaat flashen Arduino-IDE Ik raad u aan het artikel tot het einde te lezen.

Laten we nu proberen de ESP8266 te flashen via Arduino IDE. We hebben de module in de programmeermodus gezet (hoe je dit moet doen, heb ik geschreven).

Laten we een standaard LED aan de flitser toevoegen:

// Door Mr. PodelkinTs youtube.com/RazniePodelki // speciaal voor site/post/271754/ #define TXD 1 // GPIO1/TXD01 void setup() ( pinMode(TXD, OUTPUT); ) void loop() ( digitalWrite( TXD, HOOG); vertraging (1000); digitalWrite (TXD, LAAG);

Geflitst? Dit betekent dat alles correct is gedaan. Waar heb ik begrepen dat de LED op de eerste pin is aangesloten? In het vorige artikel staat een afbeelding met pinouts van verschillende modules, en er is een markering van de poorten bij gebruik van de Arduino-bootloader (pinnen zijn roze gemarkeerd).

Het laten knipperen van een LED is natuurlijk goed, maar we moeten een soort webserver installeren of de LED op zijn minst gaan besturen met behulp van knoppen in de browser, toch? Maar ik zal je hier een andere keer over vertellen.

En nu hoe je native firmware kunt flashen, en hoe je zelfs een module kunt flashen met bootloaders van derden. Voor ESP8266 is er een programma als NodeMCU Flasher, dat oorspronkelijk bedoeld is voor het flashen van de NodeMCU-bootloader. Maar het bleek dat het perfect andere firmware flitst.

Ik zal voor het gemak een archief met dit programma en firmware bij het artikel voegen, maar je kunt altijd een nieuwe versie van NodeMCU Flasher downloaden.

In de map "nodemcu-flasher-master" bevinden zich 2 mappen, Win64 en Win32, en afhankelijk van de bitdiepte van uw besturingssysteem selecteert u degene die u nodig heeft. Voer vervolgens in de map Release “ESP8266Flasher.exe” uit en bekijk de programma-interface:

Selecteer de gewenste COM-poort en ga naar het tabblad “Config”, verwijder het kruisje naast “INTERNAL://NODEMCU” en zet het een punt lager, zoals in de screenshot:

(Als je de NodeMCU-bootloader wilt flashen, verwijder dan het kruisje waar het niet was en plaats het waar het was, dat wil zeggen in de buurt van "INTERNAL://NODEMCU").

Vervolgens klikken we op het tandwiel en selecteren waar onze firmware zich bevindt, de firmware heeft meestal het *.bin-formaat (in het bijgevoegde archief is dit “v0.9.5.2 AT Firmware.bin” dat zich in de hoofdmap bevindt), en selecteer ook “0x00000” als en hoger.

We keren weer terug naar het tabblad “Bediening”, zetten de module in de programmeermodus en klikken op “Flash”:

Dat is alles, de module is begonnen met flitsen. Vergeet na het flitsen niet de module opnieuw op te starten en voila, hij is geflitst met de firmware die we nodig hebben.

We controleren met het AT-commando “AT+GMR” of we alles correct hebben gedaan:

Zoals je ziet is alles vlot verlopen.

Zo fijn dat er naast firmware voor het gebruik van de ESP8266 als WiFi-module aangestuurd door een externe microcontroller, veel firmware bestaat om hem als microcontroller voor verschillende doeleinden te gebruiken, onder meer op het gebied van Internet of Things. In deze serie artikelen verkennen we de mogelijkheden ESP8266 met firmware KnooppuntMCU en leer een scripttaal LUA.

Wat is ESP8266?

ESP8266 is een microcontroller met een WiFi-interface. Het kan worden gebruikt als WiFi-module en als microcontroller.

Voordelen van ESP8266: WiFi-interface, 32-bit kern met voldoende prestaties, lage prijs.
Nadelen: Vergeleken met andere 32-bits microcontrollers zijn de randapparatuur teleurstellend.

ESP8266 is ideaal voor thuisprojecten, Internet of Things. De ESP8266 is programmeerbaar via de seriële UART-poort, dus er is geen speciale programmeur nodig om de firmware te flashen. Het bijzondere van deze microcontroller is dat hij een programma kan uitvoeren dat zich op een extern Flash-geheugen bevindt. Hierdoor kan de fabrikant het volume van Flash “vergroten”, wat ook een pluspunt is.

Er zijn verschillende modules beschikbaar op basis van ESP8266:

ESP-01
ESP-02
ESP-03
ESP-04
ESP-05
ESP-06
ESP-07
ESP-08
ESP-09
ESP-10
ESP-11
ESP-12S
ESP-12E
ESP-12F

Bestaat verschillende versies borden met reeds afgedichte ESP8266-modules, spanningsstabilisatoren, een microschakeling om de werking te garanderen seriële poort UART via USB en gekamde pinnen, knoppen en dergelijke. Om met dergelijke kaarten te werken, sluit u ze gewoon aan op de USB-poort van uw computer. Er is geen extra uitrusting vereist. Het is erg handig. Eén zo'n bord is NodeMCU. In de voorbeelden zal ik een NodeMCU-bord gebruiken met een ESP-12F-module. Maar u kunt eenvoudig een module nemen, bijvoorbeeld ESP-01, er een UART-USB-adapter op aansluiten en er op dezelfde manier mee werken. De ESP-01 heeft minder geheugen en minder pinnen om te gebruiken, maar werkt verder op dezelfde manier.


Wat is NodeMCU?

NodeMCU - open source gratis project gebaseerd op de Lua-scripttaal. De firmware is behoorlijk krachtig en stelt je in staat zeer snel verschillende standaardprojecten te implementeren. Vandaag gaan we bijvoorbeeld als introductie een WiFi-stopcontact maken dat wordt bestuurd door mobiele telefoon en met een webinterface. De firmware kan Lua-scripts uitvoeren zowel vanaf de seriële UART-poort (vergelijkbaar met AT-opdrachten) als vanaf de interne flash-geheugen(scripts uitvoeren). Lua-scripts worden in Flash opgeslagen op het interne bestandssysteem. Het bestandssysteem is plat en vereenvoudigd. Die. geen submappen. Toch is het cool. Vergeet niet dat de ESP8266 slechts een microcontroller is. Vanuit scripts kunt u ook toegang krijgen tot bestanden, verschillende informatie lezen en opslaan. NodeMCU is modulair. Waarmee u enerzijds de functionaliteit kunt vergroten en anderzijds de firmware alleen uit de vereiste modules kunt samenstellen, zonder geheugen te verspillen.

NodeMCU werkt met protocollen voor gegevensuitwisseling - HTTP, MQTT, JSON, CoAP.
Ondersteund diverse sensoren
ADXL345 versnellingsmeters,
magnetometers HMC5883L,
L3G4200D gyroscopen,
temperatuur- en vochtigheidssensoren AM2320, DHT11, DHT21, DHT22, DHT33, DHT44
temperatuur-, vochtigheids- en atmosferische druksensoren BME280,
temperatuursensoren, atmosferische druk BMP085,
veel displays werken op I2C- en SPI-bussen. Met de mogelijkheid om met verschillende lettertypen te werken.
TFT-schermen ILI9163, ILI9341, PCF8833, SEPS225, SSD1331, SSD1351, ST7735,
slimme LED's en LED-controllers – WS2812, tm1829, WS2801, WS2812,
ondersteunde interfaces – 1-Wire, I2C, SPI, UART,

U kunt ook een encryptiemodule, een taakplanner, een real-time klok, een kloksynchronisatieprotocol via internet SNTP, timers, een ADC-kanaal (één) gebruiken, audiobestanden afspelen, een PWM-signaal genereren aan de uitgangen (tot 6), gebruik sockets, er is ondersteuning voor FatFS, d.w.z. je kunt SD-kaarten aansluiten enzovoort.

Wat is Lua-taal?

Lua is een geïnterpreteerde taal die, zoals de meeste moderne geïnterpreteerde talen, gecompileerde versies van scripts kan opslaan. Hiermee kunt u de werksnelheid verhogen. Lua is gepositioneerd als multi-paradigma. Het is niet ingewikkeld, en als je al in welke taal dan ook hebt geprogrammeerd, zul je Lua heel snel leren. Als je net begint met programmeren, zal Lua je verrassen met de toegankelijkheid voor beginners.

Er zijn enkele bijzonderheden bij het werken met Lua op NodeMCU. Dit komt vooral door de beperkte geheugencapaciteit van de ESP8266-microcontroller. Moet blijven plakken eenvoudige regels en de stijl van werken met Lua behouden. Ik zal je later over deze regels vertellen. Als je dezelfde stijl aanhoudt als bij het schrijven van programma's in C, dan zul je niet de volledige kracht van Lua en de NodeMCU-firmware kunnen voelen. Wanneer je in Lua begint te schrijven, wordt het boeiend en begin je steeds grotere taken uit te voeren. Je verliest het gevoel dat je met een microcontroller werkt en laadt jezelf onbewust op met taken die de mogelijkheden van een microcontroller te boven gaan. Er moet aan worden herinnerd dat de ESP8266 beperkte middelen en het mag niet vol zitten met taken die microcomputers of volwaardige computers kunnen uitvoeren.

LUA-documentatie in het Russisch: http://www.lua.ru/doc/
Leer LUA in 15 minuten: http://tylerneylon.com/a/learn-lua/

Waar kan ik NodeMCU downloaden?

Natuurlijk kun je downloaden broncodes NodeMCU (https://github.com/nodemcu/nodemcu-firmware/releases/) en compileren met de noodzakelijke parameters. Maar dat zullen wij niet doen. Er is een website https://nodemcu-build.com, waarop u NodeMCU kunt samenstellen met de modules die u nodig heeft. U markeert eenvoudig de modules die u nodig heeft, geeft uw e-mailadres aan en klikt op de onderstaande knop “ Begin met bouwen“. Eerst aan opgegeven e-mailadres Ik ontvang een brief waarin staat dat de montage is begonnen. En dan een melding van voltooiing en downloadlinks geheel getal En vlot versies. Als u geen drijvende-kommaberekeningen in uw project wilt gebruiken, download dan “ geheel getal“. Wees niet hebzuchtig en neem modules op die u niet van plan bent te gebruiken. U kunt het op elk gewenst moment ophalen nieuwe firmware door de ontbrekende module toe te voegen. Ik heb bijvoorbeeld NodeMCU gebouwd met de volgende modules:

Hoe NodeMCU uploaden naar ESP8266?

Nu we het NodeMCU-firmwarebestand hebben, moeten we het uploaden naar de ESP8266. Allereerst, wanneer u het NodeMCU-bord op uw computer aansluit, wordt een virtueel Com haven. Meestal de nieuwste versies Windows-installatie geen stuurprogramma's vereist. Ubuntu herkent het aangesloten apparaat onmiddellijk.

NodeMCU-firmware voor Windows

git-kloon https://github.com/themadinventor/esptool.git

Flash met het commando:

Sudo python esptool.py --port /dev/ttyUSB0 write_flash 0x00000 The_Path_To_The_NodeMCU_Firmware.bin

/Dev/ttyUSB0– de poort waarop de ESP8266 hangt.
Het_pad_naar_het_knooppuntMCU_Firmware.bin– pad naar het firmwarebestand.

Trouwens, esptool kan ook onder Windows worden gebruikt. esptool geschreven in Python, om op Windows te werken moet je Python installeren.

esptool nuttig voor ons om te vullen binaire bestanden naar het NodeMCU-bestandssysteem. U kunt alle bestanden uploaden, inclusief scripts. Je kunt zelfs in Kladblok scripts schrijven, maar ik geef er de voorkeur aan ESPlorer.

ESPlorer, init.lua – het schrijven van het eerste script

We zullen het ESPlorer-programma gebruiken om scripts te schrijven en te uploaden. Dit is een platformonafhankelijk programma geschreven in Java en vereist ook geen installatie. Werkt hetzelfde op zowel Windows als Ubuntu.

Pak het archief uit.

Onder Windows voeren we het bestand uit ESPlorer.bat

Sudo java-jar ESPlorer.jar

Geef de poort en snelheid op 9600 :

En druk op “ Open“. We zullen het volgende zien

ESPlorer heeft een slechte functie. Het maakt niet altijd duidelijk verbinding met de NodeMCU. Als u een opdracht probeert te verzenden (met behulp van de Versturen) vuilnis vliegt in de console in plaats van een normaal antwoord. Soms wordt na een paar herhalingen alles beter. Als u hier last van heeft, probeer dan de verbindingssnelheid te wijzigen naar 115200.


Laten we beginnen met het maken van het eerste script in Lua. Script met naam init.lua start automatisch nadat NodeMCU is gestart. Laten we een bestand maken init.lua.

Laten we slechts één regel afdrukken:

Afdrukken("Ja, het werkt!")

Sla het bestand op als init.lua. Na het opslaan wordt het bestand uitgevoerd en zouden we het eerste script moeten zien draaien.

Standaard wordt het bestand op de computerschijf opgeslagen en naar de ESP8266 geüpload.

Nu over het grootste probleem dat NodeMCU heeft. In het geval van enkele kritieke fouten (dit gebeurt niet vaak, maar als het gebeurt, wordt het lange tijd onthouden) kan NodeMCU opnieuw opstarten. En het ergste dat kan gebeuren is een cyclische herstart. Dit gebeurt als u een kritieke fout maakt in een script dat automatisch wordt gestart. NodeMCU start, voert een “buggy”-script uit, komt een kritieke fout tegen en wordt opnieuw opgestart. En zo voort tot in het oneindige.

Om mezelf te beschermen tijdens het leren van NodeMCU, gebruik ik de hieronder beschreven techniek. In het startscript init.lua we starten een timer die slechts één keer en daarna werkt opgegeven tijd(V in dit geval na 5 seconden) zal de procedure worden uitgevoerd voor het starten van een ander script (in dit geval hoofd.lua). Verder niets in het script init.lua wij niet. Alle bewerkingen worden in het script uitgevoerd hoofd.lua. Dus als we een fout maken in het script hoofd.lua, en NodeMCU gaat naar cyclisch opnieuw opstarten, na het opnieuw opstarten hebben we 5 seconden om het "buggy" -script te verwijderen of te repareren.

init.lua-tekst:

Print ("Wachten ...") tmr.register (0, 5000, tmr.ALARM_SINGLE, functie (t) tmr.unregister (0); print ("Begint ..."); dofile ("main.lua") einde) tmr.start (0)

Bovendien maakt deze aanpak het gemakkelijk om er een op te nemen vereist script, genoeg in het bestand init.lua in plaats van hoofd.lua geef de naam van een ander script op. Dit is erg handig als u meerdere projecten of meerdere versies van een script op één bord test.

Maak verbinding met Wifi of creëer je eigen Wifi-punt

Om verbinding te maken met WiFi, maakt u main.lua aan en schrijft u:

WiFi-instelling wifi.setmode(wifi.STATION) lokaal cfg=() cfg.ssid="MijnWiFi" cfg.pwd="MijnWiFiPassword" wifi.sta.config(cfg) cfg = nul collectgarbage()

Na een succesvolle verbinding ontvangt de module een IP-adres. Je kunt het achterhalen met behulp van het commando:

Wifi.sta.getip()

Als we willen dat de ESP8266 zijn eigen land creëert eigen wifi punt:

WiFi AP-instelling wifi.setmode(wifi.STATIONAP) cfg=() cfg.ssid="ESPWIFI" cfg.pwd="1234567890" wifi.ap.config(cfg) cfg = nul collectgarbage()

Opmerking: WiFi-hotspot werkt niet als het wachtwoord korter is dan 8 tekens. Standaard is het IP-adres van het punt altijd 192.168.4.1

Je kunt het achterhalen met het commando:

Wifi.ap.getip()

Wat is er gebeurd afval verzamelen()? Functie afval verzamelen is een vuilnisophaler. Het moet aan het einde van elk script worden aangeroepen. Let op de variabele cfg verklaard als lokaal. Het zal alleen beschikbaar zijn in het huidige script. Als lokaal verwijder en vervolgens de variabele cfg zou globaal zijn en beschikbaar in andere scripts.

GPIO. Knipperende LED

Om het relais te besturen (we gaan tenslotte een wifi-aansluiting maken), moet je leren werken met de pinnen GPIO. Laten we voorlopig proberen te gebruiken GPIO pin als uitgang en stel het signaalniveau hoog en laag in. Laten we voor de duidelijkheid de LED aansluiten zoals weergegeven in het diagram.

My_pin_number = 1 -- Stel de bedrijfsmodus in als uitvoer gpio.mode (my_pin_number, gpio.OUTPUT) -- Stel in hoog niveau gpio.write (my_pin_number, gpio.HIGH) -- Stel het lage niveau in gpio.write (my_pin_number, gpio.LOW) -- Knipper de LED 10 keer gpio.serout (1, gpio.HIGH, (+990000,990000), 10, 1)

Pinnummering:

IO-indexESP8266-pin
0 GPIO16
1 GPIO5
2 GPIO4
3 GPIO0
4 GPIO2
5 GPIO14
6 GPIO12
7 GPIO13
8 GPIO15
9 GPIO3
10 GPIO1
11 GPIO9
12 GPIO10

D0(GPIO16) kan alleen worden gebruikt als gpio lezen/schrijven. Geen ondersteuning voor open-drain/interrupt/pwm/i2c/ow

NodeMCU-bord

Let op: Er zijn verschillende versies van Nodemcu-borden. De pinout van je bord kan variëren.

Webaansluiting

Nu gaan we een server maken die op de opgegeven poort werkt (laat het 333 zijn). Vervolgens maken we verbinding met onze server via een terminalprogramma, waarbij we het IP-adres en de poort specificeren. En dan gaan we gegevens uitwisselen.

Main.lua-script:

WiFi AP-instelling wifi.setmode(wifi.STATIONAP) cfg=() cfg.ssid="ESPTEST" cfg.pwd="1234567890" wifi.ap.config(cfg) --Create Server sv=net.createServer(net.TCP ) function receiver(sck, data) -- Ontvangen gegevens afdrukken print(data) -- Antwoord verzenden sck:send("Ontvangen: "..data) end if sv then sv:listen(333, function(conn) conn:on ("ontvangen", ontvanger) conn:send("Hallo!") end) end print("Gestart.")

Nu verhoogt ons script het Wi-Fi-punt en creëert een server die wacht op een verbinding op poort 333. Op het moment dat er verbinding wordt gemaakt, stuurt de server de client de tekenreeks “ Hallo!“, en nadat het gegevens van de klant heeft ontvangen, zal het de string “ Ontvangen:' en toen accepteerde hij alles.

Nu kunnen we onze mobiele telefoon verbinden Wifi-punt ESP8266. In principe is het niet nodig om een ​​punt aan te maken. U kunt het script herschrijven en de ESP8266 verbinding laten maken met uw WiFi-netwerken. Vervolgens moet u het IP-adres achterhalen en dit vervolgens gebruiken in plaats van 192.168.4.1, dat verder in de voorbeelden wordt gebruikt.

Maar we hebben nog steeds een terminalprogramma nodig om verbinding te maken met het ESP8266 IP-adres (192.168.4.1) en de opgegeven poort (333). U kunt PuTTY op een gewone computer installeren. Voor Android mobiele telefoons die ik gebruik JuiceSSH.

Gegevens overbrengen van mobiele telefoon met JuiceSSH

Installeren en starten RoboRemoGratis

Maak een verbinding met de server. Het is raadzaam dat de mobiele telefoon/tablet verbonden is met hetzelfde WiFi-netwerk waar de server zich bevindt. In dit geval onze ESP8266. Ga naar “Menu”, selecteer “verbinden”

Selecteer het verbindingstype “Internet (TCP)”

Geef IP en poort op

De interface selecteren. Met het programma kunt u verschillende interfaces met verschillende bedieningselementen maken.

Ga vervolgens naar de interfacebewerkingsmodus

Klik op vrije ruimte en kies wat we willen installeren. We zullen knoppen gebruiken. Selecteer “knop”

Hierna wordt een knop op de interface geïnstalleerd. Het kan worden verplaatst en vergroot of verkleind.

Om de naam van een knop te wijzigen, moet u erop klikken en 'Tekst instellen' selecteren

Vervolgens specificeren we nog een parameter: “persactie instellen”. Laten we het op "1" zetten. Wanneer u op de knop klikt, wordt de opgegeven string verzonden via de verbinding die we hebben gemaakt. Die. Onze ESP8266 ontvangt het teken “1” en zet de LED aan.

Laten we op dezelfde manier de knop "Uit" maken en de drukactie "0" instellen.

Onze interface is klaar. Verlaat de bewerkingsmodus door het menu-item “ui niet bewerken” uit te voeren.

Als de verbinding met de server (ESP8266) succesvol was, kunt u deze gebruiken. Door op de “Aan”-knop te drukken moet de LED gaan branden, door op de “Uit”-knop te drukken moet de LED uitgaan.

Webinterface

Er is een andere manier: je kunt het doen Webinterface en bedien de LED ook via een browser.

Hetzelfde script + webinterface:

WiFi AP instellen wifi.setmode(wifi.STATIONAP) cfg=() cfg.ssid="ESPTEST" cfg.pwd="1234567890" wifi.ap.config(cfg) --Pin-modus instellen my_pin_number = 1 gpio.mode(my_pin_number , gpio.OUTPUT) --Create Server sv=net.createServer(net.TCP) functieontvanger(sck, data) if string.sub (data, 0, 1) == "1" dan gpio.write(my_pin_number, gpio .HIGH) else if string.sub (data, 0, 1) == "0" then gpio.write(my_pin_number, gpio.LOW) end end print(data) end if sv then sv:listen(333, function(conn ) conn:on("receive",) conn:send("Hallo!") end) end --Maak HTTP-server http=net.createServer(net.TCP) functie receiver_http(sck, data) lokaal verzoek = string match (data,"([^\r,\n]*)[\r,\n]",1) if request == "GET /on HTTP/1.1" then gpio.write(my_pin_number, gpio.HIGH) end if request == "GET /off HTTP/1.1" then gpio.write(my_pin_number, gpio.LOW) end sck:on("sent", function(sck) sck:close() end) local response = "HTTP/ 1.0 200 OK\r\nServer: NodeMCU op ESP8266\r\nContenttype: text/html\r\n\r\n".. " NodeMCU op ESP8266".. "

NodeMCU op ESP8266

".. "
".. "Op Uit".. "" sck:send(response) end if http then http:listen(80, function(conn) conn:on("receive", receiver_http) end) end print("Gestart.")

Een korte uitleg over hoe een webserver in het algemeen werkt, en ons script in het bijzonder. De standaardpoort voor een webserver is 80. d.w.z. wanneer u in de browser typt http://192.168.4.1/, dan maakt de browser verbinding met de server (192.168.4.1) op poort 80 en verzendt een verzoek. Het verzoek ziet er ongeveer zo uit:

GET / HTTP / 1.1 Host: 192.168.4.1 User-Agent: Mozilla / 5.0 (Windows NT 5.1; rv: 2.0.1) Gecko / 20100101 Firefox Accepteren: tekst / html, applicatie / xhtml + xml, applicatie / xml; q = 0,9, * / *; q = 0,8 Accepteer-taal: ru-RU, ru; q = 0,8, en-VS; q = 0,5, en; q = 0,3 Accepteren-codering: gzip, leeglopen Verbinding: keep-alive Upgrade-onveilige verzoeken: 1

De eerste regel van de vraag is voor ons interessant: “ GET / HTTP/1.1“. Het bevat de URL. Als u in de browser typt http://192.168.4.1/ op , dan is de eerste regel van de zoekopdracht “ KRIJGEN /op HTTP/1.1“. En als u in de browser typt http://192.168.4.1/ uit dan zal het zijn “ KRIJGEN / uit HTTP/1.1“. Het is deze regel die het script analyseert en, afhankelijk van de ontvangen URL, de LED aan of uit zet.

Vervolgens stuurt het script een html-pagina. Maar na het verzenden moet u de verbinding verbreken. Omdat het verzenden enige tijd kost en het wachten op het einde van het verzenden technisch gezien stom is, is de gebeurtenis “ verstuurd” (verzonden) verbind de functie met de string sck:sluiten(). Dit gebeurt in de regel: sck:on(“verzonden”, functie(sck) sck:close() einde). P Hierna wordt de html-pagina verzonden sck:verzenden(antwoord). MET de crypte blijft werken. Wanneer het antwoord volledig is verzonden, werkt het sck:sluiten().

Pagina's groot formaat Op deze manier kun je het niet verzenden. Zware inhoud moet in stukken worden verzonden. Dit zal in een ander artikel in meer detail worden besproken.

We verbinden het relais met de belasting

Aandacht! Een spanning van meer dan 40 Volt is gevaarlijk voor mensenlevens! Wees voorzichtig en voorzichtig bij het monteren en aansluiten van het circuit huishoudelijke apparaten. Raak spanningvoerende delen niet aan.

Laten we nu in plaats van een LED een relaismodule aansluiten, en als belasting bijvoorbeeld een lamp, een verwarming, een compressor voor een aquarium, een ventilator, enz.

Er kunnen enkele nuances zijn bij het aansluiten van een relais. Als het relaisblok optisch geïsoleerd is (met een optocoupler), hoeft u hoogstwaarschijnlijk niets opnieuw te doen. Als het relaisblok geen optische isolatie heeft, zoals het mijne, dan zul je het werk opnieuw moeten doen met GPIO, aangezien eerst het relais wordt ingeschakeld laag niveau, en niet hoog, en ten tweede is het hoge niveau van de ESP8266 3,3V, voor een relaisblok van 5 volt is dit niet genoeg, dus moest ik de uitgang configureren als OPENDRAIN, waarna alles werkte zoals het zou moeten.

De definitieve versie van het script ziet er als volgt uit:

WiFi AP instellen wifi.setmode(wifi.STATIONAP) cfg=() cfg.ssid="ESPTEST" cfg.pwd="1234567890" wifi.ap.config(cfg) --Pin-modus instellen my_pin_number = 1 --gpio.mode (my_pin_number, gpio.OUTPUT) gpio.mode(my_pin_number, gpio.OPENDRAIN) --Create Server sv=net.createServer(net.TCP) function receiver(sck, data) if string.sub (data, 0, 1) = = "1" then --gpio.write(my_pin_number, gpio.HIGH) gpio.write(my_pin_number, gpio.LOW) else if string.sub (data, 0, 1) == "0" then --gpio.write (mijn_pinnummer, gpio.LOW) gpio.write(mijn_pin_nummer, gpio.HIGH) end end print(data) end if sv then sv:listen(333, function(conn) conn:on("receive", receiver) conn:send ("Hallo!") end) end --Maak HTTP-server http=net.createServer(net.TCP) functie ontvangst_http(sck, data) print(data) lokaal verzoek = string.match(data,"([^\r ,\n]*)[\r,\n]",1) if request == "KRIJG /op HTTP/1.1" then --gpio.write(mijn_pin_nummer, gpio.HIGH) gpio.write(mijn_pin_nummer, gpio. LOW) end if request == "GET /off HTTP/1.1" then --gpio.write(my_pin_number, gpio.LOW) gpio.write(my_pin_number, gpio.HIGH) end sck:on("sent", function(sck ) sck:close() collectgarbage() end) local response = "HTTP/1.0 200 OK\r\nServer: NodeMCU op ESP8266\r\nContenttype: tekst/html\r\n\r\n".. " NodeMCU op ESP8266".. "

NodeMCU op ESP8266

".. "
".. "Op Uit".. "

" sck:send(response) end if http then http:listen(80, function(conn) conn:on("receive", receiver_http) end) end print("Gestart.")

Nu kunnen we de “socket” aan en uit zetten vanaf een mobiele telefoon met behulp van het RoboRemoFree-programma of met behulp van een browser. Natuurlijk, met gewone computer Je kunt het ook via de browser beheren.



Dit is allemaal goed, maar hoe nu verder? Als we 5, 10, 20 hebben soortgelijke apparaten? Hoe u ze kunt combineren, zodat u niet elk apparaat afzonderlijk hoeft te verbinden. Hiervoor bestaat een MQTT-protocol, maar dat zal een apart onderwerp zijn. In de tussentijd zullen we de mogelijkheden van de ESP8266 en NodeMCU verkennen.

Enkele regels voor het werken met de Lua-taal op NodeMCU

1. Schrijf geen lange scripts. De ESP8266-geheugengrootte is niet oneindig. Verdeel het programma in functionele modules en maak er afzonderlijke scripts van, waarbij u ze uitvoert met behulp van dofile(). Wifi-verbindingscode bijvoorbeeld:

WiFi-instelling wifi.setmode (wifi.STATION) lokaal cfg = () cfg.ssid = "MyWiFi" cfg.pwd = "MyWiFiPassword" wifi.sta.config (cfg) cfg = nul collectgarbage ()

kan in een apart script worden geplaatst “ wifi.lua' en voer het uit vanuit het hoofdscript met de opdracht dofile(“wifi.lua”).

2. Declareer variabelen die alleen in het huidige script worden gebruikt als lokaal. Aan het einde van het script, wanneer de variabele niet langer nodig is, wijst u er een waarde aan toe nul en bel expliciet de vuilnisman afval verzamelen()