29. ESP32: jõuame sisse-ehitatud LED vilgutamiseni
<- eelmine peatükk
järgmine peatükk ->
29.0. Seos eelmiste teemadega
Eelmises peatükis saime tööle ESP32 ning uurisime sellega näidisprogramm WiFiScan abil ESP32 ümbrust: leidsime üles enda wifi ning ka ilmselt päris palju naabruses asuvaid wifisid—neid, mille signaal meie ESP32-ni ulatus.
Nüüd on selged esmased töövõtted ESP32-ga ning seega saame katsetada programme—paneme ESP32 tööle access point rollis.
Jõuame ringiga tagasi kursuse algusesse: vilgutame sisse-ehitatud LED-i. Kui alustame tööd uue ja tundmatuga, siis tuleb kõigepealt seda tundma õppida. Arduino ja Arduino IDE-ga alustades aitas meid sisseehitatud LED vilgutamine—polnud vaja muretseda vooluahela koostamise ja toimivuse osas.
Sarnaselt eelmise peatükiga jätkame tutvust ka Github-iga. Oleme sealt juba saanud json failidele viitavaid aadresse nii Digisparki kui ka ESP32 oma arvutitesse installeerimiseks. Seekord võtame sealt programmi, millega saame oma ESP tööle panna kui access point-i. Vaatleme programmi tööd ja rakendame seejuures ka Serial monitori.
Teemas saab tublisti korduma programmi käimasaamine ESP32 peal. Vaatame erilise hoolega üle eelmises peatükis uuritud töövõtted: mis nuppu oli vaja all-asendis hoida ESP32-le järjekordse programmi laadimise ajal? See oli BOOT markeeringuga pisikene surunupp-lüliti.
29.1. Eesmärk ja selgitused
Uusi programme katsetades saame ESP32-ga töötamise selgemaks. Selle peatüki harjutuste järel enam ei juhtu, et ESP32 tarvis mõeldud programm küll kompileerub ent ei käivitu—töövõtted saavad harjumuseks.
Selle peatüki järel õpilane:
29.2. Töövahendid:
29.3. Tegevused
Harjutus A
Teeme eelmisest peatükist selgeks saanud vajalikud ühendused ning Arduino IDE abil käivitame ESP32 peal järgneva programmi:
Vt https://gist.github.com/futechiot/ee0223dd269cbe7d8605ce97d120d7d2
Kui oleme nõuetekohaselt programmi ESP32-le laadinud, käivitame Serial monitori ning teeme ESP32 EN nupu pealt restardi:
- Mida märkame Serial monitori aknas? Võrrelge seda programmi tekstiga.
- Püüame signaali kinni oma mobiiltelefoniga. Avame wifi oma mobiiltelefonil ja ootame ära antud programmis nimetatud seadme ilmumise.
- Anname ka salasõna—kas töötas?
Minul toimis nii, nagu näete fotol.
Kui aga programm isegi mitte ei käivitunud, siis kordame üle eelmisel tunnil õpitud rutiini programmi käivitamiseks. Rutiini suhtes eksimine annab ka tulemuseks vea.
Kindlasti loeme probleemile lahendust otsides veateateid.
Vajadusel küsime õpetajalt nõu, ent hinnatud on see, kui õpilased üksteist aitavad. Ka varasemates peatükkides oleme maininud, et Eesti robootikas on keerukatel hetkedel omavaheline nõustamine soositud!
Harjutus B
Nüüd aga modifitseerime programmi:
- Palun salvestage sama programm uue pealkirja all.
- Seejärel muutke
- nii SSID (SSID = Service Set Identity esitähtede kombinatsioon)
- kui ka salasõna.
- Seejärel käivitage programm uuesti—pidage kinni eelises peatükis selgeks saadud rutiinist!
- Kontrollige üle, kas saate oma mobiiltelefoniga kätte selle SSID?
Järgmisena analüüsige programmi, võite selles olevad kommentaarid asendada oma kommentaaridega. Kommentaare arutage kaaslastega, seejuures saate õpetajale küsimusi esitada.
Ja minul õnnestus seda harjutust tehes anda seadmele selline uus SSID: „SuvaNimi“. Vaata fotol olevat SSID-d.
29.3.1. Demonstreerime wifi võimalusi
Näiteks võiks olla võimalik mingi lihtsa vahendiga meie genereeritud netilehelt suhelda ESP32-ga. Panna teda midagi tegema. Nagu alguses ikka, kasutame võimalust uurida tööprotsessi hästi lihtsa meetodiga: me vilgutame sisseehitatud LED-i ja teeme seda enda mobiilis asuva netilehe peal asuvatelt linkidelt. Kodulehtede tegemist me veel õppinud ei ole, ent ega see proovimast ei takista.
Harjutus C
Nüüd aga uurime järgmist programmi—laeme selle oma ESP32 peale ning käivitame täpselt nõuetele mõeldes.
Nõuetest:
Ent alustame programmist:
#include <WiFi.h> /* lisame teegid*/ #include <WiFiClient.h> #include <WiFiAP.h> #define LED_BUILTIN 2 // Vilgutame LED_BUILTIN-i. // Loome SSID ning salasõna. const char *ssid = "minuESP32"; // Võite kontrollida, mis juhtub, kui SSID kirjutada suurte tähtedega. const char *passWord = "123"; WiFiServer server(80); void setup() { pinMode(LED_BUILTIN, OUTPUT); /*Alati tuli anda ka pinMode.*/ Serial.begin(115200); /*ESP-de tarvis anname alati kiirema baud rate.*/ Serial.println(); Serial.println("konfigureerin access point-i..."); /*Veidi teiepoolset selgitust--mida selles programmiosas Serial monitorilt näeb.*/ /* Anname Access Pointile SSID ning salasõna.*/ WiFi.softAP(ssid, passWord); IPAddress minuesp32IP = WiFi.softAPIP(); Serial.print("AP IP aaddress: "); Serial.println(minuesp32IP); server.begin(); Serial.println("void setup() osa sooritatud: server olemas."); } void loop() { WiFiClient client = server.available(); /* uurime, kas on uusi kliente*/ if (client) { /* if: Kui on olemas uus klient*/ Serial.println("Uus klient."); /* siis teavitab sellest*/ String currentLine = ""; /* ja loob String-tüüpi muutuja: kliendilt sissetuleva info hoidmiseks*/ while (client.connected()) { /* seni kuni (while-tsükkel!) klient on ühendatud*/ if (client.available()) { /* if: ja kui on kliendilt saabuvat infot (baite)*/ char c = client.read(); /* loe see info (baidid) ning*/ Serial.write(c); /* seejärel prindi see Serial monitorile*/ if (c == '\n') { /* if: kui bait on newline character*/ /* ja järgmisena saadab vastusena meile vajalike linkidega teksti*/ /* Kõigepealt anname tavalise alustuse--HTTP header. Anname ka sisu-tüübi (content-type) ja seejärel tühja rea*/ if (currentLine.length() == 0) { client.println("HTTP/1.1 200 OK"); client.println("Content-type:text/html"); client.println(); /* ja sõnum ise järgneb (LED-i sisse-välja lülitamiseks on kahe klikkimise kohaga):*/ client.println("OUT: <a href=\"/H\">SISSEEHITATUD SININE LED KUSTUB</a> <br> (Enne ja peale klikkimist vaata ESP32 peal asuvat sinist LED-i.)"); client.println("Ning paneme ESP32 sinise LED-i tagasi IN peale: <a href=\"/L\">SISSEEHITATUD SININE LED SISSE TAGASI</a> <br>"); /* Paneme veel ühe lause--harjutamiseks. */ client.println(); client.println("Proovi veel klikkida! "); /* järgmisena väljume käskluse break while-tsüklist: */ break; } else { /*ja kui on olemas newline, siis currentLine: vt eespool currentLine kohta*/ currentLine = ""; } } else if (c != '\r') { /* kui resultaat oli midagi muud kui algusesse tagasi toomine(carriage return), currentLine += c; /* siis lisa see currentLine lõppu*/ } /* kui kliendi valik oli "GET /L" siis LED LOW*/ if (currentLine.endsWith("GET /L")) { digitalWrite(LED_BUILTIN, LOW); /* GET /L paneb LED kustunud olekusse*/ } /* kui kliendi valik oli "GET /H" siis LED HIGH*/ if (currentLine.endsWith("GET /H")) { digitalWrite(LED_BUILTIN, HIGH); /* GET /H paneb LED helendama*/ } } } // lõpetab tsükliosa*/ client.stop(); Serial.println("klient on lõpetanud."); } }
- Järgmisena kontrollime, kas meie ESP32 on mobiili poolt üles leitud.
- Seejärel aga paneme 192.168.4.1/ aadressi netilehitseja aadressireale—sama moodi nagu lööks sisse juba tuttavat aadressi õhtul internetis ringi vaadates. Minu netilehitseja pakub esimese numbri kirjutamise järel juba ise õiget aadressi:
Kas töötas nii nagu minul alumisel pildil?
Minu töölaual on nüüd ees selline pilt—asun klikkima:
Kui ei töötanud, siis vaadake, kas olete mobiiliga wifi-ühenduses ESP32-ga. Võite alustada sellest, et avate uuesti Serial monitori, seejärel teete selle Clear output abil puhtaks, seejärel teete restardi ESP32-le ning kontrollite uuesti, kas olete wifi kaudu ühenduses ESP32-ga. Seejärel avate uuesti netilehitseja ning katsute vajutada selles allajoonitud linkide peale.