Povežite svoj Arduino z internetom z dodajanjem ESP8266 WiFi modula!
Hackster Inc.
ESP8266 WiFi modul je popolno WiFi vezje, ki ga lahko preprosto priključite kot WiFi adapter, vmesnik za brezžični dostop do interneta na katero koli zasnovo, ki temelji na mikrokontrolerju, s preprosto povezljivostjo prek serijske komunikacije ali UART vmesnika.
Dodajanje tega modula na Arduino UNO vam bo omogočilo več zanimivih projektov.
Komponente, ki so uporabljene v tem projektu:
Hardverske komponente:
Arduino UNO × 1
Espressif ESP8266 ESP-01 × 1
Povezovalne žice × 1
Upor 10k ohm × 1
Upor 1k ohm × 2
Softverske aplikacije in spletne storitve:
Arduino IDE
ESP866 lahko za komunikacijo uporabljate na več načinov. Nekateri ga lahko uporabljajo za pošiljanje/prejemanje podatkov prek spleta ali redno nalaganje podatkov. V tem članku vam bom samo pokazal, kako lahko z Arduinom brezžično komuniciramo z uporabo telefona (Android ali iPhone). To bo potekalo brez povezave na splet.
Ta vsebina je samo za naročnike
Naš ESP8266 bo služil kot dostopna točka (način AP – angl. Access Point), kar pomeni, da bo drugim napravam (postajam) omogočil dostop do WiFi omrežja in jih povezal z žičnim omrežjem.
Postopek je zelo preprost. S telefonom pošljite poljuben ukaz Arduinu. S pomočjo ESP8266 bo vse delovalo brezžično.
Naložite skico
Najprej naložite moj vzorec skice v Arduino.
Če želite vedeti, kaj je na moji skici, pojdite v razdelek »O kodi«.
Priloženo skico lahko prenesete ali pa posodobljeno različico dobite na mojem skladišču github [1].
Če ne veste, kako naložiti skico, preberite tukaj [2].
Ali moram svoj ESP flashati?
Ne. Uporabite samo osnovno vdelano programsko opremo. Če pa morate, preberite tukaj [3].
Sestavite vezje
Povežite priključke, ki so podrobneje opisani v tabeli priključkov.
Sledite naslednjim korakom:
- oba ESP-jeva VCC/3,3V/Power Pin in Enable Pin (rdeči žici) priključka povežite skupaj in v seriji z 10k uporom in povežite na +3,3V napajalni priključek na Arduino Uno.
- riključite ESP-jev priključek Ground/GND (črna žica) na priključek Arduino Uno .
- ovežite ESP-jev TX (zelena žica) s pinom 3 na Arduino Uno.
- riključite ESP-jev RX (modra žica) na 1K upor in nato na priključek 2 na Arduino Uno.
- riključite ESP-jev RX (modra žica) na 1K upor in nato na GND priključek na Arduino Uno.
Nastavitev povezave
Ko je vse nastavljeno, boste opazili, da bo vaš ESP8266 WiFi na voljo v dosegu vašega telefona.
Prenesite TCP Client za Android; prenesete lahko katerega koli TCP klienta, ki je na voljo v Trgovini Play, vendar sem uporabil TCP klienta podjetja Sollae Systems [4].
V telefonu se povežite z WiFi napravo ESP8266;
Če se vaš WiFi ESP8266 ne prikaže med razpoložljivimi WiFi omrežji, se prepričajte, da vaš Arduino deluje in da je vse pravilno povezano. V nasprotnem primeru odpravite težave z vašim ESP v skladu z njegovo dokumentacijo. Običajno se ime WiFi / SSID začne z ESP, ki sledi imenu različice, moja je ESP11.
Po vzpostavitvi povezave pridobite statični IP naslov;
Pomembno: IP številko ESP modula lahko preverite tako, da v telefonu odprete WiFi nastavitve in kliknete informacije o omrežju. Privzet IP naslov v AP načinu je 192.168.4.1. Statični IP lahko spremenite tako, da sledite tej referenci Wifi.config() [5].
Odprite TCP klienta, ki ste ga predhodno prenesli. Ustvarite povezavo tako, da kliknete connect, dodajte IP ESP in vrata 80, kot sledi, glej sliko 3. Zdaj samo še počakajte, da TCP konzola sporoči “Povezano”.
Po vzpostavitvi povezave pošljite zahtevo tako, da v TCP klienta vnesete naslednjo kodo:
esp8266: <any AT Commands>
Komunikacija z ESP8266 poteka prek Attention ali AT ukazov, glej tabelo 2.
Preverite priloženo tabelo ukazov AT in si oglejte kode, ali pa vklopite vgrajeno LED-ico z ukazom:
LEDON
Ali izklopite vgrajeno LED-ico z ukazom:
LEDOFF
Ali zgolj izpišite:
DOBER DAN
Glede na logiko, ki jo vnesete v kodo, lahko spremenite odziv, ki ga pošljete.
Pomembno: esp8266, LEDON, LEDOFF in DOBER DAN so moji identifikatorji ukazov po meri. Če vnesete kar koli drugega, se vrne ErrRead.
ErrRead pomeni, da se v poslanem sporočilu ne ujema noben identifikator ukaza.
Sporočilo ErrRead je kodirano v vrstici 64.
O vezju
ESP-jev priključek za napajanje je na mojem ESP11 označen kot VIN, vendar je pri nekaterih različicah lahko 3,3 V ali Power ali VCC.
Za delovanje boste morali napajati tudi ESP-jev CH_EN priključek ali Enable priključek.
POMEMBNO: za napajanje ESP8266 nikoli ne uporabljajte napetosti višje kot 3,3VDC!
ESP8266 lahko uporablja 3,3 V. Več kot to bo uničilo modul.
Ker ima Arduino 5 V, sem moral vgraditi uporovni delilnik napetosti. ESP-jev TX je povezan z Uno-jevim RX priključkom, kar pomeni, da bo Uno prejel (RX) vse, kar želimo poslati (TX) iz ESP-ja, in obratno.
Po izgradnji tega vezja smo pripravljeni na zagon WiFi z Arduino UNO.
Če prek USB kabla priključite serijski razhroščevalnik ali odprete COM vrata, bo komunikacija med ESP in Arduinom motena in ne bo mogla delovati. Zato pred programiranjem Arduino Uno najprej odstranite Rx/Tx ESP-ja.
Nekaj besed o programu
Pomembno: Obstajajo različne vrste ESP8266. V priloženi kodi v vrstici 16 spremenite hitrost prenosa podatkov glede na to, kaj uporablja vaš ESP8266 , glej program 1.
program 1
Vse naše zahteve bodo prebrane in razčlenjene v funkciji loop() if(wifiSerial.available()>0){ String message = readWifiSerialMessage(); if(find(message,«esp8266:«)){ String result = sendToWifi(message.substring(8,message.length()),responseTime,DEBUG); if(find(result,«OK«)) sendData(»n«+result); else sendData(»nErrRead«); //At command ERROR CODE for Failed Executing statement }else if(find(message,«HELLO«)){ //receives HELLO from wifi sendData(»\nHI!«); //arduino says HI }else if(find(message,«LEDON«)){ digitalWrite(13,HIGH); }else if(find(message,«LEDOFF«)){ digitalWrite(13,LOW); } else{ sendData(»nErrRead«); //Command ERROR CODE for UNABLE TO READ } }
Zgoraj lahko vidite, da sem uporabil svojo funkcijo find(<prejeto sporočilo>,<sporočilo, ki ga želite najti> ) za interpretacijo sporočila in sporočanje Arduinu, katero kodo naj pokliče.
Če želite komunicirati z Arduino UNO ali zahtevati, da nekaj naredi, samo dodajte svoj pogoj. na primer , glej program 2.
program 2
if(find(message,«MY CODE«)){ // I found 'MY CODE' from received message // lets do something here } if(find(message,«A«)){ // I found 'A' from received message // lets do something here } Dodal sem nekaj funkcij za komunikacijo z ESP8266: /* * Name: sendData * Description: Function used to send string to tcp client using cipsend * Params: * Returns: void */ void sendData(String str){ String len=««; len+=str.length(); sendToWifi(»AT+CIPSEND=0,«+len,responseTime,DEBUG); delay(100); sendToWifi(str,responseTime,DEBUG); delay(100); sendToWifi(»AT+CIPCLOSE=5«,responseTime,DEBUG); } /* * Name: find * Description: Function used to match two string * Params: * Returns: true if match else false */ boolean find(String string, String value){ if(string.indexOf(value)>=0) return true; return false; } /* * Name: readSerialMessage * Description: Function used to read data from Arduino Serial. * Params: * Returns: The response from the Arduino (if there is a reponse) */ String readSerialMessage(){ char value[100]; int index_count =0; while(Serial.available()>0){ value[index_count]=Serial.read(); index_count++; value[index_count] = ' '; // Null terminate the string } String str(value); str.trim(); return str; } nadaljevanje programa 2 nadaljevanje programa 2 /* * Name: readWifiSerialMessage * Description: Function used to read data from ESP8266 Serial. * Params: * Returns: The response from the esp8266 (if there is a reponse) */ String readWifiSerialMessage(){ char value[100]; int index_count =0; while(wifiSerial.available()>0){ value[index_count]=wifiSerial.read(); index_count++; value[index_count] = ' '; // Null terminate the string } String str(value); str.trim(); return str; } /* * Name: sendToWifi * Description: Function used to send data to ESP8266. * Params: command - the data/command to send; timeout - the time to wait for a response; debug - print to Serial window?(true = yes, false = no) * Returns: The response from the esp8266 (if there is a reponse) */ String sendToWifi(String command, const int timeout, boolean debug){ String response = »«; wifiSerial.println(command); // send the read character to the esp8266 long int time = millis(); while( (time+timeout) > millis()) { while(wifiSerial.available()) { // The esp has data so display its output to the serial window char c = wifiSerial.read(); // read the next character. response+=c; } } if(debug) { Serial.println(response); } return response; } /* * Name: sendToUno * Description: Function used to send data to Arduino. * Params: command - the data/command to send; timeout - the time to wait for a response; debug - print to Serial window?(true = yes, false = no) * Returns: The response from the esp8266 (if there is a reponse) */ String sendToUno(String command, const int timeout, boolean debug){ String response = »«; Serial.println(command); // send the read character to the esp8266 long int time = millis(); while( (time+timeout) > millis()) nadaljevanje programa 2 nadaljevanje programa 2 { while(Serial.available()) { // The esp has data so display its output to the serial window char c = Serial.read(); // read the next character. response+=c; } } if(debug) { Serial.println(response); } return response; The story
To je to! Zdaj, ko ste se naučili, kako komunicirati z Arduino Uno prek WiFi, lahko raziskujete več projektov interneta stvari. Izkoristite moč tega WiFi modula in postanite ustvarjalec!. Vabljeni k dodajanju popravkov v mojo github zbirko [6].
Napredni način
Če poznate izdelavo mobilnih aplikacij, spletnih aplikacij, spletnih storitev ali spletnega razvoja na splošno, lahko izdelate odjemalske aplikacije, ki lahko pošljejo TCP zahtevo v ESP.
Primeri aplikacij, ki jih lahko izdelate, so daljinski upravljalnik, spletna nadzorna plošča, Chat Bot, aplikacija Pritisni tipko itd. Izdelate lahko tudi dva takšna projekta, da se lahko pogovarjata med seboj.
Ali pa naredite drugo napravo, ki pošilja TCP zahtevo za ukaz Arduino Uno.
Viri:
https://github.com/imjeffparedes/iot-esp8266-arduino-interface
https://www.dummies.com/computers/arduino/how-to-upload-a-sketch-to-an-arduino/
https://cordobo.com/2300-flash-esp8266-01-with-arduino-uno/
https://play.google.com/store/apps/details?id=com.sollae.eztcpclient
https://www.arduino.cc/en/Reference/WiFiConfig
https://github.com/imjeffparedes/iot-esp8266-arduino-interface
Povzeto po:
https://bit.ly/3xrwdqf
https://hackster.io