Programare directă a Wi-Fi esp8266, doar pentru distracție

Programare directă a Wi-Fi esp8266, doar pentru distracție

ESP8266 este răspunsul la întrebarea "Vreau ceva cu Wi-Fi". Cu toate acestea, există un număr de ingineri și amatori care nu au auzit despre acest cip sau au auzit, dar nu înțeleg cu adevărat ce este.

Cipul ESP8266 este un procesor cu built-in RAM, ROM și Wi-Fi, legătura externă constă din mai multe componente radio ieftine. Se dovedește mai ieftin decât 4 dolari! Sau $ 5, dacă doriți să aveți un cip pe placa de transport, care include toate componentele necesare. Consum de energie 200 mA, domeniu de comunicare de aproximativ 300 m fără echipament suplimentar și cu o antenă și toate cele 4 km.

Cunoaște-ți fierul

Procesorul este implicit la o frecvență de 80 MHz, care poate ajunge până la 160 MHz, cipul are aproximativ 80 KB de RAM DRAM și

35Kb IRAM de mare viteză.

În mod implicit, atunci când cumperi aceste cartele, multe dintre ele au un firmware "AT", ceea ce face ușor utilizarea ESP8266 ca un modem simplu, controlat prin intermediul unui port serial. Și de multe ori acest lucru este totul, dar pentru lucruri mai complexe, din anumite motive, procesorul extern este utilizat, deși 8266 poate fi, de asemenea, destul de mult.

Există mai multe moduri în care cipul ESP8266 poate porni în funcție de configurația GPIO a pinilor. Vom discuta lansarea Flash și inundarea pe UART. În plus, există posibilitatea de a descărca de la distanță firmware-ul, dar despre acest alt moment.

Pentru cele două moduri de funcționare ale ESP8266, despre care vom vorbi, procesorul așteaptă un nivel scăzut al GPIO15 și un GPIO2 înalt. GPIO0 este utilizat pentru a selecta modul. În timpul funcționării normale, trebuie să utilizați un rezistor pentru a trage GPIO0 în sus. Aceasta va forța încărcătorul de boot din ESP8266 să citească datele din cipul EEPROM în IRAM și să încarce programul. Dacă setăm un nivel scăzut de GPIO0, ROM-ul de boot (ROM) din interiorul ESP8266 preia controlul propriu-zis și cipul începe să comunice peste UART. Folosind această boot ROM, putem umple programul nostru cu memorie flash.

ESP8266 suportă rate de date mari, de exemplu, la o viteză de 454.800, puteți efectua modificări în program și puteți testa foarte repede. Instrumentul oficial pentru descărcarea firmware-ului pe chip este XTCOM, dar există și dezvoltări de la terțe părți, de exemplu, scriptul esputool.py vă permite să automatizați umplerea programelor. În plus, atunci când acest script termină să clipească cipul, chiar dacă GPIO0 este asociat cu un nivel scăzut, acesta va lansa firmware-ul pentru execuție. Aceasta înseamnă că în timpul dezvoltării puteți ține GPIO0 tras la pământ.

Programare directă a Wi-Fi esp8266, doar pentru distracție

Deci, instrumentul dvs. pentru dezvoltatori constă în:

  1. Butoane de comutare sau GPIO0 la sol și cu rezistență de tracțiune la VCC
  2. GPIO2 și CH_PD sunt conectate la VCC
  3. GPIO15 → GND
  4. Convertor de tensiune cu adaptor UART USB-TTL 5V până la 3.3V pentru ESP8266

Instrumente de compilare

Odată ce ați adunat setul de instrumente, puteți compila firmware-ul.

Espressif își distribuie SDK-ul în mod gratuit sub licența Espressif GPL. SDK conține exemple și titluri pentru ROM, precum și pentru bibliotecile Espressif. Este important de menționat că există o comunitate de bibliotecă, dar până acum codul său este sub nivelul Espressif al bibliotecilor. Poate că acest lucru se va schimba în viitor.

Compilatorul companiei Espressif nu o distribuie. Cu toate acestea, aveți posibilitatea să Google și oficial compilator și mediu de dezvoltare, bazat pe Eclipse.

programare

Există mai multe puncte care trebuie notate la programarea ESP8266.

În primul rând, există o mulțime de caracteristici care sunt încorporate ROM și puteți utiliza. Acest lucru înseamnă că nu trebuie să re-pună în aplicare, de exemplu, MD5 sau HMAC, SHA1, SPI, funcțiile UART, funcții cu virgulă mobilă, AES, comenzi pentru lucrul cu memorie, printf, instrumentele de intrare-ieșire de nivel scăzut, și chiar și un mod de planificator de evenimente în timp real, și, cel mai important, ... 802.11!

O listă completă a funcțiilor care se află pe ROM-ul cu chip poate fi găsită în fișierul eagle.rom.addr.v6.ld.

Aceste funcții în ROM, nu toate acestea sunt API. Putem vedea o serie de instrumente suplimentare. ESP8266 poate acționa ca punct de acces sau client (sau ambele). Implicit, ESP8266 are propriul IP AP unic și SSID. Adică atunci când îl dezactivați din cutie, este încărcat API-ul nativ, cipul pornește în modul gazdă cu propriul său server DHCP. O puteți găsi scanând rețelele Wi-Fi, numele punctului de acces va fi șirul "ESP8266".

Potrivit unor opinii, firmware-ul cu comenzi AT sunt buggy. Ca o opțiune există NodeMcu, - acest firmware poate interpreta comenzile limbii Lua. Și nu numai în terminal, cum ar fi comenzi AT, ci creați fișiere în memoria flash ESP8266 și executați-le.

Conectarea ESP8266 la un punct de acces în 8 rânduri de cod

Odată ce sistemul ESP8266 este pornit și aveți nevoie de el pentru a vă conecta la o rețea WIFI existentă, scrieți următorul cod simplu:

Trimiteți date - espconn_sent. Închideți conexiunea - espconn_disconnect. Ori de câte ori primiți date, acestea sunt transmise apelului recv.

Probabil ați observat că a fost utilizată directiva ICACHE_FLASH_ATTR. După cum ne amintim, memoria IRAM nu este prea mare. Această directivă va salva funcția în memoria flash. După încărcare cu instrucțiuni de bliț sunt stocate în cache, dar nu prea lungi.

Lucrul cu GPIO

Ultimul punct cheie al acestui articol este GPIO.

Pinii au dispozitive suplimentare de tracțiune internă (GPIO0..15) și rezistențe de tracțiune în sus (GPIO16). Sursa. Toate acestea pot fi configurate ca intrări sau ieșiri. Există funcții software pentru a lucra cu GPIO.

Veți avea nevoie pentru a apela gpio_init (...), unele macro-uri, cum ar fi PIN_PULLDWN_DIS (...), PIN_PULLUP_EN (...) și alții găsit în SDK. Puteți configura intrările / ieșirile cu gpio_output_set. Multe dintre pinii GPIO pot avea mai multe funcții, unele dintre aceste caracteristici sunt activate în mod implicit, astfel încât, de exemplu, atunci când descărcarea, nu poți face nimic cu GPIO12 și GPIO14, până când acestea sunt selectate ca GPIO.