Arvutiteaduse instituut
  1. Esileht
  2. Noored Koodi
EN
Logi sisse

Noored Koodi

<- Kõik kursused

  • Arduino kursus
  • 1. Sissejuhatus: millist Arduinot valida, programmeerimiskeskkond Arduino IDE
  • 2. Töötamine Arduino IDE-ga, Arduino ühendamine arvutiga ja sisseehitatud LEDi vilgutamine
  • 3. Vooluahela koostamine (LED, takistid, maketeerimislaud, juhtmed) ja värvikood
  • 4. LED-ide vilgutamine FOR tsükliga, lokaalmuutuja kasutamine
  • 5. Lüliti ühendamine ja LEDi vilgutamine vastavalt lüliti asendile: IF/ELSE tingimuse kasutamine
  • 6. RGB ledi ühendamine ja RGB võimaluste katsetamine analogWrite() abil
  • 7. Valgustundliku takisti ja ADC abil valguse mõõtmine ja kuvamine arvuti ekraanil—Serial monitor
  • 8. UART liidese abil andmete vahetamine Arvuti ja Arduino vahel, ASCII tabel
  • 9. Potentsiomeeter: töö-põhimõte, ühendamine, juhtkang (joystick)
  • 10. Servomootori juhtimine—pulsilaiusmodulatsioon ja joystick
  • 11. Ekraani ühendamine ja teksti kuvamine 1602 LCD ekraanil
  • 12. USART ja 1602 LCD: Serial monitorist ekraanile!

  • 13. IDE-s programmeerimisest kokkuvõtvalt
  • 14. LED heleduse muutmine vastavalt keskkonna valgustugevusele
  • 15. Ohmi seadus, multimeetri kasutamine

  • 16. Kordamisküsimused
  • 17. Kontrolltöö

  • 18. LED juhtimine infrapuna-saatjaga ja -vastuvõtjaga
  • 19. HC-SR04 ultrahelisensori ühendamine ja näitude kuvamine LCD ekraanil
  • 20. Joonistame ise programmi Fritzing abil korrektse vooluringi skeemi
  • 21. Sissejuhatavalt sünkroonsest ühendusest (I2C ning SPI) õhurõhu anduri BMP280 näitel
  • 22. CSV—Comma Separated Values
  • 23. Kujundite kuvamine 1602 LCD ekraanil
  • 24. Ekraani ühendamine ja teksti kuvamine 1602 LCD ekraanil
  • 25. Arduino ühendamine bluetooth seadmega
  • 26. Relee juhtimine

  • 27. Digispark: netist tarkvara leidmine, installeerimine ja esimese lihtsa programmi töölepanek
  • 28. ESP32: tarkvara ja lihtsa esimese programmi töölepanek
  • 29. ESP32: jõuame sisse-ehitatud LED vilgutamiseni

  • 30. Kordamine
  • 31. Teooria esitlus
  • 32. Projektiesitlus

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:

a) on omandanud esmased töövõtted ESP32-ga;
b) on pannud ESP32 tööle kui access point-i ja on seda ka oma mobiiltelefonilt näha saanud. Seejärel aga modifitseerinud programmi.
c) on juhtinud LED vilkumist oma mobiilist.

29.2. Töövahendid:

1) arvuti;
2) luup;
3) maketeerimislaud;
4) mikro-USB ühenduskaabel—eelistame sellist, millel on märge data sünkroniseerimise kui ka kiirlaadimise omaduste olemasolu kohta;
5) ESP32 Wrover (Arduino UNO-t me sellel tunnil ei vaja.)

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:

a) Vigade puudumise korral programm kompileerub.
b) Seejärel asub IDE seda ESP32 peale laadima.
b.1.) Kui jõuame ühenduse osani (oranži kirjaga Connecting) , siis punktikeste ja kriipsukeste osa saabudes peame vajutama ESP32 peal asuvale BOOT nupule.
c) Kui programm on ESP32-l, siis avame Serial Monitori (kui see oli meil eelnevast lahti ununenud, siis võime selle sulgeda ja uuesti avada, aitab ka selle puhtaks tegemine Clear nupule vajutades).
d) Serial monitori avamise järel võime teha ESP32-le restardi—saame niiviisi veelkord veenduda, et meie poolt programm toimib vähemalt kuni Serial monitorini.
e) Ja siis jõuame hetkeni, mil peame vaatama, kas saame ESP32-l asuvat LED-i juhtida mobiiltelefonilt.

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.



<- eelmine peatükk järgmine peatükk ->

  • Arvutiteaduse instituut
  • Loodus- ja täppisteaduste valdkond
  • Tartu Ülikool
Tehniliste probleemide või küsimuste korral kirjuta:

Kursuse sisu ja korralduslike küsimustega pöörduge kursuse korraldajate poole.
Õppematerjalide varalised autoriõigused kuuluvad Tartu Ülikoolile. Õppematerjalide kasutamine on lubatud autoriõiguse seaduses ettenähtud teose vaba kasutamise eesmärkidel ja tingimustel. Õppematerjalide kasutamisel on kasutaja kohustatud viitama õppematerjalide autorile.
Õppematerjalide kasutamine muudel eesmärkidel on lubatud ainult Tartu Ülikooli eelneval kirjalikul nõusolekul.
Tartu Ülikooli arvutiteaduse instituudi kursuste läbiviimist toetavad järgmised programmid:
euroopa sotsiaalfondi logo