Mājas Programmas Arduino vadība caur wifi. Arduino nodarbības: ierīču vadīšana no viedtālruņa manekeniem

Arduino vadība caur wifi. Arduino nodarbības: ierīču vadīšana no viedtālruņa manekeniem

Programmaparatūras, atjauninājumu un citu datu pārsūtīšana, izmantojot lodāmuru un vadus, nav labākais risinājums Arduino. Tomēr arduino wi-fi mikrokontrolleri nav lēti, un tie ne vienmēr ir nepieciešami, tāpēc lietotāji nevēlas tos nevajadzīgi izmantot savos projektos.

Bet tagad tirgu ir iekarojis cits Ķīnas produkts; jūs varat savienot savu Wi-Fi traucētāju esp8266 ar Arduino plati vai citu sistēmu, un jūs iegūsit stabilu savienojumu ar vairākām citām priekšrocībām. Tātad, noskaidrosim arduino uno wi-fi un to, vai ir vērts iegādāties šo moduli, kā arī to, kas patiesībā ir līdzīgs arduino wi-fi mikrokontrolleris.

Pieejamie Wi-Fi moduļi priekš Arduino

Mūsdienās lielākā daļa Arduino lietotāju vairs neuztraucas par šādu ierīču cenu, lai gan pirms 3 gadiem Arduino wi-fi modulis tika uzskatīts par greznību. Tas viss, pateicoties wi-fi jammer esp8266, kura ražotāji tirgū ieviesa pilnīgi jaunu produktu, kas ir pārsteidzošs savā funkcionalitātē un tajā pašā laikā ir diezgan lēts, kas deva būtisku ieguldījumu un radīja konkurenci šajā virzienā.

Tādējādi arduino wi-fi esp8266 tagad tiek uzskatīts par pieejamāko moduli tirgū, tāpat kā visi tā brāļi. Līdz ar to cena ārzemju vietnēs ir sākot no 2 dolāriem, kas ļauj šos moduļus iegādāties pa partijām un nav tūkstoš reižu jāpārlodē, pārlodējot kontaktus, lai saglabātu funkcionalitāti.

Sākumā šis Arduino wi-fi modulis tika izmantots galvenokārt kā arduino wi-fi vairogs, jo tas bija lētākais variants un nekādā ziņā nebija zemāks par sākotnējo. Ierīce patiešām ir gandrīz leģendāra, jo tās cenai nav būtisku trūkumu. Ir daudz bibliotēku, tostarp lietotāju bibliotēkas, kā arī atbalsta darbu, izmantojot seriālās kopnes un vienkāršākās AT un AT+ komandas. Pateicoties tam, nav nepieciešams pētīt bēdīgi slavenā C99 semantiku, kā tas bieži notiek ar citiem trešo pušu mikrokontrolleriem.

Attiecīgi pat iesācējs to izdomās dažu sekunžu laikā, un profesionālis varēs izmantot jau sagatavotas bibliotēkas. Citas priekšrocības ietver:

  1. Procesors ir 160 MHz, bet tas ir 32 bitu, kas atstāj zināmu iespaidu uz veiktspēju. Bet ir vērts atcerēties, ka modulis joprojām tiek izmantots kopā ar Arduino dēļiem, kas paši samazina augstas frekvences un patērē lielāko daļu resursu nezināmu iemeslu dēļ.
  2. Ražotājs, kurš izlaida esp8266 wi-fi moduli, neapturēja interesantus projektus, un tagad ir vesela virkne pārbaudītas kvalitātes mikrokontrolleru.
  3. Mūsdienu tīkla drošības standarti. Protams, WPA un WPA2 vairs nav tik droši, kā mēs vēlētos, taču to klātbūtne nevar mūs iepriecināt tik lētā kontrolierī.
  4. 16 izvades porti, ieskaitot 10 bitu, ļaujot eksperimentēt ar plati.

Vēl svarīgāk ir tas, ka jūs atradīsiet līdz pat 4 megabaitiem pastāvīgās atmiņas atkarībā no plates veida, un tas ievērojami vienkāršo darbu ar lielām bibliotēkām un pat dažiem multivides failiem. Galu galā lielākajā daļā Arduino dēļu pat 1 megabaits tiek uzskatīts par nepieejamu greznību.

Esp8266 wi-fi īpašības noteikti ir iepriecinošas, it īpaši salīdzinājumā ar tā dārgākajiem konkurentiem, taču lietotājam, kuram nav iepriekšējas pieredzes ar šīm platēm, radīsies jautājums, kā to savienot. Fakts ir tāds, ka modulim ir daudz vairāk tapu, nekā iesācēji ir pieraduši redzēt, un attiecīgi viņi sāk krist panikā. Tomēr, ja jūs saprotat situāciju, tad patiesībā tajā nav nekā sarežģīta. Pietiek uzkrāt lodmetālu un lodāmuru un vienkārši izlasīt instrukcijas.

Kā savienot Wi-Fi moduli ar Arduino

Apskatīsim esp8266 esp 12e savienošanu un to, kas ir esp8266 wi-fi uart tilts. Galu galā visvairāk jautājumu rada moduļa savienojums un konfigurācija.


Vispirms izlemiet, kura mikrokontrollera versija jums ir. Pirmajā pie tapām ir iebūvētas gaismas diodes, bet otrajā, kuru sāka ražot pavisam nesen, signāllampiņas atrodas pie antenas.

Pirms savienojuma izveides jums vajadzētu lejupielādēt jaunāko programmaparatūru, kas ļauj palielināt pakešu maiņas kursu līdz 9600 informācijas vienībām sekundē. Un mēs pārbaudīsim savienojumu, izmantojot usb-ttl kabeli un atbilstošo termināli no CoolTerm.


Iepriekš aprakstītās tapas kabeļa pievienošanai ir standarta, taču barošana tiek piegādāta caur 3,3 voltu kontaktu no Arduino. Ir svarīgi atcerēties, ka plates piegādāto maksimālo strāvu nevar iestatīt virs 150 mA, un esp8266 esp 07 un esp8266 asprātīgajam mākoņa wi-fi modulim arduino ir nepieciešami 240 mA.

Tomēr, ja nav cita strāvas avota, varat izmantot standarta versiju no Arduino, taču cietīs dēļa jauda. Lai gan, ja slodze nav liela, pietiek ar 70 mA, esiet gatavi pēkšņām mikrokontrollera pārstartēšanas reizēm maksimālās slodzes laikā un attiecīgi rakstiet programmatūru, lai tā filtrētu un sadalītu failus, nepārslogojot plati.


Tālāk ir norādīta cita savienojuma iespēja. Svarīgi - RX-TX kontakti ir savienoti ar krustiņu. Tā kā ESP8266 moduļa signāla līmeņi ir 3,3 V, bet Arduino — 5 V, signāla līmeņa pārveidošanai ir jāizmanto pretestības sprieguma dalītājs.

Wi-Fi moduļa reģistrēšana Arduino

Kā zināms, ar atbilstošu pieredzi esp8266 ex 12e vairogu var savienot pārī ar viedtālruni, bet iesācējiem esp8266 esp 12 reģistrēšana Arduino sistēmā sagādā grūtības. Faktiski pietiek ar moduļa pievienošanu un tā funkcionalitātes pārbaudi, izdodot vairākas standarta AT komandas, izmantojot atkļūdošanas izvēlni.

Piemēram, varat pievienot mirgošanu ar standarta LED (iepriekš redzamajai savienojuma shēmai):

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

Tiklīdz dēlis apstiprinās, ka sistēmā redz mikrokontrolleri, varat sākt pilnu darbu ar to. Tomēr ir vērts atzīmēt, ka, ja pati Arduino plate projektā tiek izmantota tikai šī kontrollera pievienošanai, tas ir neracionāli.

Pietiek ar USB-UART pārveidotāju, jo esp8266 neizmanto Arduino “smadzenes”, un tā zibatmiņa ir pilnīgi pietiekama, lai saglabātu pāris pamata bibliotēkas un programmaparatūru. Attiecīgi nav jēgas tērēt papildus naudu par palīgplati, ja to var vienkārši pielodēt pie pārveidotāja un tālāk izmantot projektā. Tajā pašā laikā, pievienojot papildu barošanas avotu un neuztraucoties, ka datu pārraide tiks pārtraukta vissvarīgākajā brīdī sistēmas jaudas trūkuma dēļ.

Svarīga piezīme! Pēdējā ķēdē mēs augšupielādējam skici Arduino kā parasti, taču, tā kā ESP8266 modulis ir savienots ar tapām 0 un 1, programmēšana kļūst neiespējama. Kompilators parādīs kļūdu. Atvienojiet vadus, kas ved uz ESP8266 no kontaktiem 0 un 1, veiciet programmēšanu un pēc tam atgrieziet tapas savās vietās un nospiediet Arduino atiestatīšanas pogu.

ESP8266 mikroshēma ir viens no populārākajiem rīkiem bezvadu sakaru organizēšanai viedās mājas projektos. Izmantojot bezvadu kontrolieri, jūs varat organizēt saziņu caur WiFi saskarni, nodrošinot Arduino projektiem piekļuvi internetam un iespēju attālināti vadīt un vākt datus. Pamatojoties uz ESP8266, ir izveidoti tādi populāri dēļi kā WeMos un NodeMcu, kā arī milzīgs skaits paštaisītu projektu. Šajā rakstā mēs uzzināsim, kas ir ESP82266, kādas ir tā šķirnes un kā strādāt ar ESP8266 Arduino IDE.

ESP8266 ir mikrokontrolleris ar WiFi interfeisu, kuram ir iespēja izpildīt programmas no zibatmiņas. Ierīci 2014. gadā izlaida Ķīnas uzņēmums Espressif, un tā gandrīz uzreiz kļuva populāra.

Kontrolieris ir lēts, tam ir neliels skaits ārējo elementu un tam ir šādi tehniskie parametri:

  • Atbalsta Wi-Fi protokolus 802.11 b/g/n ar WEP, WPA, WPA2;
  • Ir 14 ievades un izvades porti, SPI, I2C, UART, 10 bitu ADC;
  • Atbalsta ārējo atmiņu līdz 16 MB;
  • Nepieciešamā strāvas padeve ir no 2,2 līdz 3,6 V, strāvas patēriņš ir līdz 300 mA, atkarībā no izvēlētā režīma.

Svarīga iezīme ir lietotāja nemainīgās atmiņas trūkums mikroshēmā. Programma tiek izpildīta no ārējā SPI ROM, izmantojot nepieciešamo programmas elementu dinamisku ielādi. Piekļuvi iekšējām perifērijas ierīcēm var iegūt nevis no dokumentācijas, bet gan no bibliotēku kopas API. Ražotājs norāda aptuveno operatīvās atmiņas apjomu - 50 kB.

ESP8266 plates īpašības:

  • Ērts savienojums ar datoru - caur USB kabeli, barojas ar to;
  • Iebūvēta 3.3V sprieguma pārveidotāja pieejamība;
  • 4 MB zibatmiņas pieejamība;
  • Iebūvētas pogas pārstartēšanai un mirgošanai;
  • Visas pieslēgvietas tiek izvadītas uz dēļa, izmantojot divas ķemmes ar 2,5 mm soli.

ESP8266 moduļa pielietojuma jomas

  • Automatizācija;
  • Dažādas sistēmas viedajai mājai: Bezvadu vadība, bezvadu kontaktligzdas, temperatūras kontrole, signalizācijas sistēmu papildinājums;
  • Mobilā elektronika;
  • Tag ID;
  • Bērnu rotaļlietas;
  • Acu tīkli.

esp8266 pinout

Ir ļoti daudz ESP8266 moduļa šķirņu. Attēlā parādīti daži no tiem. Vispopulārākā iespēja ir ESP 01.

Programmas izpilde ir jānosaka pēc GPIO0, GPIO2 un GPIO15 portu stāvokļa, kad beidzas barošanas padeve. Var atšķirt divus svarīgus režīmus - kad kods tiek izpildīts no UART (GPIO0 = 0, GPIO2 = 1 un GPIO15 = 0) flash kartes mirgošanai un kad tas tiek izpildīts no ārējā ROM (GPIO0 = 1, GPIO2 = 1). un GPIO15 = 0) standarta režīmā.

ESP01 spraudnis ir parādīts attēlā.

Kontaktinformācija:

  • 1 – zemējums, 8 – jauda. Saskaņā ar dokumentāciju, spriegums tiek piegādāts līdz 3,6 V - tas ir svarīgi ņemt vērā, strādājot ar Arduino, kas parasti tiek piegādāts ar 5 V.
  • 6 — RST, kas nepieciešams, lai pārstartētu mikrokontrolleru, ja tam tiek piemērots zems loģikas līmenis.
  • 4 – CP_PD, ko izmanto arī, lai ierīci ieslēgtu enerģijas taupīšanas režīmā.
  • 7 un 0 – RXD0 un TXD0, šī ir aparatūras UART, kas nepieciešama moduļa mirgošanai.
  • 2 – TXD0, šai tapai ir pievienota gaismas diode, kas iedegas, ja GPIO1 loģikas līmenis ir zems un dati tiek pārsūtīti caur UART.
  • 5 – GPIO0, ieejas un izejas ports, arī ļauj pārslēgt ierīci programmēšanas režīmā (kad pieslēgts zemam loģikas līmenim un pieslēgts spriegums).
  • 3 – GPIO2, ieejas un izejas ports.

Galvenās atšķirības starp Arduino un ESP8266

  • ESP8266 ir lielāks zibatmiņas apjoms, savukārt ESP8266 nav nemainīgas atmiņas;
  • ESP8266 procesors ir ātrāks nekā Arduino;
  • ESP8266 ir Wi-Fi;
  • ESP8266 patērē vairāk strāvas nekā Arduino;

ESP8266 programmēšana Arduino IDE

Esp8266 izstrādes komplektā ietilpst:

  • Kompilators no GNU kompilatoru kolekcijas.
  • Bibliotēkas, WiFi, TCP/IP protokolu skursteņi.
  • Līdzeklis informācijas ielādei kontroliera programmā.
  • Darbojas IDE.

Sākotnēji ESP8266 moduļi tiek piegādāti ar programmaparatūru no ražotāja. Ar tā palīdzību jūs varat vadīt moduli no ārējā mikrokontrollera un strādāt ar Wi-Fi kā modemu. Ir arī daudzas citas gatavas programmaparatūras. Daži no tiem ļauj konfigurēt moduļa darbību, izmantojot WEB saskarni.

Var programmēt no Arduino IDE. Ar tās palīdzību jūs varat viegli rakstīt skices un augšupielādēt tās ESP8266, flash ESP8266 un nav nepieciešama pati Arduino plate. Arduino IDE atbalsta visu veidu ESP8266 moduļus.

Pašlaik ESP8266 var ieviest šādas funkcijas:

  • Vadu valodas pamatfunkcijas. Varat kontrolēt GPIO portus tāpat kā Arduino plates tapas: pinMode, digitalRead, digitalWrite, analogWrite. Komanda analogRead(A0) ļauj nolasīt ADC vērtības. Izmantojot komandu analogWrite (pin, value), varat savienot PWM ar vēlamo GPIO izvadi. Ja vērtība = 0, PWM ir atspējots, maksimālā vērtība sasniedz konstanti, kas vienāda ar 1023. Izmantojot attachInterrupt un detachInterrupt funkcijas, varat pārtraukt jebkuru GPIO portu, izņemot 16.
  • Laiks un kavēšanās. Izmantojot komandas millis un micros, varat atgriezt ms un μs, kas ir pagājuši kopš sākuma. Aizkave ļauj apturēt programmas izpildi uz vēlamo laiku. Arī aizkaves (…) funkcija ļauj uzturēt normālu Wi-Fi darbību, ja skice satur lielus elementus, kuru izpildei nepieciešams vairāk nekā 50 ms. Ienesīgums () ir funkcijas aizkaves (0) analogs.
  • Serial un Serial1 (UART0 un UART1). Sērijveida darbs pie ESP8266 ir līdzīgs darbam ar Arduino. Datu rakstīšana un lasīšana bloķē koda izpildi, ja 128 baitu FIFO un 256 baitu programmatūras buferis ir pilns. Serial objekts izmanto aparatūru UART0, tam varat iestatīt tapas GPIO15 (TX) un GPIO13 (RX), nevis GPIO1(TX) un GPIO3(RX). Lai to izdarītu, pēc Serial.begin(); jums ir nepieciešams izsaukt Serial.swap();. Tāpat Serial1 izmanto UART1, kas darbojas pārraidei. Nepieciešamā tapa ir GPIO2.
  • Makro PROGRAMMA. Tās darbība ir līdzīga Arduino darbībai. Ļauj pārvietot tikai lasāmus datus un virkņu konstantes uz zibatmiņu. Tajā pašā laikā ESP8266 nesaglabā tās pašas konstantes, kas rada papildu zibatmiņas iztērēšanu.
  • I2C. Pirms darba ar I2C kopni, kopnes tiek atlasītas, izmantojot funkciju Wire.pins(int sda, int scl).
  • SPI, OneWire – pilnībā atbalstīts.

Esp8266 izmantošana, lai sazinātos ar Arduino, izmantojot WiFi

Pirms pievienošanas Arduino ir svarīgi atcerēties, ka ESP8266 barošanas spriegums nevar būt lielāks par 3,6, savukārt Arduino spriegums ir 5 V. Jāpievieno 2 mikrokontrolleri, izmantojot rezistīvos dalītājus. Pirms moduļa pievienošanas jums jāiepazīstas ar izvēlētā ESP8266 spraudni. ESP8266-01 savienojuma shēma ir parādīta attēlā.

3,3 V no Arduino uz Vcc&CH_PD ESP8266 modulī, zemējums no Arduino uz zemi no ESP8266, 0 – TX, 1 – RX.

Lai uzturētu stabilu darbību, ESP8266 ir nepieciešams 3,3 V pastāvīga sprieguma avots un maksimālā strāva 250 mA. Ja strāvu nodrošina USB-TTL pārveidotājs, var rasties darbības traucējumi un darbības traucējumi.

Darbs ar ESP8266 Wi-Fi bibliotēku ir līdzīgs parasta vairoga bibliotēkai. Ir vairākas funkcijas:

  • mode(m) – lai izvēlētos vienu no trim režīmiem: klienta, piekļuves punkta vai abus režīmus vienlaikus.
  • softAP(ssid) – nepieciešams, lai izveidotu atvērtu piekļuves punktu.
  • softAP(ssid, parole) – izveido piekļuves punktu ar paroli, kurai jāsastāv vismaz no 8 rakstzīmēm.
  • WiFi.macAddress(mac) un WiFi.softAPmacAddress(mac) – nosaka MAC adresi.
  • WiFi.localIP() un WiFi.softAPIP() – IP adreses noteikšana.
  • printDiag(Serial); – ļaus noskaidrot diagnostikas datus.
  • WiFiUDP – atbalsts multiraides pakešu nosūtīšanai un saņemšanai klienta režīmā.

Darbs tiek veikts pēc šāda algoritma:

  • USB-TTL pievienošana USB un ESP.
  • Arduino IDE palaišana.
  • Rīku izvēlnē atlasiet vajadzīgo portu, plati, frekvenci un zibatmiņas izmēru.
  • Fails — piemēri — ESP8266WiFi — WiFiWebServer.
  • Uzrakstiet skicē Wi-Fi tīkla SSID un paroli.
  • Sāciet koda apkopošanu un augšupielādi.
  • Pagaidiet, līdz programmaparatūras process beidzas, atvienojiet GPIO0 no zemes.
  • Iestatiet ātrumu uz 115200.
  • Tiks izveidots savienojums un tiks ierakstīta IP adrese.
  • Atveriet pārlūkprogrammu, adreses joslā ievadiet IP/gpio/1 numuru
  • Paskatieties uz porta monitoru; ja gaismas diode ir pievienota GPIO2 izejai, tai vajadzētu iedegties.

NodeMCU, pamatojoties uz esp8266

NodeMCU ir platforma, kuras pamatā ir esp8266 modulis. Izmanto, lai attālināti vadītu ķēdi, izmantojot internetu, izmantojot Wi-Fi. Plāksne ir maza izmēra, kompakta, lēta, un tā priekšpusē ir USB savienotājs. Blakus ir pogas mikrokontrollera atkļūdošanai un atsāknēšanai. Ir uzstādīta arī ESP8266 mikroshēma. Barošanas spriegums ir no 5 līdz 12 V, vēlams barot vairāk par 10 V.

Plātnes lielā priekšrocība ir tā zemais enerģijas patēriņš. Tos bieži izmanto pašbarošanas ķēdēs. Uz tāfeles ir tikai 11 vispārējas nozīmes porti, no kuriem dažiem ir īpašas funkcijas:

  • D1 un D2 – I2C/ TWI interfeisam;
  • D5-D8 - SPI interfeisam;
  • D9, D10 – UART;
  • D1-D10 – var darboties kā PWM.

Platformai ir moderna API aparatūras ievadei un izvadei. Tas ļauj samazināt soļu skaitu, strādājot ar aprīkojumu un uzstādot to. Ar NodeMCU programmaparatūras palīdzību jūs varat izmantot visu darbības potenciālu ātrai ierīču attīstībai.

WeMos, pamatojoties uz esp8266

WeMos ir cita veida platforma, kuras pamatā ir mikrokontrolleris esp8266. Attiecīgi ir Wi-Fi modulis, tiek atbalstīts Arduino IDE, un ir savienotājs ārējai antenai. Platē ir 11 digitālās ieejas/izejas, kas (izņemot D0) atbalsta pārtraukumu/pwm/I2C/vienu vadu. Maksimālais barošanas spriegums sasniedz 3,3 V. Platformā ir arī USB savienotājs. Analogā ieeja 1 ar maksimālo spriegumu 3,2 V.

Lai strādātu ar moduli, jāinstalē CH340 draiveris un jākonfigurē Arduino IDE ESP8266. Lai to izdarītu, iestatījumu izvēlnes rindā “papildu saite dēļa pārvaldniekam” ir jāpievieno adrese http://arduino.esp8266.com/stable/package_esp8266com_index.json.

Pēc tam jums ir jāatrod esp8266 by ESP8266 pakotne un tā jāinstalē. Pēc tam rīku izvēlnē jāizvēlas Wemos D1 R2 mikrokontrolleris un jāpieraksta vēlamā skice.

Secinājumi par ESP8266

Izmantojot plates, kuru pamatā ir ESP8266 mikroshēma, varat saviem projektiem pievienot lielas interneta iespējas, padarot tos daudz viedākus. Tālvadības pults, datu vākšana un analīze serverī, balss apstrāde un attēlu apstrāde - tas viss kļūst pieejams, kad mēs savienojam mūsu projektu caur WiFi ar internetu. Nākamajos rakstos mēs sīkāk aplūkosim, kā var programmēt uz esp8266 balstītas ierīces, kā arī pievērsīsim uzmanību tādām populārām platēm kā WeMos un NodeMcu.

1. daļa: ESP8266 sagatavošana

Kāpēc šis raksts? Centrā jau ir vairāki raksti par ESP lietošanu dažādās konfigurācijās, bet nez kāpēc bez sīkākas informācijas par to, kā tieši viss ir savienots, mirgots un ieprogrammēts. Tāpat kā "Es paņēmu ESP, divas AA baterijas, DHT22, iemetu to kastē, kratīju stundu un termometrs ir gatavs!" Rezultātā sanāk dīvaini: tie, kas jau strādā ar ESP, paveiktajā nesaskata neko neparastu, un tie, kas vēlas mācīties, nesaprot, ar ko sākt. Tāpēc es nolēmu uzrakstīt detalizētu rakstu par to, kā ESP tiek savienots un mirgots, kā to savienot ar Arduino un ārpasauli un ar kādām problēmām es saskāros ceļā. Es sniedzu saites uz Aliexpress tikai tāpēc, lai sniegtu priekšstatu par komponentu cenām un izskatu.

Tātad, man bija divi mikrokontrolleri, septiņi dažādi sensori, pieci barošanas avoti, DHT22 temperatūras sensors un ļoti daudz dažādu veidu un krāsu vadu, kā arī neskaitāmi rezistori, kondensatori un diodes. Ne jau tas viss ir vajadzīgs termometram, bet, kad sāc strādāt pie mikroelektronikas, apstāties kļūst grūti.


Uzturs

Lai ESP8266 darbotos, ir nepieciešams 3,3 V spriegums un vismaz 300 mA strāva. Diemžēl Arduino Uno nespēj nodrošināt šādu strāvu, tāpat kā USB-UART adapteri (programmētāji), piemēram, FT232RL, to nespēj nodrošināt - to limits ir aptuveni 50mA. Tas nozīmē, ka jums būs jāorganizē atsevišķas ēdienreizes. Un būtu labāk, ja Arduino darbotos arī no 3,3 V, lai izvairītos no tādām problēmām kā “ESP moduļa RX kontaktam piedevu piecu voltu signālu, kāpēc tas smaržo pēc sadegušas plastmasas?”

Ir trīs risinājumi.

2. Pērciet gatavu moduli ar sprieguma regulatoru, kas samazina 5V uz 3,3V. Varbūt šī ir ērtākā iespēja.

3. Samontējiet moduli pats no AMS1117 regulatora un viena 22 µF tantala kondensatora.

Izvēlējos trešo variantu, jo man bieži vajag 3.3V, esmu mantkārīgs un man patīk būvēt regulatorus tieši barošanas blokos.

Ar AMS1117 viss ir vienkārši: ja liek ar tekstu uz augšu, tad spriegums pie kājām palielinās no kreisās puses uz labo: 0 (Gnd), 3.3V (Vout), 5V (Vin).
Starp nulli un izvadi jums ir nepieciešams 22 µF tantala kondensators (kā norādīts instrukcijās, kas notiks, ja uzstādīsit elektrolītisko kondensatoru - es neesmu pārbaudījis). Tantala SMD kondensatoram ir plus, kur ir sloksne. Nedaudz zvērīga SMD komponentu lodēšana, kas pilnībā nav paredzēta šādam barbarismam un:

Noteikti pārbaudiet izejas spriegumu. Ja tas ir ievērojami mazāks par 3,3 V (piemēram, 1,17 V) - pēc lodēšanas ļaujiet regulatoram atdzist un pārbaudiet kontaktus. Ja ievietojat kondensatoru, kas ir lielāks par 22 µF, multimetrs var parādīt augstāku spriegumu.

Kāpēc AMS1117? To plaši izmanto. To var atrast gandrīz visur, pat Arduino Uno, parasti AMS1117-5.0.
Ja zini ko līdzīgu izmēru un cenu, vēl vieglāk lietojamu, lūdzu raksti.

Svarīgs punkts. Es nezinu, kāpēc, bet AMS1117 ir ļoti izvēlīgs attiecībā uz savienojumu kvalitāti. Kontaktiem jābūt uzticamiem. Labāk - lodēts. Citādi testos ražo 3.3V, bet zem slodzes neko nerada.

ESP8266 pievienošana

Izvēlējos 07 modeli, jo tam ir lielisks metāla ekrāns, kas darbojas kā aizsardzība pret traucējumiem, mehāniskām ietekmēm un kā radiators. Pēdējais padara atšķirību starp izdegušu un vienkārši uzsildītu moduli. Papildus ir ligzda ārējai antenai.

Lai mikroshēma sāktu darboties, jums ir jāpievieno VCC un CH_P caur 10 kOhm rezistoru. Ja tas tā nav, derēs jebkurš no 1-20 kOhm diapazona. Turklāt konkrēti 07 modelim arī nepieciešams, lai GPIO15 (vistuvāk GND) būtu “iezemēts” (attēlā tas nav redzams, jo pieslēgums ir otrā pusē).

Tagad mēs ņemam USB-UART adapteri, pārslēdzam to uz 3,3 V un pievienojam RX uz TX, TX uz RX un GND ar zemi (man bez šī pārraide ir nestabila). Ja nevarat pārslēgties uz 3,3 V, varat izmantot vienkāršu rezistoru sprieguma dalītāju: pievienojiet ESP RX ar TX adapteri, izmantojot pretestību 1 kOhm, un ESP RX ar zemi caur 2 kOhm. Ir daudzi sarežģītāki un uzticamāki veidi, kā savienot 3,3 V un 5 V, taču šajā gadījumā tas derēs.

Un mēs savienojam ar ātrumu 9600 caur nepieciešamo COM portu (to var redzēt ierīču pārvaldniekā).

Lietoju SecureCRT, der arī Putty, un Linux pazinēji jau zina, ko darīt un kur meklēt.

(AT+RST atiestata mikroshēmu)

Ja nekas nenotiek - izslēdziet - ieslēdziet strāvu, ja joprojām nekas nenotiek - pārbaudiet TX/RX atbilstību, mēģiniet tos pārkārtot vai pielodēt pie mikroshēmas.

Reizēm mikroshēma sasalst imitācijas eksperimentu laikā un tad tā ir jāatvieno, tajā skaitā atvienojot adapteri (piemēram, izvelkot to no USB), jo pietiek pat ar ienākošām jaudas drumstalām, lai mikroshēma spītīgi apstātos un nestrādāt.

Dažreiz triki ar adapteri ietver USB porta piekārtu. Kā pagaidu risinājumu varat izmantot citu USB portu, taču kopumā labāk ir restartēt datoru.

Dažreiz mainās COM porta numurs. Operētājsistēmā Linux to var atrisināt, izmantojot udev.

Ja teksta vietā saņemat atkritumus, pārbaudiet ātruma iestatījumus. Dažu vecāku mikroshēmu cena ir 115 200.

Sākumā mikroshēma uzsilst, bet, ja tā patiešām ir karsta un turpina sildīt, atvienojiet un pārbaudiet visus savienojumus. Lai +3,3V netiek līdz korpusam, lai 5V nekur nenāk, lai adaptera "zeme" ir savienota ar mikroshēmas "zemi". Modeļus ar metāla ekrānu ir ļoti grūti sadedzināt (bet nekas nav neiespējams), un ir sūdzības par modeļiem bez ekrāniem, sakot, ka pat neliela kļūda var būt pēdējā mikroshēmas mūžā. Bet es to neesmu pārbaudījis.

Programmaparatūra

Mana izvēle ir NodeMCU. Tam ir problēmas ar atmiņas un aparatūras atbalstu, taču tas daudzkārt atmaksājas koda vienkāršības un atkļūdošanas vienkāršības dēļ.

Jums būs nepieciešams arī NodeMCU flasher un LuaLoader (pēdējais nav obligāts; ir arī citi klienti darbam ar šo programmaparatūru).

Izslēdziet mikroshēmu. Mēs savienojam GPIO0 ar zemi un ieslēdzam mikroshēmu:

Ja nekas nenotiek un AP MAC/STA MAC lauki ir tukši, vēlreiz pārbaudiet, vai GPIO0 ir uz zemes.
Ja programmaparatūra ir sākusies, bet sastingst, skatieties cilnē Log, nez kāpēc šī konkrētā mikroshēma atteicās zibināt uz FT232RL, bet uz PL2303HX tā tika bez problēmām mirgota ar ātrumu 576000. PL2303HX norādītajā versijā nav slēdža uz 3.3V lai to izmantotu ir jāatver plastmasas korpuss un jāpielodē vads no 5V uz 3.3V, ir opcijas ar piecām izejām: 3.3, 5, TX, RX, Gnd.


Lūdzu, ņemiet vērā: STA MAC ir mainījies. Man ir aizdomas, ka mirgotājs to rādīja nepareizi, bet pārbaude ir nepieciešama.

Lai ietaupītu pūles un nervus, varat ņemt gatavu vai daļēji gatavu versiju.

Ir vienreizējās lietošanas adapteri ar ērtu vadu.
Ēst

Tāpat kā daudzi citi pašizstrādātāji, es regulāri izmantoju AVR mikrokontrollerus dažādiem hobiju projektiem. Pateicoties Arduino koncepcijai, šie izstrādājumi tagad iegūst arī elegantu izskatu. Patiešām, par kādiem 300–400 rubļiem mēs iegūstam miniatūru daudzslāņu plati ar masku, sietspiedi un ar mikrokontrollera perifērijas ierīcēm, kas tajā ir pilnībā izkārtotas (un SMD versijā!). Es pat nerunāju par visu veidu vienas un tās pašas “Arduino” sērijas spraudņu moduļiem: sensoriem, kontrolleriem, displejiem un veseliem papildu perifērijas ierīču komplektiem, kas mums ir tik ļoti nepieciešami. Un atkal viss ir lēts un ar izcilu veiktspēju. Uz ceļgala praktiski vairs nevajag neko atšķaidīt un dzert.

Bet visas šīs dažādās amatieru amatniecības, protams, prasa iepriekšēja programmēšana. Un pēc tam ar dažādiem uzlabojumiem šie amatniecības izstrādājumi ir pastāvīgi nepieciešami atsvaidzināt. Ir skaidrs, ka ērtāk to darīt attālināti, nevis pastāvīgi nēsāt tos pie parastā programmētāja. Kopumā, pateicoties tai pašai Arduino platformai, šeit ir daudz iespēju: Bluetooth, ZigBee, radio kanāls ar jūsu personīgo protokolu, IR un pat Wi-Fi. Visi no tiem ļauj izveidot bezvadu kontaktu ar mikrokontrolleri. Bet mēs koncentrēsimies uz pēdējo iespēju. Ir četri galvenie iemesli:

1: moderns, lietu internets!

2: katrā dzīvoklī ir bezvadu maršrutētājs, reģistrējiet ierīces savā mājas tīklā un voila!

3: jūsu amatniecība veic revolucionāru lēcienu savā attīstībā; tos var ne tikai programmēt no attāluma, bet arī tagad var sazināties ar apkārtējo pasauli: elektroniskie pulksteņi neatkarīgi ņem precīzu laiku no NTP pulksteņu serveriem, izpildmehānismi tiek vadīti no otra pilsētas vai valsts gala, ierakstīšanas ierīces saglabā uzkrāto dati mākonī utt. un tā tālāk.

4: ir brīnišķīga ESP8266 mikroshēmu sērija, kurā to visu nav ļoti viegli ieviest.

Turklāt šajā rakstā, izmantojot servo mehāniskās rokas piemēru, tiks izjaukta un demonstrēta attālā programmēšana un datu apmaiņa no datora (vai jebko citu) ar ierīcēm, kuru pamatā ir AVR mikrokontrolleri. Es vēlos uzreiz atzīmēt, ka visas tālāk norādītās programmas ir paredzētas tikai demonstrēšanai un tām nav komerciālas vērtības. Tāpēc sūdzības, piemēram, kāpēc programmētājs ir tik kastrēts un maz funkcionāls vai kāpēc nav visur pieejami papildu pakalpojumi, netiek pieņemtas. Tā kā kodi ir atvērti, ikviens var tos pievienot pēc saviem ieskatiem, bet man ar tiem manam darbam pietiek.

Tiek pieņemts, ka lasītājs jau ir iepazinies ar “Arduino” moduļiem (vairogiem) un ESP8266 savienojumu un programmaparatūru. Patiesībā internetā ir ievietots milzīgs daudzums materiālu, kas izskaidro darba ar šīm ierīcēm pamatus, un es negribētu šeit atkārtot. Iesācējiem raksta beigās ir saraksts ar noderīgām saitēm par šiem jautājumiem, kur var atrast daudz informācijas par to, kāpēc tas viss jums neder. No savas pieredzes kā bijušais elektronikas inženieris varu atbildīgi apgalvot, ka 99% problēmu ir saistītas ar sekojošo:

1. Slikti kontakti. Tā kā “Arduino” vairogi nozīmē komutāciju savā starpā caur “vīriešu-sieviešu” vadiem, nevis ar lodēšanu, ļoti bieži kaut kas kaut kur atdalās. Pārbaudiet. Un vispār, kā saka, elektronika ir zinātne par kontaktiem.

2. Uztura problēmas. Nepiegādājiet 5 voltu strāvu, ja nepieciešams 3,3. Dažreiz tas izraisa dūmu izdalīšanos no ESP8266. Lai gan, no otras puses, tas bez problēmām sagremo loģiskos signālus no piecu voltu ierīcēm.

3. Problēmas ar pietiekamu strāvas padevi. ESP8266 ir viltīgs raksturs un dažreiz var patērēt gandrīz trīs simti miliampēru, lai gan pirms tam tas varēja apmierināties ar trīsdesmit. Attiecīgi vājais Arduino plates 3,3 voltu stabilizators, kuram jūs to bez vilcināšanās pievienojāt, nekavējoties nokrītas līdz mikroskopiskām vērtībām. Un jūs nevarat saprast, kāpēc tas dažreiz darbojas, dažreiz ne.

4. Apjukums ar secinājumiem. Vienmēr pārbaudiet, kuri signāli kur nonāk. RXD uztvērējam ir jāpievienojas TXD raidītājam, kā arī TXD ar RXD, bet MOSI ir jāpievienojas MOSI, bet MISO - MISO utt.

5. Nepaļaujieties uz ESP8266 ievilkšanas rezistoriem ķēdē, vienmēr velciet kontaktus līdz nullei vai jaudai, izmantojot 5–10 kiloomu ārējos rezistorus, nevis tikai džemperi. Pretējā gadījumā labākajā gadījumā jūs varat iegūt nebijušu strāvas patēriņu un pēc tam sajust nepatīkamo sadegušās plastmasas smaku.

6. Programmatūras problēmas. Tā kā programmatūru atsevišķiem lietotājiem raksta tie paši entuziasti, atjauninot vienas un tās pašas programmaparatūras versijas, periodiski parādās kļūdas un kļūdas pašā programmaparatūrā. Tas tiek apstrādāts, rāpojot pa attiecīgajiem forumiem, dažreiz pat angļu valodā. Daži biedri pat iebilda, ka pati ESP mikroshēma ir tikpat mitra kā laikapstākļi Sanktpēterburgā, taču, no otras puses, pastāv arī viedoklis, ka kopš 2014. gada (pirmās izlaišanas gada) situācija ar to ir dramatiski uzlabojusies ( atšķirībā no laikapstākļiem).

7. Noslēpumainas kļūmes. Tā ir reta, bet nervus kutinoša parādība. Piemēram, es nevarēju attālināti uzšūt vienu “Arduino” ierīci. Pareizāk sakot, tas strādāja, bet ar kļūdām. Bet tas strādāja bez kļūdām, ja uz tā karājās programmētāja kabelis (bet bez paša programmētāja). "Aha," es sev teicu un starp datu tapu un pulksteņa tapu pielodēju 15 pF kondensatoru. Viss strādāja. Bet diena nogalināja.

Tātad, sāksim ar visvienkāršāko lietu. Mums ir Ķīnā ražota MechArm mehāniskā daļa (bet ne Howard Wolowitz ražotā) un Windows personālais dators. Uzdevums ir attālināti mirgot programmu un vadīt to no datora.


Vadības kontrolierim ņemsim jauku miniatūru Arduino Nano plati ar ATmega328P akmeni. Šis dēlis labi iederas mehāniskās rokas iekšpusē.


Tagad izlemsim, kā mēs to ieprogrammēsim. Ir trīs galvenās metodes, kas ir vispiemērotākās attālajai programmaparatūrai: izmantojot SPI interfeisu, izmantojot iebūvēto sāknēšanas ielādētāju, caur JTAG portu.

Vienkāršākā iespēja, protams, ir iebūvēts sāknēšanas ielādētājs. Šī ir atmiņa, kas iepriekš reģistrēta FLASH, programma, kas saņem kodu, izmantojot noteiktu protokolu (piemēram, izmantojot vienkāršāko UART), un ar speciālām komandām to ieraksta ielādētās programmas vietā. Šādi darbojas, piemēram, pats ARDUINO IDE sāknēšanas ielādētājs. Pēc atiestatīšanas vai palaišanas sāknēšanas ielādētājs kādu laiku gaida, līdz tiek saņemti dati, un, ja tas negaida, tas sāk programmas izpildi no nulles adreses. Ja tiek saņemti dati, tas ieraksta tos programmas sadaļā. Pēc nākamās atiestatīšanas tiek sākta ielādētās programmas izpilde. Iespējams, es to aprakstīju neprecīzi un detalizēti, bet tā ir tā būtība. Rezultātā programmēšanai mums ir nepieciešami tikai trīs tapas: RTD uztvērējs, RESET un GND. Parasti ierakstītās programmas pārbaudei tiek izmantots arī TRD raidītājs, taču vienkāršām demonstrācijas lietojumprogrammām (nevis atomelektrostacijai) verifikāciju var izlaist.

Pats sāknēšanas ielādētājs ir uzrakstīts montāžas valodā; AVR datu lapās ir vienkāršu sāknēšanas ielādētāju piemēri. Varat atklāt esošu sāknēšanas ielādētāju, ja tas ir publiski pieejams, un vienkārši izmantot to gatavā formā, ja zināt protokolu, ar kuru tas darbojas. Vienīgais brīdinājums ir tāds, ka šim nolūkam jums ir jākonfigurē AVR īpašā režīmā, mirgojot īpašus drošinātāju bitus, kas tiek darīts ar parastu programmētāju, un pēc tam ar to tiek izmantots pats sāknēšanas ielādētājs mikrokontrollera atmiņā (tas ir, jūs joprojām nevar iztikt bez programmētāja vienu reizi).

Otrā iespēja ir programmēšana, izmantojot SPI seriālo interfeisu. Šeit nav iekšējā bootloader, un mēs programmējam, nosūtot īpašas komandas un pēc tam datus, izmantojot iepriekš minēto interfeisu. Šeit mums jau ir ārējais sāknēšanas ielādētājs, bet mums tas joprojām ir jāraksta. Pārraides laikā papildus RESET un GND tiek izmantotas četras papildu tapas: MOSI, MISO - dati, SLK sinhronizācija, CS - kristāla izvēle. Bet kopumā jūs varat arī noņemt MISO un CS. Dati tiks tikai saņemti (tad nebūs programmas verifikācijas), un mums jau ir tikai viens kristāls.

Katrai pieejai ir savi plusi un mīnusi (es JTAG nemaz neņēmu vērā, jo cilvēka mūžs ir īss). Bet galu galā es sliecos uz SPI, jo man bija pārāk slinks, lai rakstītu montētājā, un es nevarēju atrast atvērtus, gatavus sāknēšanas ielādētājus (es vienkārši neskatījos pietiekami rūpīgi).

Bezvadu kanāla izveidei, kā jau minēts, izvēlējos šobrīd ārkārtīgi plaši pazīstamo ESP8266 mikroshēmu - mikrokontrolleri, pareizāk sakot veselu Ķīnas ražotāja Espressif SoC (System-on-Chip) ar Wi-Fi interfeisu. Papildus Wi-Fi tas izceļas ar spēju izpildīt programmas no ārējās zibatmiņas. Īpaši savam projektam es paņēmu ESP8266-07 ar 512 KB atmiņu.


Kopumā ir piemērots jebkurš ESP8266, kur ir papildu kājas SPI ieviešanai. Tāpēc vienkāršākais ESP8266-01 mums nederēs, jo tam ir ļoti maz kontaktu I/O portiem. Bet, no otras puses, cenu atšķirība starp tām ir mazāka par simts rubļiem, un tie ir vienlīdz pieejami. Nu mums neder arī lielie atkļūdošanas dēļi ar ESP, kur ērtībai ir atdalīts kaudzis perifērijas, jo tie neiederas tur, kur gribam iebāzt, mūsu mehāniskajā rokā.

Idejas globālā būtība kopumā bija šāda. Mikrokontrollerī ielādētās programmas pamatteksts tiek pārsūtīts no datora uz ESP bezvadu režīmā, izmantojot WI-FI (jūsu mājas tīkla ietvaros). Un ESP jau raksta šo programmu pa vadu, izmantojot SPI interfeisu, tieši mikrokontrollera FLASH atmiņā. Pēc tam tas dabiski to atiestata un ļauj ielādētajai programmai izpildīt. Turklāt ESP ir jābūt neatkarīgam blokam, kas arī pārvalda datu apmaiņu ar mikrokontrolleri, jo mēs vēlamies ar to ne tikai programmēt, bet arī apmainīties ar datiem. Īpaši MechArm projektam pēc programmas ierakstīšanas mēs arī pārraidām vadības signālus uz servo, lai iedarbinātu šo roku. Tāpēc pašā ESP mums ir ieteicams instalēt TCP serveri, lai pārsūtītu programmu, un UDP serveri, lai kontrolētu MechArm. Attiecīgi šie serveri pievienojas mājas tīklam un uzmanīgi klausās, vai tur nav cilvēki, kas vēlas augšupielādēt jaunu kodu MechaArm vai pamāj ar to kādam.

Tātad, es atradu internetā programmaparatūru, kas jau ļauj programmēt AVR pa gaisu, bet galvenā problēma ir tā, ka šo programmaparatūru vairs nevar izmantot nekam citam. Un mēs vēlētos sazināties ar AVR attālināti pēc programmēšanas.

Kādu programmatūru izmantosim:

PC visu rakstīju JAVA, IntelliJ IDEA vidē. Bet principā var izmantot jebko, mums galvenais ir uzrakstīt klientu, kas atsūtīs programmu AVR mirgošanai uz ESP8266.

Es rakstu AVR programmas ATMEL STUDIO, C valodā, reti asamblejā. Es principiāli neizmantoju Arduino skices; gandrīz jebkuru nepieciešamo bibliotēku var uzrakstīt aptuveni stundas laikā un pilnībā izprotot tās darbību. Es mēģināju skices, bet, kamēr jums nav AVR operētājsistēmas, skices atņems jūsu drauga perifērijas ierīces un regulāri radīs traucējumus. Jā, pati Arduino IDE, salīdzinot ar ATMEL STUDIO, protams, ir ļoti primitīva lieta. Bet šeit jautājums, protams, ir strīdīgs, humanitāro zinātņu studentiem un skolēniem, iespējams, ar skicēm būs jautrāk un vieglāk.

Lai programmētu ESP8266, es izmantoju NodeMCU programmaparatūru un rakstīju programmas Lua valodā. Nē, es labprāt rakstītu Java un C valodā, taču tās nav pieejamas ESP. Lua valoda nav grūti lietojama mūsu uzdevumā; tās apguve ir vienkārša. Lai lejupielādētu programmas un atkļūdotu tās ESP, es izmantoju IDE ESPlorer. Pašmāju bezmaksas prece (bet var ziedot autoram), kuru, protams, nevar salīdzināt ar iepriekš minētajām vidēm, bet kā saka dāvinātam zirgam... Bet, lai izmantotu ESPlorer un rakstītu LLU, vispirms ir jāmaina ESP8266 mikroshēmas (piegādāja ražotājs) pamata programmaparatūra uz jaunu. NODE MCU PyFlasher programma mums palīdzēs šajā darbā. Es domāju, tas palīdzēs to atjaunot. Un mēs paši izveidosim programmaparatūru un iegūsim to veidotāju vietnē: NodeMCU. Un jūs varat lasīt vairāk par šo procesu.

Viss ir ļoti pieejams un saprotams. Pamatbibliotēkām pievienojam SPI un bitu operāciju atbalstu (LUA mūsu gadījumā bitu operācijas ir pārslogotas un maz noderīgas). Programmaparatūrā nevajadzētu ievietot daudz bibliotēku, jo ESP8266 dažādās programmatūras klātbūtnes dēļ ir atlicis ļoti maz atmiņas, daži niecīgi 20 kB.

Protams, jūs varat vienkārši paņemt gatavu programmaparatūru, no kuras daudzas jau ir pieejamas internetā, taču es to neiesaku. Kaut vai tāpēc, ka daži neatbalsta bitu darbības (un mums tās ir vajadzīgas) un nekontrolē datu pārraides ātrumu, izmantojot SPI.
Attiecīgi tie pēc noklusējuma tiek pārraidīti ar ātrumu 40 MHz, dalītu ar nelielu koeficientu, un tāpēc AVR nav laika tos sagremot.

Ja esat pārāk slinks, lai izveidotu programmaparatūru, varat lejupielādēt manējo no mākoņa.

Tagad mums ir programmaparatūra, un tā ir jāielādē ESP8266, nevis pamata. Šim nolūkam mums ir nepieciešams vienkāršs USB - UART adapteris.


Savienojam kājas TXD ar RXD un RXD ar TXD, izveidojam kopīgu zemējumu, bet neizmantojam, kā likās, adaptera ērto 3,3 V jaudas izvadi. Vairumā gadījumu ESP8266 to pilnībā iztukšo. Tāpēc mēs to barojam atsevišķi. Pēc tam pārslēdzam ESP uz programmēšanas režīmu (GP0 uz zemējumu, ja kāds ir aizmirsis) un palaižam NODE MCU PyFlasher.

Galvenais ir neaizmirst dzēst zibatmiņu (jā, izdzēš visus datus), pretējā gadījumā atkarībā no programmaparatūras versijas pēc programmēšanas atmiņā var palikt nevajadzīgi atkritumi, kas savukārt turpmākajā laikā iebērs atkritumus konsolē. strādāt. Pirms tam es izmantoju programmatūru, kurai nebija iespējas vispirms izdzēst atmiņu, un es šausmīgi cietu, jo nekas nedarbojās. Un kaste tikko atvērās, tikai patiesība bija NODE MCU veidotāju forumā angļu valodā.

Iegādājoties nepieciešamo programmaparatūru, tagad varam rakstīt un atkļūdot programmas LUA valodā (ir arī MicroPython, bet es to neizmantoju), izmantojot ļoti ērtās NODE MCU API. Mēs palaižam iepriekš minēto ESPlorer.

Mēs arī konfigurējam to darbam ar ESP8266 un iestatām seriālā savienojuma parametrus. Viss ir diezgan vienkārši un daudzkārt aprakstīts internetā.

Tagad mēs rakstām programmu LUA, kuru pēc tam ielādēsim ESP8266:

Lua bootloader AVR, kas rakstīts uz ESP8266

funkcija InstrProgrammingEnable () - instrukcija MC "iespējot programmēšanu" p=0, savukārt p<31 do p=p+1 pin=8 gpio.write(pin, gpio.LOW) spi.send(1, 0xAC,0x53) read = spi.recv(1, 8) spi.send(1,0,0) gpio.write(pin, gpio.HIGH) if (string.byte(read)== 83) then print("connection established") p=33 if(p==31) then print("no connection") end end end end funkcija ProgrammingDisable() pin=2---ESET BEIGAS MK gpio.mode(pin, gpio.INPUT) pin=8 gpio.mode(pin, gpio.INPUT) pin=5--CLK MASTER priekš SPI gpio.mode(pin, gpio. INPUT) pin=6--MISO MASTER priekš SPI gpio.mode(pin, gpio.INPUT) pin=7--MOSI MASTER priekš SPI gpio.mode(pin, gpio.INPUT) end funkcija ProgrammingEnable() pin=2-- ATIESTATĪT MK gpio.mode(pin, gpio.OUTPUT) gpio.write(pin, gpio.LOW) pin=2--POZITIV 4 MSEK ATIESTATĪŠANAI MK gpio.mode(pin, gpio.OUTPUT) gpio .write(pin, gpio.HIGH) tmr.delay(4) gpio.mode(pin, gpio.OUTPUT) gpio.write(pin, gpio.LOW) tmr.delay(25000) end funkcija InstrFlashErase() pin=8 gpio.write(pin, gpio.LOW) spi.send(1,0xAC,0x80,0,0) gpio.write(pin, gpio.HIGH) tmr.delay(15000) pin=2 - RESET FOR MK gpio.mode(pin, gpio.OUTPUT) gpio.write(pin, gpio.HIGH) tmr.delay(20000) gpio.write(pin, gpio.LOW) print("FLASH ir izdzēsts") InstrProgrammingEnable () beigas funkcija InstrStorePAGE(H, adrese, dati) pin=8 gpio.write(pin, gpio.LOW) spi.send(1,H,0,address,data) gpio.write(pin, gpio.HIGH) tmr.delay(500) end funkcija InstrWriteFLASH(lapas_adrese_zema,lapas_adrese_augsta) pin=8 gpio.write(pin, gpio.LOW) spi.send(1.0x4C,page_address_high,page_address_low,0) gpio.write(pin, gpio.HIGH) tmr.delay(5000) - dažreiz zibspuldze netiek reģistrēta, kad zema latentuma beigas funkciju programmēšana (lietderīgā slodze) pin=8--CS MASTER priekš SPI gpio.mode(pin, gpio.OUTPUT, gpio.PULLUP) pin=4--LED LIGHT ON LOW gpio.mode(pin, gpio.OUTPUT) gpio.write(pin, gpio. LOW) print(string.len(payload)) lappušu_skaits = 7 — rakstiet 1 kilobaitu, ja k =0 ,lappušu_skaits ,1 do — lapu skaits, ja i=0 , 127, 2 do -- -1 adrese = i/ 2 data=payload:byte(i+1+128*k) ja dati == nulle, tad dati = 0xff beigas InstrStorePAGE(0x40,adrese,dati) -- tmr.delay(100)-- citādi nav laikā rakstiet datus = slodze:baits(i+1+1+128*k) ja dati == nulle, tad dati = 0xff beigas InstrStorePAGE(0x48,adrese,dati) -- tmr.delay(100) beigu lapas_adrese_zema=bit.band(k ,3) )*64 — 3 ir binārs 11 page_address_high=k/4+frame1024*2 tmr.delay(1000) InstrWriteFLASH(page_address_low,page_address_high) tmr.wdclr() end pin=4--LED gpio.mode(pin,gpio.mode. OUTPUT) gpio.write(pin, gpio.HIGH) end -- GALVENAIS BLOKS wifi.setmode(wifi.STATION) --wifi.sta.config("tīkla nosaukums", "parole") — iestatiet piekļuves punkta SSID un paroli station_cfg=() tmr.delay(30000) station_cfg.ssid=" tīkla nosaukums" tmr.delay(30000) station_cfg.pwd="parole" tmr.delay(30000) wifi.sta.config(station_cfg) tmr.delay(30000) wifi.sta.connect() tmr.delay(1000000) print (wifi.sta.status()) drukāt(wifi.sta.getip()), kamēr (wifi.sta.status()~=1) do if(wifi.sta.status()==5), tad pārtrauc beigu beigas sv=net.createServer(net.TCP,30) tmr.delay(100) print("SERVERIS GATAVS") sv:klausīt(4000,function(c) c:on("saņemt", funkcija(c, slodze) drukāt (payload) if (payload =="programma\r\n") then c:send("gatavs\r\n") print("gatavs programmai\r\n") spi.setup(1, spi.MASTER , spi.CPOL_LOW, spi.CPHA_LOW, spi.DATABITS_8,320,spi.FULLDUPLEX) ProgrammēšanaIespējot () tmr.delay(100) InstrProgrammingEnable () tmr.delay(100) InstrFlashErase() tmr.delay -pārsūtīto kadru skaits st=net.createServer(net.TCP,30) st:klausen(4001,function(c) c:on("saņemt", funkcija(c, lietderīgā slodze) tmr.wdclr() Programmēšana (payload ) frame1024=frame1024+1 end) end) end if (payload =="data\r\n") then c:send("ready\r\n") print("gatavs datiem\r\n") srv = net.createServer(net.UDP) tmr.delay(1000) pin=10 gpio.write(pin, gpio.HIGH) uart.setup(0,9600,8,0,1,0) srv:listen(5000) srv :on("saņemt", funkcija(srv, pl) pl=pl*1 --print(pl) uart.write(0,pl) tmr.wdclr() end) end if (payload =="stop\r" \ n") then if(st~=nil) then st:close() frame1024=0 ProgrammēšanaDisable () print("apturēt programmu") end if(srv~=nil) then srv:close() print("apturēt datus " ) beigas beigas beigas) beigas) beigas)


Ja atbilstošās funkcijas veic šādas darbības:

funkcija InstrProgrammingEnable()– ieslēdz mikrokontrolleri programmēšanas režīmā ar īpašu komandu, kas tiek nosūtīta caur SPI.

funkcija ProgrammingEnable()– vienkārši atiestatiet AVR uz 25 ms pirms programmēšanas

funkcija ProgrammingDisable()– pēc programmēšanas pabeigšanas ESP8266 SPI tapas pārceļam neaktīvā stāvoklī, lai tās netraucētu mums, izpildot kodu mikrokontrollerī (ja tur tiek izmantotas)

funkcija InstrFlashErase()– pirms programmēšanas izdzēsiet mikrokontrollera zibatmiņu. Nav nepieciešams paskaidrot, kāpēc tas ir nepieciešams.

funkcija InstrStorePAGE(H, adrese, dati)– šī komanda ieraksta programmas baitu mikrokontrollera iekšējā buferī. Bet tas nav pats zibatmiņas ieraksts, jo zibatmiņas šeit tiek rakstīts lappusi pa lappusei, katrs 128 baiti.

funkcija InstrWriteFLASH(lapas_adrese_zema,lapas_adrese_augsta)– bet tas ir zibspuldzes ieraksts un tas prasa laiku, pievērsiet uzmanību laika aizkavei 5000 μs.

funkciju programmēšana (lietderīgā slodze)– lielākā un svarīgākā funkcija, kas izmanto iepriekš minētās funkcijas. Tas paņem pārraidīto programmu 1024 baitos, sadala tos baitos un ģenerē tiem adreses, un pēc tam nosūta tos mikrokontrollerim iekšējā buferī un pēc katriem 128 baitiem inicializē zibatmiņas ierakstīšanu. Tad tas paņem nākamo kilobaitu koda un atkārto darbību, protams, ar nobīdi adresēs, lai to varētu rakstīt tālāk un nepārrakstīt. Sākumā mēģināju pārsūtīt veselas programmas, bet, kad ESP8266 pārsniedz 6 kilobaitus, pieejamā atmiņa vienkārši beidzas un tā avarē. Viens kilobaits izrādījās visērtākais mērvienība, jo tas ir glīti sadalīts daļās un ērti pārraidīts caur TCP (mums tas vēl jāsaņem no datora). Lielāks izmērs arī nav vajadzīgs, TCP, kā zināms, pašreizējā versijā ierobežo pārraidīto paketi līdz aptuveni 1500 baitiem (bet nez kāpēc man tika pārsūtīts 1440).

Šķita, ka nekas sarežģīts, taču bija jāpārvar vairākas ķibeles.

Reģistrējieties bezvadu tīklā.

Vispirms izveidojam TCP serveri, kas klausās trīs komandas:

1. “programmēt” (mēs programmēsim),

2. “dati” (mēs apmainīsimies ar datiem),

3. “stop” (visu pārtraucam).

Ja mēs programmējam, mēs vispirms inicializējam SPI un izveidojam citu TCP serveri, kas satver datus (programmas kods ir programmaparatūra) par kilobaitu un izsauc mikrokontrollera programmēšanas funkcijas. Es saprotu, ka izskatās muļķīgi izveidot otru serveri, taču tā ir nepieciešamība, jo vietējā API atbalsta tikai vienas ligzdas izveidi, un mums ir jāatdala komandas “programma” un “data” ar faktiski pārsūtītajiem datiem, jo tie nav atšķirami ar aci, ir baiti un šeit ir baiti.

Ja mēs nevēlamies programmēt, bet apmainīties ar datiem, nosūtot tos mūsu gadījumā uz mikrokontrolleru, tad vispirms nosūtām “datu” virkni caur TCP. Reaģējot uz to, tiks izveidots UDP serveris (atgādināšu, ka mēs kontrolējam dinamiski ar mehānisko roku un mums nav nepieciešama aizkavēšanās TCP pakešu veidošanā, un vispār ir slikti sūtīt vienu baitu vesels TCP kadrs). Un mūsu UDP datagrammas būs mazas un ātri ģenerētas.

Pēc tam UART tiek inicializēts, un katrs bezvadu režīmā saņemtais baits pa TXD vadu tiek nosūtīts uz mikrokontrolleru, kuram, ja tur tiek uzzibsnīta attiecīgā programma, tas ir jāpieņem. Datu apmaiņu organizēt citā virzienā arī nav grūti, bet pagaidām to neesmu ieviesis.

Nu, pēc komandas “stop” iepriekš minētie serveri (izņemot pašu pirmo) aizver savienojumus un galvenais serveris atkal nonāk “programmas” un “datu” komandu gaidīšanas stāvoklī.

Tā kā SPI interfeiss ir emulēts ESP8266 programmatūrā, CS, CLK, MISO, MOSI, RESET (AVR) signāliem varat izmantot visus pieejamos I/O portus, nevis tos, kas norādīti manā sāknēšanas ielādētājā. Turklāt izrādījās, ka CS un MISO principā šajā gadījumā var arī nogriezt, tas darbosies bez tiem. Nu ESP8266 platē iebūvētajai LED tiek izmantota viena tapa, lai tas dažreiz mirgo un parāda, ka programma joprojām ir dzīva.

Nav ierakstīšanas kļūdu pārbaudes (izņemot pirmo pieprasījumu AVR, bet šī informācija vienkārši tiek parādīta konsolē), EEPROM nav ieprogrammēts, nav rakstīts vairāk par 32 KB - īsi sakot, joprojām ir pie kā strādāt. SPI apmaiņas ātrums ir aptuveni 115 Kbit, dažu sekunžu laikā viss tiek nozibināts, apmēram kā parastam seriālajam programmētājam, piemēram, ISP500).

Paņemiet kodu, ievadiet savus tīklus un paroles, kompilējiet to ESplorer, nosauciet to par "init" (lai tas sāktu restartējot) un nosūtiet to uz ESP8266. Vajadzētu strādāt. Tādā nozīmē, ka strādāju par bezvadu programmētāju, vismaz.

Tagad mēs nodarbosimies ar vadības pusi - personālo datoru.

Būtībā mums ir jāņem HEX formāta fails, kurā tiek pārveidotas jūsu ATMEL STUDIO vidē rakstītās programmas, un jānosūta tas caur WI-FI uz mums zināmu ligzdas portu (šajā gadījumā 4000). Nelielā problēma ir tāda, ka pārsūtīšanai mums ir nepieciešams binārs BIN fails, un ATMEL STUDIO mums nodrošina tikai HEX. Šeit ir divas izejas; vai konvertējiet to BIN formātā ar īpašu pārveidotāju programmu, piemēram, WinHex, vai dariet to pats savā programmā. Es to vēl neesmu izdarījis, bet tas nešķiet grūti, jums ir jānogriež virsraksts un jādara kaut kas cits.

Rezultātā ielādēju programmu uzrakstīju JAVA valodā (galvenokārt tāpēc, ka neko citu nezinu), strādājot vienkārši brīnišķīgā un bezmaksas IntelliJ IDEA vidē. Tas izveido TCP klientu, kas meklē serveri, kas darbojas ar ESP8266. Ja viņš to atrod, viņš sazinās ar viņu un nosūta viņam failu, kas atrodas tādā un tādā adresē. Kods ir zemāk.

JAVA failu lejupielādētājs, kas darbojas datora pusē

importēt java.io.*; importēt java.net.*; importēt java.util.ArrayList; importēt java.util.List; publiskā klase Net ( public static void main(String args) (jauns Http_client(4000);)) class Http_client paplašina pavedienu ( int port; String s; String Greetings_from_S; Http_client(int port)( this.port = port; start (); ) public void run () ( //192.168.1.113 ir ESP8266 adrese mans tīkls . Bet kopumā jūs mācāties no saziņas ar maršrutētāju // labāk to padarīt statisku, maršrutētāji to var mēģināt (Socket socket = new Socket("192.168.1.113", port)) ( PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream( )),true); pw.println("programma");// Sveicieni ar SERVER System.out.println("programma"); ​​BufferedReader br = jauns BufferedReader(jauns InputStreamReader (socket.getInputStream())); Greetings_from_S = br.readLine(); System.out.println(Greetings_from_S); if(Greetings_from_S.equals("gatavs")) ( mēģiniet ( Faila fails = new File("d:BlinkOUT) .bin"); // augšupielādētā faila adrese BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file)); baita dati = jauns baits; bis.read(data); baits datu_buferis = jauns baits; int frames = data.length /1024; System.out.println(frames); int rezidy = data.length%1024; for (int i = 0; i< frames;i++) { for (int k = 0; k< (1024); k++) { data_buffer[k] = data; } sendingChunk(data_buffer); } byte data_buffer2= new byte; for (int i = 0; i < residy;i++) { data_buffer2[i] = data; } sendingChunk(data_buffer2); pw.println("stop");// System.out.println("stop program"); } catch (Exception e) { System.out.println(e); } } } catch (Exception e) { System.out.println(e); } } public void sendingChunk (byte data_buffer){ try (Socket socket = new Socket("192.168.1.113", 4001)){ BufferedOutputStream bos = new BufferedOutputStream((socket.getOutputStream())); bos.write(data_buffer); bos.flush(); System.out.println(data_buffer.length); } catch (Exception e) { System.out.println(e); } } }


Šeit, protams, ir daudz nevajadzīgu lietu, visādas gatavas lietas būtībā ir nevajadzīgas. Ja TCP savienojums ir izveidots, tas tiek izveidots. Vienīgā problēma bija tā, ka failu negribēja sūtīt pat 1024 baitu gabaliņos, kā man ļoti vajadzēja, lai gan skaidri norādīju izmēru. Acīmredzot ir kaut kāds gala buferis, kas no JAVA nav pieejams, un tas sūta sev vēlamā izmēra paketes, kas ir pilnīgi nepieņemami saņēmējai pusei. Sākumā mēģināju uztaisīt aizkavēšanos, lai buferim apnīk gaidīt nākamos gabalus un nosūtītu kā ir. Bet aizkave sāka darboties, kad tā sasniedza 10 sekundes, kas kaut kā šķita par daudz vienam pārsūtītajam kilobaitam.

Bet tad pamanīju, ka pirmais gabals nez kāpēc vienmēr sanāk tieši tāds kā pasūtīts, un jau no otrā sākas neparedzama bakhanālija. Tāpēc es liku klientam atvērt savienojumu, nosūtīt 1024 baitu koda fragmentu un aizvērt savienojumu. Un tā tālāk, līdz tiek nosūtīts viss fails. Viss darbojās veiksmīgi.

Vienīgais, lai to palaistu, datorā jāinstalē JAVA izpildlaika vide. Bet es parasti palaistu tieši no IntelliJ IDEA, jo tur vienmēr konsolē var redzēt, kas notiek (bet šeit ir vajadzīga arī JAVA vide). Lai gan, protams, GUI ir jādara gudrāk. Tas ir, logs, kurā parādās ceļš uz failu, iespēja logā mainīt portu numurus un, labi, citas nepieciešamās lietas. Un apkopojiet to visu izpildāmā faila formā.

Un tad, kā mēdza teikt Korovjevs, atgriezīsimies, pilsoņi, pie MechArm mehāniskās daļas, kas tika pieminēta pašā sākumā. Tagad mums ir iespēja to programmēt attālināti un pēc tam kontrolēt. Pārejam pie vadības programmas mikrokontrollera pusē.

Šajā gadījumā mums jāvada četri servo. Šie ir tie.


Šādu piedziņu kontrolē taisnstūrveida impulsi ar 20 ms (50 Hz) periodu ar darba ciklu no 2 līdz 4 procentiem. Tas ir, 2% ir pilnīgs pagrieziens vienā virzienā, 4% otrā. Uzdevums ir paredzēts tikai AVR iebūvētajam PWM.

Viens servo tiek izmantots kustībai pa kreisi un pa labi; otrais uz sevi - no sevis; trešais ir uz augšu un uz leju; ceturtais ir pati spīle, kurai vajadzētu saspiesties un atvilkties. Viss ir rakstīts C valodā un kompilēts HEX failā ATMEL STUDIO. Programmas nedaudz dīvainais izskats ir saistīts ar to, ka sākotnēji roka tika vadīta no tastatūras, kas savienota ar vadiem ar mikrokontrolleru. Bet vadi ir pagātne; mums ir jāattīstās tālāk.

Var, protams, izmantot skices servo no “ARDUINO”, bet man tās nepatika. Interesantāk ir pašam rakstīt. Turklāt visiem četriem servomehānismiem ir jādarbojas vienlaicīgi, nevis multipleksā režīmā, kur PWM tiek pārslēgts uz katru servo pēc kārtas. Jo neviens nav atcēlis gravitāciju, un uz augšu pacelta ekstremitāte uzreiz nokritīs, ja atbilstošā servopiedziņa pārstāj saņemt vadības impulsus. Es neesmu pārliecināts, ka "ARDUINO" skice nodrošina vienlaicīgu darbību četriem servo. Bet mēs paši varam viegli uzrakstīt programmu, kas atbilst nepieciešamajām prasībām. Un vispār, ja nav operētājsistēmas, kas atdala jērus no kazām, skiču izmantošana, kas konkurē par mikrokontrolleru perifērijas ierīcēm (un mēs pat nezinām, kuras no tām) rada pārāk daudz kļūdu.

Šeit ir pats kods, ko mēs ierakstām Arduino Nano, izmantojot ESP8266-07.

MechArm vadības programma AVRmega328P mikrokontrolleram

#define F_CPU 16000000 #include #iekļauts // standarta veseli skaitļi #include #iekļauts // matemātika #iekļaut //standarta I/O #include #iekļauts #iekļauts //standarta iespējas #define UART_BAUD_RATE 115200 // T1 skaitītājs iestata laika intervālu uz 20ms #define COUNTER1_OFF TCCR1B=0b00000000 // CS02 CS01 CS00 - 000 - atspējots; 001 bez dalītāja; 010 ar dalītāju 8; 011 -64; 100 -256; 101 -1024 #define COUNTER1_ON TCCR1B=0b00000011 // skaitītājs T0 iestata vadības impulsa platumu servo PB0 un PB1 #define COUNTER0_OFF TCCR0B=0b00000000 // CS02 CS01 CS0 -0 - atspējots; 001 bez dalītāja; 010 ar dalītāju 8; 011 -64; 100 -256; 101 -1024 #define SKATĪTĀJS 001 bez dalītāja; 010 ar dalītāju 8; 011 -64; 100 -256; 101 -1024 #define COUNTER2_ON TCCR2B=0b00000110 nepastāvīgs uint16_t periods_20ms; nepastāvīgs uint8_t tastatūras_stāvoklis; nepastāvīgs uint8_t sākuma_pozīcija ; gaistošs int8_t numurs_servo; ISR(USART_RX_vect) // pārtraukums UART (State_of_keyboard=UDR0; return; ) ISR(TIMER0_COMPA_vect) // servo РВ0 vadības impulsa platums ( PORTB &=~(1<<0); TIMSK0&=~(1<
Programmas būtība ir skaidra no teksta un komentāriem. Mēs izmantojam skaitītāju T1 izlases periodam 20 ms un skaitītājus T0, T2, lai izdotu PWM signālus četrām I/O porta līnijām, jo ​​katrs no šiem diviem skaitītājiem var darboties divās ierīcēs.
Programma nosaka servo sākotnējās pozīcijas, ielādējot skaitīšanas reģistrus OCR0A, OCR0B, OCR2A, OCR2B. Ir ieviestas arī ierobežojošās konstantes, jo mums ne vienmēr ir nepieciešams 180 grādu diapazons. Nu, tad, pārtraucot UART, programma uztver ESP8266 nosūtīto numuru (no 1 līdz 8) un pārvērš to par komandu attiecīgajam servo diskdzinim. Ir četri diskdziņi, katrs darbojas divos virzienos, tāpēc pilnīgi pietiek ar veseliem skaitļiem no viena līdz astoņiem. Kad skaitlis ir atlasīts, iepriekš minēto skaitītāju reģistru saturs tiek vai nu palielināts, vai samazināts, attiecīgi mainot vadības impulsa darba ciklu un izvēlētā servo griešanās leņķi. Tie diskdziņi, kurus mēs neizvēlējāmies, saglabā veco griešanās leņķa vērtību (jo atbilstošo reģistru saturs, kaut arī tika atjaunināts, nemainījās) un turpina turēt mehānisko sviru tajā pašā pozīcijā.

Tagad atliek tikai uzrakstīt vadības programmu, piedodiet tautoloģiju, vadīt mehānisko roku tieši no datora caur WI-FI.
Kods ir arī rakstīts JAVA, bet nedaudz uzlabots. Ir GUI un iespēja rediģēt portu numurus un ESP8266 tīkla adresi.

Kas tur notiek, ir skaidrs pa logu. Es šeit nesniedzu programmas tekstu (tas ir pieejams vietnē

Apgūstot un veidojot arvien sarežģītākus projektus, pienāk brīdis, kad rodas nepieciešamība un vēlme iemācīties strādāt ar tik izplatītu komunikācijas veidu kā WiFi. Tā kā šāda veida saziņa var ļaut ērti izveidot vienotu tīklu savām viedajām mājas ierīcēm un vadīt tās, piemēram, no mobilā tālruņa, planšetdatora vai datora, tas ir, citiem vārdiem sakot, izveidot īstu viedo māju, kas maksās jūs desmitiem reižu mazāk nekā pērkat gatavus risinājumus veikalā. WiFi izmantošana, protams, neaprobežojas ar to un šāda veida saziņas izmantošanas piemēru ir tik daudz, ka nav jēgas tos uzskaitīt, un, ja esat nokļuvis šajā lapā, tas nozīmē, ka jums jau ir nepieciešams kaut kādu iemeslu dēļ izmantojiet WiFi, jums vienkārši jāizdomā, kā ar to pareizi strādāt.

Mēs to izdomāsim, pamatojoties uz lētāko un populārāko WiFi moduli ESP8266-01. Jūs varat iegādāties ESP8266-01 WiFi moduli mūsu vietnē.

Viena no galvenajām šāda moduļa priekšrocībām ir atmiņas un sava mikrokontrollera klātbūtne uz plates, kas ļauj tam strādāt neatkarīgi, ielādējot skici tieši pašā modulī.

Patiesībā ESP8266 WiFi moduļa modifikāciju ir diezgan daudz, un mēs tās šeit neuzskaitīsim; kad iemācīsities strādāt ar vienu, varēsit viegli sākt strādāt ar citiem. Uzreiz gribu atzīmēt, ka darbs ar WiFi var šķist diezgan sarežģīts uzdevums, un, ja bagāžā ir maz pabeigtu projektu, labāk pagaidām atteikties no WiFi komunikācijas un savos projektos izmantot radiosakarus, ar kuriem strādājot. ir daudz vieglāk saprast. Darbam ar WiFi moduļiem tiek veidotas veselas kopienas un tematiski forumi, kas vēlreiz pierāda, cik grūti vairumam cilvēku ir uzreiz saprast šāda veida komunikāciju, un, pārlasot visu informāciju, lielākā daļa vienkārši padodas. Visticamāk, es nevarēšu vien šī raksta ietvaros iekļaut visu svarīgo informāciju, un nav jēgas to darīt, pretējā gadījumā būs vēl viens bardaks. Es centīšos iet pa stingru svarīgāko punktu secības ceļu, lai jūs varētu sākt izprast šāda veida komunikācijas darbības principu un pēc tam vienkārši attīstīt savas prasmes šajā virzienā.

Tātad, sāksim un vispirms apskatīsim WiFi moduļa tapas ESP8266-01.

VCC- moduļa barošana no 3V līdz 3,6V

GND- Zeme.

RST- Atiestatīt izvadi, kas ir atbildīga par moduļa pārstartēšanu.

CH_PD- "mikroshēmas izslēgšana", kad tam tiek piegādāta strāva, tiek aktivizēta moduļa darbība.

TX- datu pārsūtīšana (UART interfeiss)

RX- datu saņemšana (UART interfeiss)

GPIO0

GPIO2- vispārējas nozīmes I/O ports

GPIO0 un GPIO2 tapas ir tieši tās pašas digitālās tapas, ar kurām mēs strādājam uz Arduino platēm, lai savienotu tos ar dažādiem sensoriem, un tās tiek izmantotas, ja tiek īstenota neatkarīga darbība ESP8266-01 moduļa iekšējā WiFi mikrokontrollerī.

Lai droši barotu ESP8266-01 moduli, izmantojiet ārēju stabilizētu 3,3 V barošanas avotu un labāk nemēģināt atņemt strāvu no Arduino plates, jo modulis patērē strāvu līdz 215mA un tas var slikti beigties jūsu atkļūdošanas panelī. Es ceru, ka jums nav problēmu, kur iegūt stabilizētu 3,3 V barošanas avotu, pretējā gadījumā jums ir par agru nodarboties ar šo moduli. Piemēram, man patīk izmantot šo 3,3 V un 5,0 V YWRobot barošanas moduli, lai ātri saliktu shēmas uz maizes dēļiem, kas ļauj ātri iegūt stabilizētu spriegumu 3,3 V vai 5 V uz maizes dēļa atbilstošajiem barošanas ceļiem.

Plusa savienošana (+) no mūsu 3,3 V barošanas avota uz tapu VCC modulis ESP8266-01, un mīnus (-) pieslēdziet strāvas padevi izejai GND. Šajā stāvoklī moduļa sarkanā gaismas diode iedegsies, norādot, ka barošana ir pievienota pareizi. Lai modulis tiktu aktivizēts, ir nepieciešams pievienot arī plus (+) barošanas avots ar izeju CH_PD modulis ESP8266-01, un ieteicams to darīt tieši caur 10 kOhm rezistoru. Tagad, kad mēs ieslēdzam strāvu, moduļa sarkanajai gaismas diodei vajadzētu iedegties un zilajai gaismas diodei pāris reizes ātri mirgot. Ja tas notiek ar jums, tad viss ir kārtībā, esat visu pareizi savienojis un modulis darbojas. Pretējā gadījumā vēlreiz pārbaudiet savienojumu vai nomainiet moduli, jo tas, visticamāk, nedarbojas.

Uz priekšu. Lai strādātu ar ESP8266 WiFi moduli, mums ir nepieciešams USB-UART adapteris. Ir dažādi adapteri, piemēram: FT232RL, CP2102, PL2303. Bet mēs pieņemsim, ka jums nav šādu adapteru, un mēs izmantosim Arduino plati kā USB-UART adapteri. Šim nolūkam es izmantošu Arduino NANO plati, bet jūs varat izmantot jebkuru citu jūsu rīcībā esošo. Savienojums uz jebkuras plates ir identisks. Mēs veicam savienojumu saskaņā ar sekojošo shēmu.

Apskatīsim, ko mēs šeit esam paveikuši. Lūdzu, nekavējoties ņemiet vērā, ka mēs esam savienojuši Arduino dēļa tapas ar džemperi RST Un GND. Šī manipulācija atspējo mikrokontrolleri un ļauj mums izveidot īstu USB-UART adapteri no mūsu Arduino plates.

Tā kā ESP8266-01 WiFi moduli barojam no atsevišķa ārējā barošanas avota, atcerieties, ka mūsu projektos mums vienmēr ir jāpievieno visu barošanas avotu zemējums. Tāpēc mēs savienojam izeju GND Arduino dēļi ar zemējumu (-) mūsu ārējais 3,3 V barošanas avots, kas paredzēts ESP8266-01 moduļa darbināšanai.

Secinājums TX savienojiet savu Arduino plati ar tapu TX ESP8266-01 modulis. Šī līnija pārsūtīs datus no WiFi moduļa uz Arduino plati. Ikviens, kurš pārzina UART saskarni, var brīnīties: "Bet kā tas var būt? Visur viņi mācīja, ka TX ir jāpievienojas RX. TX pārraida informāciju, bet RX saņem." Un tev būs taisnība. Tieši tā, TX vienmēr ir savienots ar RX, bet gadījumā, ja mēs izgatavojam UART adapteri no Arduino, ir nepieciešams tieši savienot ierīces. Uzskatiet, ka šis ir noteikuma izņēmums.

Līnija RX Mēs arī savienojam jūsu Arduino plati tieši ar līniju RX ESP8266-01 modulis. Šī līnija pārsūtīs informāciju no Arduino plates uz WiFi moduļa plati. Bet mēs izveidojam šo savienojumu, izmantojot tā saukto sprieguma dalītāju, kas sastāv no diviem rezistoriem ar nominālvērtībām 1 kOhm un 2 kOhm. Mums ir jāsamazina spriegums šajā līnijā, izmantojot divus rezistorus (sprieguma dalītāju), jo Arduino plate pārraida loģisku signālu ar spriegumu 5 V, un WiFi modulis darbojas ar spriegumu 3,3 V. Lai pārveidotu loģisko signālu, mēs varētu izmantot īpašu loģiskā līmeņa pārveidotāja plati, kas, protams, būtu pareizāk, bet atkal pieņemsim, ka jums tādas nav, un mums bija jāizvēlas vienkāršāks ceļš un tas jādara, izmantojot sprieguma dalītājs.

Tagad esam savienojuši visu nepieciešamo turpmākajam darbam, bet mums joprojām ir vēl 3 neizmantoti tapas ( GPIO0, GPIO2 Un RST) ieslēgts WiFi modulis ESP8266-01. Lai WiFi moduļa darbība būtu stabila, šīs atlikušās neizmantotās tapas ir jāvelk pozitīvā stāvoklī (+) moduļu elektropārvades līnijas caur 10 kOhm rezistoriem.

Tas pasargās mūs no dažādiem traucējumiem (traucējumiem) un padarīs moduļa darbību stabilu. Labāk to darīt uzreiz. Pretējā gadījumā nebrīnieties, ka jūsu modulis ir pastāvīgi pārslogots, rada nesaprotamu informāciju vai vispār nevēlas darboties. Pievilkšanās rezistoru izmantošana uz neizmantotām mikrokontrollera tapām ir īkšķa noteikums, ja vēlaties savos projektos stabilu darbību.

Un atkal mēs pārbaudām ESP8266-01 WiFi moduļa funkcionalitāti. Ieslēdziet strāvu un pārbaudiet, vai iedegas sarkanā gaismas diode un zilā gaismas diode pāris reizes mirgo. Ja viss notiek šādi, tad lieliski, ejam tālāk. Pretējā gadījumā mēs pārbaudām savienojumu pareizību, kā arī visu kontaktu kvalitāti. Tā var būt tikai triviāla situācija, kad desmit reizes vēlreiz visu pārbaudījāt un pārliecinājāties, ka viss ir pareizi pievienots, bet, ieslēdzot moduli, redzat, ka zilā gaismas diode nedarbojas adekvāti, pastāvīgi deg, nepārtraukti mirgo, vai vispār ne uz ko nereaģē. Tas var būt saistīts ar sliktu kontaktu kādā līnijā. Piemēram, saliekot ķēdi uz maizes dēļa, viens no rezistoriem cieši nenostājas savā vietā un tas rada traucējumus. Pārbaudiet savienojumu kvalitāti. Modulis ir ļoti jutīgs. Nepalaidiet to novārtā. Tas ir izplatīts nestabilas darbības iemesls.

Kopumā ar savienojumu esam galā. Tagad mums ir jāsagatavo Arduino IDE programma darbam ar ESP8266-01 WiFi moduli. Lai to izdarītu, mums Arduino IDE ir jālejupielādē un jāinstalē nepieciešamais arhīvs ar bibliotēkām, piemēriem un ESP plāksnēm, kas vēlāk ļaus mums augšupielādēt skices tieši ESP8266-01 moduļa mikrokontrollerā, mainīt programmaparatūru utt. Šī raksta vajadzībām šie iestatījumi mums, visticamāk, nebūs vajadzīgi, taču man šķiet, ka pēc tam, kad būsim izdomājuši, kā savienot moduli, procedūra būs pareiza, ja nekavējoties lejupielādēsim visu, kas nepieciešams darbam ar Arduino IDE. . Principā šeit viss ir vienkāršs.

Palaidiet programmu Arduino IDE un dodieties uz izvēlni "Fails" - "Iestatījumi"

Parādītajā logā augšējā laukā mēs ierakstām “esp8266”. Rezultātā mums logā būs tikai vajadzīgā programmaparatūra. Noklikšķinot uz programmaparatūras, tiks parādīta poga "Instalēšana". Noklikšķiniet uz pogas "Instalēšana" un gaidiet, līdz viss ir instalēts. Arhīvs ir diezgan liels, apmēram 150 megabaiti, tāpēc jums būs jāgaida.

Pēc instalēšanas pabeigšanas. Mēs pārstartējam Arduino IDE un redzam, kā izvēlnē “Rīki” - “Dēļi” ir parādījušās jaunas ESP plates. Tas ir viss. Esam pabeiguši Arduino IDE iestatīšanu. Pagaidām šie iestatījumi mums nav vajadzīgi, taču turpmākajā darbā mēs bez tiem nevarēsim iztikt.

Mums viss ir savienots un sagatavots, tagad mēs varam sākt saprast vadības ierīces. Patiesībā tagad mēs turpināsim pārbaudīt un konfigurēt moduli, izmantojot AT komandas, un bez tā nevar iztikt. WiFi moduļi ir ieviesti tā, ka visa saziņa ar tiem notiek, izmantojot tā sauktās AT komandas, kas ir aparatūras moduļa programmaparatūrā. Visas AT komandas šeit neuzskaitīsim, to ir diezgan daudz un, ja vēlies visu rūpīgi izpētīt, tās var viegli atrast internetā. Un tagad mēs izmantosim tikai visnepieciešamāko, lai sāktu.

Tātad, mēs savienojam savu Arduino plati, izmantojot USB kabeli, ar datoru. Un ārējs barošanas avots, kas nodrošina spēku WiFi modulis ESP8266-01 Vēl nav nepieciešams to ieslēgt. Mēs palaižam programmu Arduino IDE, izvēlnē “Rīki” atlasiet mūsu Arduino plati, manā gadījumā tas ir Arduino NANO, un jūs izvēlaties savu. Tāpat neaizmirstiet izvēlēties portu, kuram ir pievienots mūsu Arduino. Es ceru, ka jūs to visu saprotat un zināt, kā to izdarīt.

Atvērtā ostas uzraudzība "Rīki" - "Portu monitors". Porta ātruma izvēle 74880 (ar šo ātrumu modulis sāk darboties) un kreisajā pusē esošajā sarakstā atlasiet “NL & CR”.

Tagad mēs pievienojam ārēju barošanas avotu, kas darbina mūsu WiFi moduli. Pēc tam ostas monitorā vajadzētu redzēt aptuveni šādu informāciju.

Šeit mēs redzam informāciju par mūsu WiFi moduli (ātrums, atmiņas apjoms uz kuģa utt.). Saņemtā informācija var atšķirties atkarībā no WiFi moduļa programmaparatūras versijas. Nekoncentrēsimies uz šo. Svarīgs ir kaut kas cits. Zemāk mēs redzam bezjēdzīgu rakstzīmju kopu, tas nozīmē, ka mūsu iestatītais porta ātrums (74880 bodi) ir piemērots tikai moduļa sākotnējai ielādei, lai normāli redzētu šo informāciju, taču šis ātrums nav piemērots normālai saziņai ar WiFi modulis.

Lai izvēlētos pareizo porta ātrumu, mēs vienkārši mainīsim porta ātrumu un nosūtīsim simbolus uz portu (lauks augšpusē un poga nosūtīt) AT līdz saņemsim atbildi labi. Ja mēģināt nosūtīt rakstzīmes tieši tagad AT uz portu ar ātrumu 74880, atbildē saņemsiet vēl vienu vai divas bezjēdzīgas rakstzīmes.

Mēģiniet nekavējoties iestatīt ātrumu uz 115 200 bodu un nosūtīt AT komandu. Visbiežāk moduļi tiek mirgoti ar šo ātrumu.

Šis ir attēls, kas jums jāredz porta monitorā. Ja atbildē joprojām saņemat nesaprotamu rakstzīmju kopu, samaziniet ātrumu un sūtiet atkārtoti AT komandas, līdz atgriežas atbilde labi. Ja izmēģinājāt visus ātrumus un nesaņēmāt pareizo atbildi, tad jums nav paveicies, un modulis tiek mirgots ar programmaparatūru ar nestandarta ātrumu. Tad atliek tikai atjaunināt moduli ar parasto programmaparatūru, taču šī ir atsevišķa raksta tēma.

Ceru, ka viss ir kārtībā un esat izvēlējies pareizo ātrumu. Starp citu, ja mēģināt izslēgt un vēlreiz ieslēgt WiFi moduli pēc tam, kad esat izvēlējies pareizo ātrumu, tad tās pašas sākotnējās informācijas vietā, kas tika pareizi parādīta ar ātrumu 74880 bodi, jūs, gluži pretēji, redzēt jauktu rakstzīmju kopu, bet beigās jūs redzēsit vārdu “gatavs”. Bet mums ir iespēja skatīt šo sākotnējo informāciju normālā formā ar pareizo ātrumu; lai to izdarītu, mums ir programmatiski jāpārstartē modulis, izmantojot komandu AT AT+RST.

Lai uzzinātu sava ESP8266-01 WiFi moduļa programmaparatūras versiju, jums ir jānosūta komanda porta monitoram. AT+GMR un atbildot uz to, jūs saņemsiet aptuveni šādu informāciju:

ESP8266-01 WiFi modulis var darboties gan piekļuves punkta, gan klienta režīmā. Lai modulis darbotos visos režīmos vienlaikus, nosūtiet komandu porta monitoram AT+CWMODE=3 un atbildi jums vajadzētu saņemt labi.

Komanda AT+CWLAPļaus jums skatīt visus WiFi piekļuves punktus, ko pašlaik redz jūsu modulis. Piemēram, mans modulis savā pārklājuma zonā šobrīd redz tikai trīs WiFi piekļuves punktus. Atbildei vajadzētu būt apmēram šādai:

Piemēram, mēs zinām trešā piekļuves punkta paroli un, lai ar to izveidotu savienojumu, mēs izpildām komandu AT+CWJAP="vārds","parole", manā gadījumā šī komanda izskatās šādi AT+CWJAP="dsl_unlim_512_home","11111111", uz ko saņemam veiksmīgu atbildi:

Komandas parametri tiek ierakstīti ESP8266-01 WiFi moduļa zibatmiņā, un, ja mēs izslēdzam moduli un atkal to ieslēdzam, tas automātiski izveidos savienojumu ar šo piekļuves punktu. Skatieties, nejauši neļaujiet komandā atstarpi, pretējā gadījumā jūs saņemsit atbildi KĻŪDA. Lūdzu, ņemiet vērā, ka jaunākajās programmaparatūras versijās ir ieteicams izmantot komandu AT+CWJAP_CUR, tas ir, komanda izskatīsies AT+CWJAP_CUR="vārds","parole". Ja pēkšņi mēs aizmirsām, ar kuru piekļuves punktu ir savienots mūsu modulis, mums ir jānosūta komanda AT+CWJAP? vai AT+CWJAP_CUR? un kā atbildi saņemsim piekļuves punktu, kuram pašlaik ir pievienots WiFi modulis.

Ar savienojumu un sākotnējo iestatīšanu WiFi modulis ESP8266-01 mēs to izdomājām. Modulis darbojas un ir gatavs Jūsu turpmāko projektu īstenošanai. Vienkārši nav iespējams analizēt visus iespējamos piemērus darbam ar šo moduli viena raksta ietvaros, un mēs to aplūkosim turpmākajos rakstos. Un tiem, kas nav īpaši labi orientēti ar programmēšanu, bet ļoti vēlas ātri sākt pārvaldīt savus projektus, izmantojot WiFi, iesaku viņus iepazīstināt ar RemoteXY WiFi projektu izstrādātāju. Šī vietne palīdzēs ērti izveidot vadības interfeisu mobilajam tālrunim vai planšetdatoram un izmantot to, lai vadītu ierīci, kurai pievienojat WiFi moduli.

Jaunums vietnē

>

Populārākais