Controlul rezervorului Arduino prin Wi-Fi. Controlul mașinii prin WiFi utilizând ESP8266 NodeMCU Arduino Android WiFi control al încărcării

Te-ai gândit vreodată să controlezi orice dispozitiv electronic folosind smartphone-ul tău? De acord, ar fi foarte tare să controlezi un robot sau orice alte dispozitive de pe smartphone-ul tău. Oferim o lecție simplă pentru începători și manechini despre cum să controlezi un smartphone folosind Arduino prin Bluetooth. Dacă după această lecție vrei să cunoști mai bine Arduino, poți găsi cărți despre el.

Pasul 1. De ce avem nevoie

Dispozitive

Modul - Modul Bluetooth HC 05/06
Placă - Arduino
Diodă emițătoare de lumină (LED)
Rezistor - 220Ω
dispozitiv Android

Software

Arduino IDE
Android Studio (de fapt nu este necesar, pentru că veți găsi mai jos aplicația pentru Android)

Pasul 2. Cum funcționează

De obicei facem acest pas la final, dar ca să înțelegeți ce avem de realizat, uitați-vă la rezultatul la acest pas intermediar. De asemenea, am publicat un tutorial video pas cu pas mai jos.

Pasul 3. Începem să asamblam circuitul

Circuitul din tutorialul nostru este atât de simplu și mic încât trebuie doar să facem câteva conexiuni:

Pini Arduino ___________ Pini pentru modulul Bluetooth
RX (Pin 0)________________________________TX
TX (Pin 1)___________________________RX
5V__________________________VCC
GND_______________________GND

Conectați negativul LED-ului la GND de pe Arduino, iar pozitivul la pinul 13 printr-o rezistență de 220 Ohm - 1 kOhm. În general, în figura noastră de mai jos totul este destul de clar.

Nu conectați ieșirile Bluetooth RX la RX și TX la TX la ieșirile Arduino, nu veți primi date, aici TX înseamnă transmitere, RX înseamnă primire.

Pasul 4: Încărcarea programului în Arduino

Acum trebuie să scriem un program și să-l încărcăm în Arduino. Dacă nu știți încă cum să faceți acest lucru, descărcați cărți. Codul de mai jos este exact ceea ce trebuie să încărcăm în Arduino.

/* Bluetooh Basic: LED ON OFF * Coder - Mayoogh Girish * Website - http://bit.do/Avishkar * Descărcați aplicația: https://github.com/Mayoogh/Arduino-Bluetooth-Basic * Acest program vă permite pentru a controla un LED de pe pinul 13 al arduino folosind un modul bluetooth */ char data = 0; //Variabilă pentru stocarea datelor primite void setup() ( Serial.begin(9600); //Setează baud pentru transmisia de date seriale pinMode(13, OUTPUT); //Setează pinul digital 13 ca pin de ieșire ) void loop() ( if(Serial.available() > 0) // Trimiteți date numai când primiți date: ( data = Serial.read(); //Citiți datele primite și stocați-le în date variabile Serial.print(data); // Imprimați valoarea în interiorul datelor în monitorul serial Serial.print("\n"); //Linie nouă if(data == "1") // Verifică dacă valoarea datelor este egală cu 1 digitalWrite(13, HIGH); // Dacă valoarea este 1, atunci LED-ul se aprinde altfel if(data == "0") // Verifică dacă valoarea datelor este egală cu 0 digitalWrite(13, LOW); //Dacă valoarea este 0, atunci LED-ul se stinge) )

Pasul 5. Cum funcționează procesul

Modulul HC 05/06 operează printr-un canal de comunicație serial. Aplicația Android trimite date secvenţial către modulul Bluetooth atunci când apăsaţi o anumită tastă. Bluetooth-ul de la celălalt capăt primește datele și le trimite către Arduino prin conexiunea TX a modulului Bluetooth (conexiune Arduino RX).

Codul încărcat în Arduino verifică datele primite și le compară. Dacă se primește un „1”, LED-ul se aprinde și se stinge când se primește un „0”. Deschideți monitorul portului serial și observați datele primite.

Pasul 6. Aplicație pentru dispozitive Android

În acest tutorial nu vom atinge crearea de aplicații pentru dispozitivele Android. Puteți descărca aplicația de pe GitHub.

Cum se utilizează aplicația?

După ce ne-am conectat prin Bluetooth, trebuie să descarcăm și să instalăm o aplicație care, folosind un smartphone :) ne va controla LED-ul de la distanță. Puteți descărca gratuit aplicația de pe Amazon.com. Conectăm smartphone-ul la modulul Bluetooth HC 05/06:

  1. Porniți modulul HC 05/0
  2. Caut un dispozitiv
  3. Ne conectăm la HC 05/06 introducând parola implicită „1234” sau „0000” (patru zerouri).

După aceea, instalăm aplicația pe smartphone-ul nostru. Să-l deschidem. Selectați un dispozitiv - selectați modulul Bluetooth din listă (HC 05/06). După conectarea cu succes, apăsați butonul ON pentru a aprinde LED-ul și butonul OFF pentru a stinge LED-ul. Apoi puteți face clic pe butonul „Deconectare” pentru a vă deconecta de la modulul Bluetooth.

Acesta a fost un ghid pentru manechini și începători despre cum să conectați un modul Bluetooth cu Arduino. Acest proiect poate fi îmbunătățit și dus la un nivel superior pentru, de exemplu, automatizarea locuinței prin controlul smartphone-ului, robot controlat și multe altele.

Transferul de firmware, actualizări și alte date folosind un fier de lipit și fire nu este cea mai bună soluție pentru Arduino. Cu toate acestea, microcontrolerele pentru arduino wi-fi nu sunt ieftine și nu sunt întotdeauna necesare, motiv pentru care utilizatorii preferă să nu le folosească în proiectele lor în mod inutil.

Dar acum un alt produs chinezesc a cucerit piața; vă puteți conecta propriul dvs. bruiator wi-fi esp8266 la o placă Arduino sau la alt sistem și veți obține o conexiune stabilă cu o serie de alte avantaje. Deci, să ne dăm seama care este wi-fi arduino uno și dacă merită să cumpărați acest modul, precum și ce este de fapt un microcontroler similar pe arduino wi-fi.

Module Wi-Fi disponibile pentru Arduino

În zilele noastre, majoritatea utilizatorilor Arduino nu își mai fac griji pentru prețul unor astfel de dispozitive, deși în urmă cu 3 ani un modul Arduino wi-fi era considerat un lux. Toate acestea datorită bruiajului wi-fi esp8266, ai cărui producători au introdus pe piață un produs complet nou, uimitor prin funcționalitate și, în același timp, destul de ieftin, care a adus o contribuție semnificativă și a creat concurență în această direcție.

Astfel, arduino wi-fi esp8266 este considerat acum cel mai accesibil modul de pe piață, ca toți frații săi. Astfel, prețul pe site-urile străine începe de la 2 dolari, ceea ce vă permite să achiziționați aceste module în loturi și să nu trebuiască să le refașați de o mie de ori, revând contactele pentru a menține funcționalitatea.

La început, acest modul Wi-Fi Arduino a fost folosit în principal ca un scut Wi-Fi Arduino, deoarece era cea mai ieftină opțiune și nu era în niciun fel inferioară celei originale. Dispozitivul este cu adevărat aproape legendar, deoarece nu există dezavantaje semnificative pentru prețul său. Există multe biblioteci, inclusiv cele de utilizator și, de asemenea, acceptă lucrul prin magistralele seriale și cele mai simple comenzi AT și AT+. Datorită acestui fapt, nu este nevoie să studiem vreo semantică a notoriului C99, așa cum este adesea cazul altor microcontrolere terțe.

În consecință, chiar și un începător își va da seama în câteva secunde, iar un profesionist va putea folosi bibliotecile deja pregătite. Alte avantaje includ:

  1. Procesorul este de 160 MHz, dar este de 32 de biți, ceea ce lasă o anumită amprentă asupra performanței. Dar merită să ne amintim că modulul este încă folosit împreună cu plăcile Arduino, care ele însele reduc frecvențele înalte și consumă majoritatea resurselor din motive necunoscute.
  2. Producătorul care a lansat modulul wi-fi esp8266 nu a oprit proiecte interesante, iar acum există o întreagă linie de microcontrolere de calitate dovedită.
  3. Standarde moderne de securitate a rețelei. Desigur, WPA și WPA2 nu mai sunt atât de sigure pe cât ne-am dori, dar prezența lor nu poate decât să ne mulțumească într-un controler atât de ieftin.
  4. 16 porturi de ieșire, inclusiv pe 10 biți, permițându-vă să experimentați cu placa.

Mai important, din cutie veți găsi până la 4 megaocteți de memorie permanentă, în funcție de tipul de placă, iar acest lucru simplifică foarte mult lucrul cu biblioteci mari și chiar cu unele fișiere media. La urma urmei, pe majoritatea plăcilor Arduino, chiar și 1 megaoctet este considerat un lux inaccesibil.

Caracteristicile wi-fi-ului esp8266 sunt cu siguranță încurajatoare, mai ales în comparație cu concurenții săi mai scumpi, dar un utilizator care nu are experiență anterioară cu aceste plăci va avea o întrebare despre cum să-l conecteze. Faptul este că modulul are mult mai mulți ace decât sunt obișnuiți să vadă începătorii și, în consecință, încep să intre în panică. Cu toate acestea, dacă înțelegeți situația, atunci în realitate nu este nimic complicat în ea. Este suficient să vă aprovizionați cu lipit și un fier de lipit și să citiți instrucțiunile.

Cum se conectează un modul Wi-Fi la Arduino

Să ne uităm la conectarea esp8266 esp 12e și ce este un pod wi-fi uart esp8266. La urma urmei, conexiunea și configurarea modulului sunt cele care ridică cele mai multe întrebări.


În primul rând, decideți ce versiune de microcontroler aveți. În primul, LED-urile sunt încorporate lângă pini, iar în al doilea, care a început să fie produs destul de recent, luminile de semnal sunt amplasate lângă antenă.

Înainte de a vă conecta, ar trebui să descărcați cel mai recent firmware, care vă permite să creșteți rata de schimb de pachete la 9600 de unități de informații pe secundă. Și vom verifica conexiunea folosind un cablu usb-ttl și terminalul corespunzător de la CoolTerm.


Pinii pentru conectarea cablului descriși mai sus sunt standard, dar puterea vine printr-un pin de 3,3 volți de la Arduino. Este important de reținut că curentul maxim furnizat de placă nu poate fi setat peste 150 mA, iar modulul wi-fi esp8266 esp 07 și esp8266 witty cloud pentru arduino necesită 240 mA.

Cu toate acestea, dacă nu există altă sursă de curent, puteți folosi versiunea standard de la Arduino, dar puterea plăcii va avea de suferit. Deși, dacă sarcina nu este grea, 70 mA este suficient, fiți pregătit pentru repornirile bruște ale microcontrolerului la orele de vârf și scrieți software-ul corespunzător, astfel încât să filtreze și să împartă fișierele fără a supraîncărca placa.


O altă opțiune de conectare este mai jos. Important - contactele RX-TX sunt conectate cu o reticulă. Deoarece nivelurile de semnal ale modulului ESP8266 sunt de 3,3 V, iar Arduino este de 5 V, trebuie să folosim un divizor de tensiune rezistiv pentru a converti nivelul semnalului.

Înregistrarea unui modul Wi-Fi în Arduino

După cum știți, cu experiență adecvată, puteți asocia scutul esp8266 ex 12e cu un smartphone, dar pentru începători, înregistrarea esp8266 esp 12 în sistemul Arduino provoacă dificultăți. De fapt, este suficient să conectați modulul și să verificați funcționalitatea acestuia prin lansarea mai multor comenzi AT standard prin meniul de depanare.

De exemplu, puteți adăuga intermitent cu un LED standard (pentru diagrama de conectare de mai sus):

#define TXD 1 // GPIO1/TXD01 void setup() ( pinMode(TXD, OUTPUT); ) void loop() ( digitalWrite(TXD, HIGH); delay(1000); digitalWrite(TXD, LOW); delay(1000) ;)

De îndată ce placa confirmă că vede microcontrolerul în sistem, puteți începe lucrul complet cu acesta. Cu toate acestea, merită remarcat faptul că, dacă placa Arduino în sine este utilizată în proiect doar pentru a conecta acest controler, acest lucru este irațional.

Un convertor USB-UART este suficient, deoarece esp8266 nu folosește „creierul” Arduino, iar memoria sa flash este suficientă pentru stocarea unor biblioteci de bază și firmware. În consecință, nu are rost să cheltuiți bani în plus pe o placă auxiliară dacă o puteți lipi pur și simplu la convertor și o puteți utiliza în continuare în proiect. În același timp, prin conectarea unei surse de alimentare auxiliare și fără să vă faceți griji că datele vor înceta să fie transmise în cel mai crucial moment din cauza lipsei de putere a sistemului.

Notă importantă! Pentru ultimul circuit, încărcăm schița pe Arduino ca de obicei, dar din moment ce modulul ESP8266 este conectat la pinii 0 și 1, programarea devine imposibilă. Compilatorul va afișa o eroare. Deconectați firele care merg la ESP8266 de la pinii 0 și 1, efectuați programarea, apoi readuceți pinii la locul lor și apăsați butonul de resetare din Arduino.

Câștigă din ce în ce mai multă popularitate, iar Arduino preia deja inițiativa - adăugând aceste module Wi-Fi pe lista plăcilor acceptate.
Dar cum se conectează la Arduino? Este posibil să faci cumva fără un Arduino? Exact despre asta va fi vorba în acest articol astăzi.

Privind în perspectivă, voi spune că va exista un al doilea articol, mai practic, pe tema firmware-ului și programarea modulului ESP8266 în mediul de dezvoltare Arduino IDE. Dar mai întâi lucrurile.

Acest videoclip dublează complet materialul prezentat în articol.



În acest moment, există multe varietăți ale acestui modul, iată câteva dintre ele:

Și iată pinout-ul ESP01, ESP03, ESP12:


* Această imagine poate fi vizualizată la o calitate bună la dezactivat. site-ul pighixxx.com.

Personal, îmi place cel mai mult versiunea ESP07. Cel puțin pentru faptul că există un ecran metalic (protejează microcircuitele de interferențe externe, asigurând astfel o funcționare mai stabilă), antenă ceramică proprie și un conector pentru o antenă externă. Se dovedește prin conectarea unei antene externe la ea, de exemplu, cum ar fi biquadrat, atunci puteți obține o gamă bună. În plus, există destul de multe porturi de intrare/ieșire, așa-numitele GPIO (General Purpose Input Output ports), similare cu pinii Arduino.

Să revenim la modulele noastre Wi-Fi de oaie și Arduino. În acest articol, voi analiza conectarea unui ESP8266 (model ESP01) la un Arduino Nano V3.

Dar, aceste informații vor fi relevante pentru majoritatea modulelor ESP8266 și, de asemenea, diferite plăci Arduino, de exemplu cel mai popular Arduino UNO.

Câteva cuvinte despre picioarele ESP01:

VccȘi GND(în imaginea de mai sus acestea sunt 8 și 1) - mâncare, pe picior Vcc pot fi depuse, judecând după documentație, de la 3 la 3,6 V, A GND- masă (minus putere). Am văzut o persoană conectand acest modul la două baterii AA (tensiunea de alimentare în acest caz a fost de aproximativ 2,7 V) și modulul era funcțional. Dar totuși, dezvoltatorii au indicat domeniul de tensiune în care modulul ar trebui să fie garantat să funcționeze; dacă utilizați altul, aceasta este problema dvs.

Atenţie! Acest modul se bazează pe logica de 3,3 V, în timp ce Arduino este în mare parte logică de 5 V. 5 V poate deteriora cu ușurință ESP8266, așa că trebuie alimentat separat de Arduino.

- Arduino meu are un picior unde scrie 3,3 V, de ce să nu-l folosești?

Probabil te vei gândi. Cert este că ESP8266 este un modul destul de consumator de energie, iar în vârfuri poate consuma curenți de până la 200 mA și aproape niciun Arduino nu este capabil să furnizeze un astfel de curent în mod implicit, cu excepția lui Arduino Due, în care curentul de-a lungul liniei de 3,3 V poate ajunge la 800 mA, ceea ce este destul, în alte cazuri vă sfătuiesc să utilizați un stabilizator suplimentar de 3,3 V, de exemplu AMS1117 3,3 V. Sunt foarte mulți atât în ​​China, cât și aici.

Picior RST 6 - este destinat hardware-ului pentru a reporni modulul, aplicând pe scurt un nivel logic scăzut, modulul se va reporni. Deși am neglijat acest lucru în videoclip, tot te sfătuiesc „apăsați” acest picior cu un rezistor de 10 kOhm la pozitivul sursei de alimentare, pentru a obține o mai bună stabilitate în funcționarea modulului, altfel aș reporni la cea mai mică interferență.

Picior CP_PD 4 (sau în alt mod RO) - servește, din nou, la „cablarea” a modulului în modul de economisire a energiei, în care consumă foarte puțin curent. Ei bine din nou - Nu ar strica să „apăsați” acest picior cu un rezistor de 10 kOhm la pozitiv Pitalova În videoclip, am scurtcircuitat prost acest picior la Vcc, pentru că nu aveam un astfel de rezistor la îndemână.

Picioarele RXD0 7 TXD0 2 - UART hardware, care este folosit pentru intermitent, dar nimeni nu interzice utilizarea acestor porturi ca GPIO (GPIO3 și, respectiv, GPIO1). Din anumite motive, GPIO3 nu este marcat în imagine, dar este în fișa de date:

Apropo, la picior TXD0 2 LED-ul „Connect” este conectat și se aprinde atunci când nivelul logic de pe GPIO1 este scăzut sau când modulul trimite ceva prin UART.

GPIO0 5 - nu poate fi doar un port I/O, ci și pune modulul în modul de programare. Acest lucru se face prin conectarea acestui port la un nivel logic scăzut („apăsând” pe GND) și alimentarea cu energie a modulului. În videoclip fac asta cu un buton obișnuit. După clipire, nu uitați să scoateți jumperul/apăsați butonul (nu este necesar să țineți apăsat butonul în timpul intermitent; atunci când este pornit, modulul intră în modul de programare și rămâne în el până la repornire).

GPIO2 3 - port de intrare/ieșire.

Și încă un punct important, fiecare GPIO al modulului Wi-Fi poate furniza în siguranță curent de până la 6mA, pentru a nu-l arde, asigurați-vă că puneți rezistențe în serie cu porturile de intrare/ieșire pe... Amintiți-vă legea lui Ohm R = U/I = 3,3V / 0,006 A = 550 Ohm, adică la 560 Ohm. Sau neglijează-l și apoi te întrebi de ce nu funcționează.

În ESP01, toate GPIO-urile acceptă PWM, așa că la cele patru GPIO ale noastre, adică GPIO0-3, puteți conecta un driver de motor, ala L293 / L298, și puteți conduce două motoare, de exemplu, bărci, sau puteți face RGB Wi-Fi orice ar fi . Da, da, acest modul are o mulțime de lucruri la bord, iar pentru proiecte simple nu este nevoie de violonistul Arduino, doar pentru flashing. Și dacă utilizați ESP07, atunci, în general, porturile sunt aproape aceleași cu cele ale lui Uno, ceea ce face posibil să faceți cu încredere fără un Arduino. Adevărat, există un moment neplăcut, ESP01 nu are deloc porturi analogice, iar ESP07 are doar unul, numit ADC. Acest lucru îngreunează, desigur, lucrul cu senzori analogici. În acest caz, un multiplexor analog Arduino va ajuta.

Totul pare să fie explicat prin pinout și iată diagrama pentru conectarea ESP8266 la Arduino Nano:

Vedeți jumperul de pe pinii RST și GND de pe Arduino Nano? Acest lucru este necesar pentru ca Arduino să nu interfereze cu firmware-ul modulului; în cazul conectării ESP8266 folosind Arduino, aceasta este o condiție prealabilă.

De asemenea, dacă vă conectați la Arduino, RX-ul modulului trebuie să meargă la RX-ul arduino, TX - TX. Acest lucru se datorează faptului că cipul convertor este deja conectat la pinii Arduino într-un model încrucișat.

De asemenea, important este un divizor rezistiv format din rezistențe de 1 kOhm și 2 kOhm (pot fi realizate din două rezistențe de 1 kOhm conectându-le în serie) de-a lungul liniei RX a modulului. Deoarece Arduino are 5 V logic și modulul este 3.3. Acesta se dovedește a fi un convertor de nivel primitiv. Trebuie să fie acolo, deoarece picioarele modulului RXD TXD nu sunt tolerante la 5 V.

Ei bine, puteți face fără un Arduino complet conectând ESP8266 printr-un convertor USB-UART obișnuit. În cazul conectării la Arduino, folosim, de fapt, un convertor standard de interfață usb și uart, ocolind creierul. Deci, de ce să cheltuiți bani în plus dacă vă puteți descurca deloc fără un Arduino? Numai în acest caz, conectăm RXD-ul modulului la TXD-ul convertorului, TXD - RXD.

Dacă ești prea lene să te deranjezi cu conexiunile, te joci cu rezistențe și stabilizatori, există soluții gata făcute NodeMcu:

Totul este mult mai simplu aici: conectați cablul la computer, instalați driverele și programul, doar nu uitați să utilizați jumperul/butonul de pe GPIO0 pentru a comuta modulul în modul firmware.

Ei bine, asta este probabil tot cu teoria, articolul s-a dovedit a fi destul de lung și voi publica puțin mai târziu partea practică, firmware-ul și programarea modulului.

În procesul de studiu și proiectare a unor proiecte din ce în ce mai complexe, vine momentul în care apare nevoia și dorința de a învăța să lucrezi cu un tip de comunicare atât de comun precum WiFi. Deoarece acest tip de comunicare vă poate permite să creați confortabil o singură rețea pentru dispozitivele dvs. inteligente de acasă și să le controlați, de exemplu, de pe un telefon mobil, tabletă sau computer, adică, cu alte cuvinte, să creați o adevărată casă inteligentă care va costa tu de zeci de ori mai puțin decât cumperi soluții gata făcute din magazin. Utilizarea WiFi, desigur, nu se limitează la asta și există atât de multe exemple de utilizare a acestui tip de comunicare încât nu are rost să le enumerați, iar dacă ați aterizat pe această pagină, înseamnă că deja trebuie să utilizați WiFi dintr-un motiv oarecare, trebuie doar să vă dați seama cum să lucrați corect cu acesta.

Ne vom da seama pe baza celui mai ieftin și mai popular modul WiFi ESP8266-01. Puteți cumpăra modulul WiFi ESP8266-01 de pe site-ul nostru.

Unul dintre principalele avantaje ale unui astfel de modul este prezența memoriei și a propriului microcontroler pe placă, ceea ce îi permite să funcționeze independent prin încărcarea schiței direct în modul însuși.

De fapt, există destul de multe modificări ale modulului WiFi ESP8266 și nu le vom enumera aici; odată ce înveți cum să lucrezi cu unul, poți începe cu ușurință să lucrezi cu alții. Aș dori să observ imediat că lucrul cu WiFi poate părea o sarcină destul de dificilă, iar dacă aveți puține proiecte finalizate în bagaj, este mai bine să renunțați la comunicarea WiFi pentru moment și să utilizați comunicațiile radio în proiectele dvs., lucru cu care este mult mai ușor de înțeles. Pentru lucrul cu module WiFi sunt create comunități întregi și forumuri tematice, ceea ce demonstrează încă o dată cât de dificil este pentru majoritatea oamenilor să înțeleagă imediat acest tip de comunicare, iar după ce recitesc toate informațiile, majoritatea oamenilor pur și simplu renunță. Cel mai probabil, nu voi putea include toate informațiile importante numai în cadrul acestui articol și nu are rost să fac asta, altfel va fi o altă mizerie. Voi încerca să urmez calea unei secvențe stricte a punctelor cele mai importante, astfel încât să puteți începe să înțelegeți principiul de funcționare a acestui tip de comunicare și apoi să vă dezvoltați pur și simplu propriile abilități în această direcție.

Deci, să începem și să ne uităm mai întâi la pinii modulului WiFi ESP8266-01.

VCC- alimentare modul de la 3V la 3.6V

GND- Pământ.

RST- Resetare ieșire responsabilă pentru repornirea modulului.

CH_PD- „chip power-down” atunci când i se alimentează cu energie, modul de funcționare este activat.

TX- transfer de date (interfață UART)

RX- recepția datelor (interfață UART)

GPIO0

GPIO2- port I/O de uz general

Pinii GPIO0 și GPIO2 sunt exact aceiași pini digitali cu care lucrăm pe plăcile Arduino pentru interconectarea cu diverși senzori și sunt utilizați în cazul implementării funcționării independente pe microcontrolerul WiFi intern al modulului ESP8266-01.

Pentru a alimenta în mod fiabil modulul ESP8266-01, utilizați o sursă de alimentare externă stabilizată de 3,3 V și este mai bine să nu încercați să luați energie de la placa dvs. Arduino, deoarece modulul consumă curent până la 215mA și acest lucru se poate termina prost pentru placa dvs. de depanare. De unde să obțineți o sursă de alimentare stabilizată de 3,3 V Sper că nu este o problemă pentru dvs., altfel este clar prea devreme pentru a vă ocupa de acest modul. De exemplu, îmi place să folosesc acest modul de alimentare YWRobot de 3,3 V și 5,0 V pentru a asambla rapid circuite pe plăci de breadboard, ceea ce vă permite să obțineți rapid o tensiune stabilizată de 3,3 V sau 5 V pe căile de alimentare corespunzătoare ale plăcii de breadboard.

Conectarea plusului (+) de la sursa noastră de alimentare de 3,3 V la pin VCC modulul ESP8266-01 și minus (-) aduceți sursa de alimentare la ieșire GND. În această stare, LED-ul roșu de pe modul se va aprinde, semnalându-ne că alimentarea este conectată corect. Pentru ca modulul să fie activat, este necesară și conectarea plusului (+) alimentare cu iesire CH_PD modulul ESP8266-01 și este indicat să faceți acest lucru direct printr-un rezistor de 10 kOhm. Acum, când pornim, LED-ul roșu de pe modul ar trebui să se aprindă, iar LED-ul albastru ar trebui să clipească rapid de câteva ori. Dacă asta vi se întâmplă, atunci totul este în regulă, ați conectat totul corect și modulul funcționează. În caz contrar, verificați din nou conexiunea sau înlocuiți modulul, deoarece cel mai probabil nu funcționează.

Daţi-i drumul. Pentru a lucra cu modulul WiFi ESP8266, avem nevoie de un adaptor USB-UART. Există diferite adaptoare, de exemplu: FT232RL, CP2102, PL2303. Dar vom presupune că nu aveți astfel de adaptoare și vom folosi o placă Arduino ca adaptor USB-UART. Voi folosi o placă Arduino NANO pentru asta, dar puteți folosi oricare alta pe care o aveți la dispoziție. Conexiunea pe orice placă este identică. Facem conexiunea conform următoarei diagrame.

Să ne uităm la ce am făcut aici. Vă rugăm să rețineți imediat că am conectat pinii de pe placa Arduino cu un jumper RSTȘi GND. Această manipulare dezactivează microcontrolerul și ne permite să facem un adevărat adaptor USB-UART din placa noastră Arduino.

Deoarece alimentam modulul WiFi ESP8266-01 de la o sursă de alimentare externă separată, rețineți că trebuie să conectăm întotdeauna masa tuturor surselor de alimentare din proiectele noastre. Prin urmare, conectăm ieșirea GND Placi Arduino cu masa (-) sursa noastră de alimentare externă de 3,3 V concepută pentru a alimenta modulul ESP8266-01.

Concluzie TX conectați placa Arduino la pin TX Modulul ESP8266-01. Această linie va transmite date de la modulul WiFi la placa Arduino. Oricine este familiarizat cu interfața UART s-ar putea întreba: "Dar cum poate fi asta? Oriunde au învățat că TX trebuie să se conecteze la RX. TX transmite informații, iar RX primește." Și vei avea dreptate. Așa este, TX este întotdeauna conectat la RX, dar în cazul în care facem un adaptor UART de la Arduino, trebuie să conectăm dispozitivele direct. Consideră că aceasta este o excepție de la regulă.

Linia RX De asemenea, vă conectăm placa Arduino direct la linie RX Modulul ESP8266-01. Această linie va transmite informații de la placa Arduino la placa modulului WiFi. Dar facem această conexiune printr-un așa-numit divizor de tensiune, format din două rezistențe cu valori nominale de 1 kOhm și 2 kOhm. Trebuie să reducem tensiunea pe această linie folosind două rezistențe (divizor de tensiune), deoarece placa Arduino transmite un semnal logic cu o tensiune de 5V, iar modulul WiFi funcționează cu o tensiune de 3,3V. Pentru a converti semnalul logic, am putea folosi o placă specială de convertizor de nivel logic, care ar fi, desigur, mai corectă, dar, din nou, să presupunem că nu aveți una și a trebuit să luăm o cale mai simplă și să o facem folosind un divizor de tensiune.

Am conectat acum tot ce este necesar pentru lucrări ulterioare, dar mai avem încă 3 pini nefolositi ( GPIO0, GPIO2Și RST) pe Modul WiFi ESP8266-01. Pentru o funcționare stabilă a modulului WiFi, trebuie să tragem acești pini neutilizați rămași la pozitiv (+) liniile de alimentare ale modulelor prin rezistențe de 10 kOhm.

Acest lucru ne va salva de diverse interferențe (interferențe) și va face funcționarea modulului stabilă. Este mai bine să o faci imediat. În caz contrar, nu fi surprins că modulul tău este în mod constant supraîncărcat, produce informații de neînțeles sau nu dorește deloc să funcționeze. Utilizarea rezistențelor pull-up pe pinii neutilizați ai unui microcontroler ar trebui să fie o regulă generală dacă doriți o funcționare stabilă în proiectele dvs.

Și din nou verificăm funcționalitatea modulului WiFi ESP8266-01. Porniți alimentarea și vedeți că LED-ul roșu se aprinde și LED-ul albastru clipește de câteva ori. Dacă totul se întâmplă așa, atunci grozav, să mergem mai departe. În caz contrar, verificăm corectitudinea conexiunilor, precum și calitatea tuturor contactelor. Poate fi doar o situație banală când ai verificat totul de zece ori și te-ai asigurat că totul a fost conectat corect, dar când pornești modulul, vezi că LED-ul albastru nu se comportă corespunzător, este aprins constant, clipește constant, sau nu răspunde la nimic. Acest lucru se poate datora unui contact slab pe o linie. De exemplu, la asamblarea unui circuit pe o placă de breadboard, unul dintre rezistențe nu stă strâns în locul său și acest lucru provoacă interferențe. Verificați calitatea conexiunilor. Modulul este foarte sensibil. Nu neglija asta. Acesta este un motiv comun pentru funcționarea instabilă.

În general, am terminat cu conexiunea. Acum trebuie să pregătim programul Arduino IDE pentru a funcționa cu modulul WiFi ESP8266-01. Pentru a face acest lucru, trebuie să descarcăm și să instalăm în Arduino IDE arhiva necesară cu biblioteci, exemple și plăci ESP, care ulterior ne vor permite să încărcăm schițe direct pe microcontrolerul modulului ESP8266-01, să schimbăm firmware-ul etc. În sensul acestui articol, cel mai probabil nu vom avea nevoie de aceste setări, dar mi se pare că după ce ne-am dat seama cum să conectăm modulul, procedura va fi corectă dacă descarcăm imediat tot ce este necesar pentru a lucra cu IDE-ul Arduino. . Totul aici este simplu în principiu.

Lansa programul Arduino IDEși mergi la meniu „Fișier” - „Setări”

În fereastra care apare, în câmpul de sus scriem „esp8266”. Ca urmare, vom avea doar firmware-ul necesar în fereastră. Când faceți clic pe firmware, va apărea un buton "Instalare". Faceți clic pe butonul "Instalare"și așteptați până când totul este instalat. Arhiva este destul de mare, aproximativ 150 de megaocteți, așa că va trebui să așteptați.

După finalizarea instalării. Repornim Arduino IDE și vedem cum au apărut noi plăci ESP în meniul „Tools” - „Boards”. Asta e tot. Am terminat cu configurarea IDE-ului Arduino. Nu avem nevoie de aceste setări pentru moment, dar în lucrările viitoare nu ne vom putea descurca fără ele.

Avem totul conectat și pregătit, acum putem începe să înțelegem comenzile. De fapt, acum vom continua să verificăm și să configuram modulul folosind comenzi AT și nu există nicio modalitate de a face fără el. Modulele WiFi sunt implementate în așa fel încât toată comunicarea cu ele să aibă loc folosind așa-numitele comenzi AT, care sunt conectate în firmware-ul modulului. Nu vom enumera toate comenzile AT aici, sunt destul de multe și dacă doriți să studiați totul cu atenție, le puteți găsi cu ușurință pe Internet. Și acum vom folosi doar cele mai necesare pentru a începe.

Și așa, conectăm placa noastră Arduino printr-un cablu USB la computer. Și o sursă de alimentare externă care alimentează Modul WiFi ESP8266-01 Nu este nevoie să-l porniți încă. Lansăm programul Arduino IDE, selectăm placa noastră Arduino din meniul „Tools”, în cazul meu este Arduino NANO, iar tu o selectăm pe a ta. De asemenea, nu uitați să selectați portul la care este conectat Arduino. Sper că înțelegeți toate acestea și știți cum să le faceți.

Monitorizare porturi deschise „Instrumente” - „Monitor port”. Selectarea vitezei portului 74880 (la această viteză pornește modulul) și selectați „NL & CR” în lista din stânga

Acum conectăm o sursă de alimentare externă care alimentează modulul nostru WiFi. După care ar trebui să vedeți aproximativ următoarele informații în monitorul portului.

Aici vedem câteva informații despre modulul nostru WiFi (viteză, cantitatea de memorie la bord etc.). Informațiile primite pot diferi în funcție de versiunea de firmware a modulului WiFi. Să nu ne concentrăm pe asta. Altceva este important. Mai jos vedem un set de caractere fără sens, asta înseamnă că viteza portului (74880 baud) pe care o setăm este potrivită doar pentru încărcarea inițială a modulului pentru a vedea aceste informații în mod normal, dar această viteză nu este potrivită pentru comunicarea normală cu modulul WiFi.

Pentru a selecta viteza corectă a portului, pur și simplu vom schimba viteza portului și vom trimite simboluri către port (câmpul din partea de sus și butonul de trimitere) LA până când primim un răspuns Bine. Dacă încerci să trimiți caractere chiar acum LA la port la o viteză de 74880, veți primi încă unul sau două caractere fără sens ca răspuns.

Încercați să setați imediat viteza la 115200 baud și să trimiteți o comandă AT. Cel mai adesea, modulele sunt flash la această viteză.

Aceasta este imaginea pe care ar trebui să o vedeți pe monitorul portului. Dacă încă primiți un set de caractere de neînțeles ca răspuns, reduceți viteza și retrimiteți LA comenzi până când răspunsul revine Bine. Dacă ați încercat toate vitezele și nu ați primit răspunsul corect, atunci nu aveți noroc și modulul este flash cu firmware la o viteză non-standard. Apoi, tot ce rămâne este să reflashați modulul cu firmware-ul normal, dar acesta este un subiect pentru un articol separat.

Sper că totul este bine și că ați selectat viteza corectă. Apropo, dacă încercați să opriți și să porniți din nou modulul WiFi după ce ați selectat viteza corectă, atunci în loc de aceleași informații inițiale care au fost afișate corect la o viteză de 74880 baud, veți, dimpotrivă, vezi un set amestecat de caractere, dar la sfârșit vei vedea cuvântul „gata””. Dar avem posibilitatea de a vizualiza aceste informații inițiale în formă normală la viteza corectă; pentru a face acest lucru, trebuie să repornim modulul în mod programatic folosind comanda AT AT+RST.

Pentru a afla versiunea de firmware a modulului WiFi ESP8266-01, trebuie să trimiteți o comandă către monitorul portului AT+GMRși ca răspuns veți primi aproximativ următoarele informații:

Modulul WiFi ESP8266-01 poate funcționa atât în ​​mod punct de acces, cât și în mod client. Pentru a permite modulului să funcționeze în toate modurile simultan, trimiteți comanda către monitorul portului AT+CWMODE=3și ca răspuns ar trebui să primiți Bine.

Echipă AT+CWLAP vă va permite să vizualizați toate punctele de acces WiFi pe care le vede în prezent modulul dvs. Modulul meu, de exemplu, vede în prezent doar trei puncte de acces WiFi în zona sa de acoperire. Răspunsul ar trebui să fie cam așa:

De exemplu, știm parola pentru al treilea punct de acces și pentru a ne conecta la el executăm comanda AT+CWJAP="nume","parolă", în cazul meu, această comandă arată ca AT+CWJAP="dsl_unlim_512_home","11111111", la care primim un răspuns de succes:

Parametrii de comandă sunt scrieți în memoria flash a modulului WiFi ESP8266-01, iar dacă oprim modulul și îl pornim din nou, acesta se va conecta automat la acest punct de acces. Uite, întâmplător, nu permite un spațiu în comandă, altfel vei primi un răspuns EROARE. Vă rugăm să rețineți că în cele mai recente versiuni de firmware se recomandă utilizarea comenzii AT+CWJAP_CUR, adică comanda va arăta ca AT+CWJAP_CUR="nume","parolă". Dacă brusc am uitat la ce punct de acces este conectat modulul nostru, trebuie să trimitem o comandă AT+CWJAP? sau AT+CWJAP_CUR? iar ca răspuns vom primi punctul de acces la care este conectat în prezent modulul WiFi.

Cu conexiune și configurare inițială Modul WiFi ESP8266-01 ne-am dat seama. Modulul funcționează și este gata pentru implementarea proiectelor dumneavoastră ulterioare. Pur și simplu nu este posibil să analizăm toate exemplele posibile de lucru cu acest modul în cadrul unui articol și ne vom ocupa de acest lucru în articolele următoare. Și pentru cei care nu sunt foarte familiarizați cu programarea, dar doresc cu adevărat să înceapă rapid să-și gestioneze proiectele folosind WiFi, le recomand să le prezinte designerului de proiecte RemoteXY WiFi. Acest site vă va ajuta să creați cu ușurință o interfață de control pentru telefonul mobil sau tabletă și să o utilizați pentru a vă controla dispozitivul la care vă conectați un modul WiFi.

În acest articol, veți învăța cum să creați un sistem care poate porni și opri încărcările DC folosind o aplicație mobilă. Veți învăța, de asemenea, cum să efectuați această sarcină instantaneu sau să folosiți cronometrele presetate pentru a porni și dezactiva încărcăturile.

Rezumatul proiectului

Puteți implementa acest sistem în cazul în care trebuie să porniți o încărcare DC pentru un anumit timp. Aplicația noastră Android vă va ajuta în acest sens, fără a necesita o interfață hardware, tastatură sau afișaj LCD.

Accesorii

Ansamblul plăcii de dezvoltare ESP8266

ESP8266 este un SoC low-cost, cu un microcontroler integrat și o stivă completă de protocoale TCP/IP, ceea ce înseamnă că vă poate accesa direct rețeaua Wi-Fi.

Deoarece acest cip are propriul microcontroler, puteți pune codul aplicației pe el sau puteți utiliza pur și simplu modulul ca transceiver Wi-Fi, ceea ce vom face în acest proiect. Ar fi mai eficient să folosim acest modul atât ca transceiver, cât și ca controler, dar în scopuri de instruire vom interacționa cu modulul folosind un Arduino.

Cipul ESP8266 vine în diferite module. Vom folosi modulul ESP-01. Desigur, puteți folosi orice alt modul.

În primul rând, trebuie să știți că modulul funcționează la 3,3V și tensiunea de nivel logic ridicat de la Arduino trebuie să fie aceeași pentru a evita deteriorarea modulului nostru. Acest lucru necesită un convertor de nivel de tensiune între placa Arduino (care funcționează la 5V) și modul. Vestea bună este că convertorul va avea nevoie doar de un pin pentru a fi trimis la Arduino, deoarece pinul de recepție recunoaște de obicei semnale logice de 3,3 V de la ESP8266.

Una dintre cele mai simple moduri de a efectua această conversie este un circuit de la Sparkfun. Puteți comanda un modul gata făcut.

Convertor de nivel 5V → 3.3V

Figura de mai jos arată pinout-ul modulului nostru pe ESP8266:

ConcluzieScop
UTXDTransfer de date prin UART
URXDPrimirea datelor prin UART. Ieșirea la care se conectează ar trebui să fie de 3,3 V.
CH_PDOprire: intrarea scăzută oprește cipul, intrarea ridicată îl pornește; Pentru funcționarea normală a modulului, este necesar să-l conectați la linia de alimentare.
GPIO0La încărcare: nivelul trebuie să fie ridicat pentru a intra în modul normal de încărcare; un nivel scăzut intră în moduri speciale de pornire.
GPIO2La pornire: un nivel scăzut face ca bootloader-ul să intre în modul de pornire flash; un nivel ridicat determină modul normal de pornire.
RSTResetare; nivel activ - scăzut.
GNDPământ.
VCCPutere/3.3V.

Am folosit LM317, un regulator de tensiune liniar configurabil cu un curent de ieșire de până la 1,5 A, pentru a furniza modulului o sursă de alimentare adecvată de 3,3 V.

Notă: Nu utilizați pinul de 3,3 V de la Arduino, deoarece regulatorul de tensiune de 3,3 V de pe placa Arduino nu poate furniza cantitatea de curent necesară modulului, în special în timpul consumului de putere maxim în timpul transmisiei.

Am folosit BS170 (în loc de BSS138) pentru convertorul de nivel logic; ambele functioneaza bine.

Acum puteți conecta modulul la computer folosind un convertor USB-TTL și îl puteți testa.

Ansamblu placa de rețea

Pentru a controla releul, am folosit un tranzistor NPN bipolar BC337 cu un rezistor de 1 kOhm pe bază. Pentru a proteja împotriva tensiunii inverse a bobinei am folosit o diodă 1n4007.

Am decis să conectez contactul normal închis (NC) al releului la masă.

Cod Arduino

Acum ne confruntăm cu o problemă. ESP8266 folosește UART ca interfață pentru comenzile AT, în timp ce Arduino Uno (care folosește Atmega328) are un singur port UART. Acest port este deja conectat la podul USB-TTL, precum și la pinii 0 și 1.

Ca soluție, puteți utiliza un emulator pentru portul UART pe un alt pin digital Arduino folosind bibliotecile AltSoftSerial sau SoftwareSerial. Acest lucru vă va permite să aveți în continuare un port UART hardware pentru depanare și imprimare a mesajelor pe consolă și un port software pentru comunicarea cu modulul.

Mulți oameni (inclusiv eu) raportează probleme cu portul serial al software-ului la viteze mari baud - precum cele pe care le vom folosi cu esp8266, 115200 bps. Pot spune că 50% din datele primite de la modul vor fi deteriorate dacă utilizați un software UART, iar din datele transferate de la Arduino la modul, aproape 100% vor fi corecte. Am obținut aceste rezultate după ce am monitorizat semnalele de pe liniile RX și TX.

Ca soluție, am adăugat câteva directive definite în cod pentru a vă facilita alegerea între porturile UART hardware și software. Rețineți că nu puteți utiliza același port pentru depanare și comunicare cu modulul, așa că trebuie să alegeți între ele.

//decomentați Serial.*** dacă doriți să utilizați un port serial hardware (pinii 0,1) pentru a comunica cu ESP //decomentați esp8266.*** dacă doriți să utilizați un port serial software (pinii 2,3) ) pentru a comunica cu ESP #define esp8266_Available() Serial.available() //esp8266.available() #define esp8266_Find(ARG) Serial.find(ARG) //esp8266.find(ARG) #define esp8266. read() //esp8266 .read() #define esp8266_Write(ARG1,ARG2) Serial.write(ARG1,ARG2) //esp8266.write(ARG1,ARG2) #define esp8266_Print(ARG) Serial.print(ARG) // esp8266.print(ARG)

În sursă veți găsi o parte din codul care instalează modulul cu routerul dvs.:

SendCommand("AT+RST\r\n", 2000, DEBUG); // reporniți modulul sendCommand("AT+CWMODE=1\r\n", 1000, DEBUG); // configurează ca punct de acces sendCommand("AT+CWJAP=\"tur\",\"341983#tur\"\r\n", 3000, DEBUG); //**** SCHIMBAȚI SSID-ul și PAROLA DUPĂ REȚELEA DVS. ******// delay(10000); sendCommand("AT+CIFSR\r\n", 1000, DEBUG); // obțineți adresa IP sendCommand("AT+CIPMUX=1\r\n", 1000, DEBUG); // configurează pentru conexiuni multiple sendCommand("AT+CIPSERVER=1,1337\r\n", 1000, DEBUG); // activează serverul pe portul 1337

Bucla de schiță așteaptă comenzile care ar trebui să vină prin conexiunea Wi-Fi. În prezent sunt acceptate următoarele comenzi:

  • „con” pentru a obține starea pinului, logica ridicată sau scăzută;
  • ‘on=’ activează ieșirea corespunzătoare;
  • ‘of=’ dezactivează ieșirea corespunzătoare;
  • „Tm=n/fS” setează cronometrul să pornească (n) sau să oprească (f) ieșirea corespunzătoare.

Toate comenzile au un răspuns de confirmare.

Note:

  • unele părți ale schiței se bazează pe ;
  • dacă utilizați module cu un vechi SDK, este posibil să aveți aceleași erori ca mine. Singura soluție în acest caz este să vă actualizați firmware-ul la cea mai recentă versiune. Consultați pentru ajutor la actualizarea firmware-ului modulului pe ESP8266. Am actualizat firmware-ul de la versiunea 1.3 la 1.5.4.

Cod program complet:

#include #define DEBUG 0 // dacă utilizați un port serial hardware pentru a comunica cu ESP, schimbați valoarea la 0 #define ESPBaudRate 115200 #define HWSBaudRate 115200 #define OUTPUT1 11 #define OUTPUT2 12 #define OUTPUT3 13. *** , dacă doriți să utilizați un port serial hardware (pinii 0,1) pentru a comunica cu ESP //decomentați esp8266.*** dacă doriți să utilizați un port serial software (pinii 2,3) pentru a comunica cu ESP #define esp8266_Available() Serial.available() //esp8266.available() #define esp8266_Find(ARG) Serial.find(ARG) //esp8266.find(ARG) #define esp8266_Read() Serial.read() /esp8266.read() #define esp8266_Write(ARG1 ,ARG2) Serial.write(ARG1,ARG2) //esp8266.write(ARG1,ARG2) #define esp8266_Print(ARG) Serial.print(ARG) //esp82666666 ARG) // Face pinul 2 al liniei Arduino RX, iar linia TX a Arduino este pinul 3. // Aceasta înseamnă că trebuie să conectați linia TX de la ESP la pinul 2 al Arduino, // și RX linia de la ESP la pinul 3 al Arduino. SoftwareSerial esp8266(2, 3); /****************/ octet OUTPUTstate; octet OUTPUTTMRISSet ; octet OUTPUTTMRState ; OUTPUTTomer lung; /************/ /***Comenzi**/ String GETSTATE = "con"; // Solicitare șir de la aplicația mobilă pentru a afla starea fiecărei ieșiri String SETON = "on="; // Solicitați șirul de la aplicația mobilă pentru a activa ieșirea String SETOFF = "of="; // Solicită șirul de la aplicația mobilă pentru a opri ieșirea String TIMER = "tm="; // Solicitați linia de la aplicația mobilă pentru a seta cronometrul de ieșire /**************/ void setup() ( Serial.begin(HWSBaudRate); // Port serial pentru trimiterea de mesaje de la Arduino la computer esp8266.begin(ESPBaudRate); // Port serial software pentru trimiterea de mesaje de la Arduino la ESP8266 pinMode(OUTPUT1, OUTPUT); digitalWrite(OUTPUT1, LOW); pinMode(OUTPUT2, OUTPUT); digitalWrite(OUTPUT2, LOW); pinMode ( OUTPUT3, OUTPUT); digitalWrite(OUTPUT3, LOW); // reporniți modulul sendCommand("AT+RST\r\n", 2000, DEBUG); // configurați ca punct de acces sendCommand("AT+CWMODE=1 \r\ n", 1000, DEBUG); //**** SCHIMBAȚI SSID-ul și PAROLA DUPĂ REȚELEA DVS. ******// sendCommand("AT+CWJAP=\"tur\",\"341983# tur\ "\r\n", 3000, DEBUG); delay(10000); // obțineți o adresă IP sendCommand("AT+CIFSR\r\n", 1000, DEBUG); // configurați pentru mai multe conexiuni sendCommand( "AT+ CIPMUX=1\r\n", 1000, DEBUG); // activați serverul pe portul 1337 sendCommand("AT+CIPSERVER=1,1337\r\n", 1000, DEBUG); if (DEBUG == true) Serial.println("Server Ready"); ) void loop() ( if (esp8266_Available()) // verificați dacă esp a trimis un mesaj ( if (esp8266_Find("+IPD,"))) ( // așteptați până când tamponul serial este plin (citește toate datele seriale) delay( 1000); // obțineți ID-ul conexiunii, astfel încât să putem deconecta int connectionId = esp8266_Read() - 48; // scade 48 deoarece funcția read() returnează // o valoare zecimală în ASCII și începe 0 (primul număr zecimal) cu 48 String closeCommand = "AT+CIPCLOSE="; // creând o comandă pentru a închide conexiunea closeCommand += connectionId; // adăugați id-ul conexiunii closeCommand += "\r\n"; esp8266_Find("? "); // Acest caracter definește începutul comenzii în corpul mesajului nostru String InStream; InStream = (char) esp8266_Read(); InStream += (char) esp8266_Read(); InStream += (char) esp8266_Read() ; dacă (DEBUG == adevărat) Serial.println(InStream); dacă (InStream.equals(GETSTATE)) ( // răspuns la comanda Status=<состояние_выхода_1><состояние_выхода_2><состояние_выхода_3>String response = "Stare="; răspuns += OUTPUTstate; răspuns += OUTPUTstate; răspuns += OUTPUTstate; sendHTTPResponse(connectionId, răspuns); sendCommand(closeCommand, 1000, DEBUG); // închideți conexiunea ) else if (InStream.equals(SETON)) ( int pinNumber = (esp8266_Read() - 48); // obțineți prima cifră, adică dacă pinul este 13, atunci prima cifră este egală cu 1 int secondNumber = (esp8266_Read() - 48); dacă (secondNumber >= 0 && secondNumber<= 9) { pinNumber *= 10; pinNumber += secondNumber; // получить вторую цифру, т.е., если вывод 13, то 2-ая цифра равна 3, // и добавить ее к первой цифре } if (pinNumber == OUTPUT1) OUTPUTstate = 1; else if (pinNumber == OUTPUT2) OUTPUTstate = 1; else if (pinNumber == OUTPUT3) OUTPUTstate = 1; digitalWrite(pinNumber, 1); String response = "Confg="; // Отклик на команду Confg=<номер_вывода>răspuns += pinNumber; sendHTTPResponse(connectionId, răspuns); sendCommand(closeCommand, 1000, DEBUG); // închideți conexiunea ) else if (InStream.equals(SETOFF)) ( int pinNumber = (esp8266_Read() - 48); // obțineți prima cifră, adică dacă pinul este 13, atunci prima cifră este egală cu 1 int secondNumber = (esp8266_Read() - 48); dacă (secondNumber >= 0 && secondNumber<= 9) { pinNumber *= 10; pinNumber += secondNumber; // получить вторую цифру, т.е., если вывод 13, то 2-ая цифра равна 3, // и добавить ее к первой цифре } if (pinNumber == OUTPUT1) OUTPUTstate = 0; else if (pinNumber == OUTPUT2) OUTPUTstate = 0; else if (pinNumber == OUTPUT3) OUTPUTstate = 0; digitalWrite(pinNumber, 0); // изменить состояние вывода String response = "Confg="; // Отклик на команду Confg=<номер_вывода>răspuns += pinNumber; sendHTTPResponse(connectionId, răspuns); sendCommand(closeCommand, 1000, DEBUG); // închideți conexiunea ) else if (InStream.equals(TIMER)) ( int pinNumber = (esp8266_Read() - 48); // obțineți prima cifră, adică dacă pinul este 13, atunci prima cifră este egală cu 1 int secondNumber = (esp8266_Read() - 48); dacă (secondNumber >= 0 && secondNumber<= 9) { pinNumber *= 10; pinNumber += secondNumber; // получить вторую цифру, т.е., если вывод 13, то 2-ая цифра равна 3, // и добавить ее к первой цифре } if (esp8266_Read() == "n") { if (DEBUG == true) Serial.println("on"); if (pinNumber == OUTPUT1) OUTPUTTMRState = 1; else if (pinNumber == OUTPUT2) OUTPUTTMRState = 1; else if (pinNumber == OUTPUT3) OUTPUTTMRState = 1; } else { if (DEBUG == true) Serial.println("off"); if (pinNumber == OUTPUT1) OUTPUTTMRState = 0; else if (pinNumber == OUTPUT2) OUTPUTTMRState = 0; else if (pinNumber == OUTPUT3) OUTPUTTMRState = 0; } int j = 0; byte Atime; // Таймер может настроен на максимальное значение в 1 сутки // поэтому программа может принять 5 цифр, так как 1 сутки равны 86400 секундам long Time; // Прочитать секунды, значение имеет переменное количество цифр, поэтому читать, пока не получим "s", // что является символом завершения в теле моего сообщения от мобильного телефона while (1) { Time = esp8266_Read(); if (Time == "s") break; Atime[j] = Time - 48 ; j++; } switch (j) // секунды... { case 1: // одна цифра Time = Atime; break; case 2: // две цифры Time = Atime * 10 + Atime; break; case 3: // три цифры Time = Atime * 100 + Atime * 10 + Atime; break; case 4: // четыре цифры Time = Atime * 1000 + Atime * 100 + Atime * 10 + Atime; break; case 5: // пять цифр Time = Atime * 10000 + Atime * 1000 + Atime * 100 + Atime * 10 + Atime[j]; break; } if (DEBUG == true) { Serial.println("Timer:"); Serial.println(Time); } Time = Time * 1000 + millis(); if (DEBUG == true) { Serial.println("Pin:"); Serial.println(pinNumber); } if (pinNumber == OUTPUT1) { OUTPUTTMRIsSet = 1; OUTPUTTimer = Time; } else if (pinNumber == OUTPUT2) { OUTPUTTMRIsSet = 1; OUTPUTTimer = Time; } else if (pinNumber == OUTPUT3) { OUTPUTTMRIsSet = 1; OUTPUTTimer = Time; } String response = "tConfg="; // Отклик на команду tConfg=<номер_вывода>răspuns += pinNumber; sendHTTPResponse(connectionId, răspuns); sendCommand(closeCommand, 1000, DEBUG); // închideți conexiunea ) altfel // a fost primită o comandă neacceptată ( String response = "EROARE"; sendHTTPResponse(connectionId, response); sendCommand(closeCommand, 1000, DEBUG); // închideți conexiunea ) ) ) /*** **Verificați temporizatorul pentru fiecare ieșire******/ dacă (OUTPUTTMRIsSet != 0 && (OUTPUTTimer)< millis())) { digitalWrite(OUTPUT1, OUTPUTTMRState); OUTPUTstate = OUTPUTTMRState; OUTPUTTMRIsSet = 0; } if (OUTPUTTMRIsSet != 0 && (OUTPUTTimer < millis())) { digitalWrite(OUTPUT2, OUTPUTTMRState); OUTPUTstate = OUTPUTTMRState; OUTPUTTMRIsSet = 0; } if (OUTPUTTMRIsSet != 0 && (OUTPUTTimer < millis())) { digitalWrite(OUTPUT3, OUTPUTTMRState); OUTPUTstate = OUTPUTTMRState; OUTPUTTMRIsSet = 0; } /***************************************/ } /* Name: sendData Description: Функция, используемая для отправки данных на ESP8266. Params: command - данные/команда для отправки; timeout - время ожидания отклика; debug - печатать в консоль?(true = да, false = нет) Returns: Отклик от esp8266 (если есть отклик) */ String sendData(String command, const int timeout, boolean debug) { String response = ""; int dataSize = command.length(); char data; command.toCharArray(data, dataSize); esp8266_Write(data, dataSize); // передача символов на esp8266 if (debug) { Serial.println("\r\n====== HTTP Response From Arduino ======"); Serial.write(data, dataSize); Serial.println("\r\n========================================"); } long int time = millis(); while ((time + timeout) >millis()) ( în timp ce (esp8266_Available()) ( // esp are date, deci tipăriți-le în consola char c = esp8266_Read(); // citiți următorul caracter. răspuns += c; ) ) if (depanare) ( Serial .print(răspuns);) returnează răspuns; ) /* Nume: sendHTTPResponse Descriere: O funcție care trimite un răspuns HTTP 200, HTML UTF-8 */ void sendHTTPResponse(int connectionId, String content) ( // creează un răspuns HTTP String httpResponse; String httpHeader; // Antet HTTP httpHeader = " HTTP/1.1 200 OK\r\nContent-Type: text/html; charset=UTF-8\r\n"; httpHeader += "Content-Length: "; httpHeader += content.length(); httpHeader + = " \r\n"; httpHeader += "Conexiune: închide\r\n\r\n"; httpResponse = httpHeader + conținut + " "; // Există o eroare în cod: ultimul caracter din „conținut " nu este trimis, așa că am adăugat un spațiu suplimentar sendCIPData(connectionId, httpResponse); ) /* Nume: sendCIPDATA Descriere: trimite comanda CIPSEND= ,<данные>*/ void sendCIPData(int connectionId, String data) ( String cipSend = "AT+CIPSEND="; cipSend += connectionId; cipSend += ","; cipSend += data.length(); cipSend += "\r\ n"; sendCommand(cipSend, 1000, DEBUG); sendData(data, 1000, DEBUG); ) /* Nume: sendCommand Descriere: Funcție utilizată pentru a trimite date către ESP8266. Parametri: comandă - date/comandă de trimis; timeout - timp de așteptare a răspunsului; depanare - se imprimă în consolă? (adevărat = da, fals = nu) Returnează: Răspuns de la esp8266 (dacă există un răspuns) */ String sendCommand(String command, const int timeout, boolean debug) ( String response = ""; esp8266_Print(comandă); // transmiterea de caractere către esp8266 long int time = millis(); while ((time + timeout) > millis()) ( while (esp8266_Available()) ( // esp are date, deci tipăriți-le în console char c = esp8266_Read(); // citește următorul caracter. răspuns += c; ) ) if (depanare) ( Serial.print(răspuns); ) returnează răspuns; )

aplicație Android

Pentru a controla toate componentele hardware de mai sus, vom folosi o aplicație Android simplă. Această aplicație ne va permite să pornim sau să oprim ieșirea direct sau după o anumită perioadă de timp.

Notă: Aplicația necesită Android 4.0 (IceCreamSandwich) sau o versiune ulterioară.

  • În primul rând, trebuie să cunoașteți adresa IP a modulului dvs. Dacă ați folosit un port serial software, adresa IP va fi tipărită în consolă. Dacă ați folosit un port serial hardware, atunci trebuie să utilizați un cablu pentru a monitoriza datele de pe liniile RX și TX pentru a vedea adresa IP. De asemenea, trebuie să știți numărul portului care a fost specificat în schița Arduino. După aceea, faceți clic pe „conectare” pentru a obține starea tuturor celor trei ieșiri. Trebuie să vă asigurați că routerul dvs. Wi-Fi este pornit și că sunteți conectat la rețeaua locală.
  • Acum faceți clic pe orice comutator pe care doriți să îl activați/dezactivați. Oricând doriți, puteți face clic pe „reîmprospătare” pentru a reîmprospăta starea tuturor ieșirilor.
  • În fila „Cronometre”, puteți seta oricare dintre aceste trei ieșiri să se pornească/oprească după o anumită perioadă de timp (de la 0 la 24 de ore).
  • După orice acțiune, veți primi un mesaj de confirmare care indică dacă comanda a fost finalizată cu succes sau a apărut o eroare.

Video demonstrativ

Asta e tot! Sper că articolul a fost util. Lasă comentarii!