ESP32:n käyttö mahdollistaa IoT-laitteiden luotettavan ja tehokkaan yhdistämisen verkkoon. Kun ESP32 on kytketty Wi-Fi-verkkoon, sen paikallinen IP-osoite tulostetaan, mikä osoittaa onnistuneen verkkoon integroinnin. Tämän jälkeen server.on() -komennot määrittävät reititykselle käsittelijät juuripolulle (/) ja /toggle-polulle. server.begin()-komento käynnistää verkkopalvelimen, ja loop()-funktiossa palvelin käsittelee jatkuvasti asiakaspyyntöjä käyttäen server.handleClient()-komentoa. Samalla koodissa seurataan painikkeen tilaa digitalRead(buttonPin)-komennolla. Jos painike on painettuna (LOW-tila), ledState-muuttuja vaihdetaan, ja LED-valon tila päivittyy vastaavasti.
handleRoot()-funktio tuottaa HTML-vastauksen, kun juuripolkuun (/) päästään. Tämä vastaus näyttää nykyisen LED-tilan ja tarjoaa painikkeen sen vaihtamiseksi. handleToggle()-funktio puolestaan vastaa /toggle-reitille, jossa LED:n tila vaihdetaan ja käyttäjälle lähetetään vahvistusviesti. Kun koodi on ladattu ja ESP32 on yhdistetty Wi-Fi-verkkoon, sarjaporttinäytöllä näkyy laitteen IP-osoite. Syöttämällä tämän IP-osoitteen mihin tahansa selainikkunaan, kuten Chromeen, käyttäjä näkee ESP32:n isännöimän verkkosivun, jolla LEDin tilaa voidaan ohjata.
Tässä osassa käsitellään, kuinka ESP32 voidaan käyttää HTTP-asiakkaana, joka on ohjelmointisovellus, joka lähettää HTTP-pyyntöjä verkkopalvelimille tiedon tai resurssien hakemiseksi. Kun ESP32 toimii HTTP-asiakkaana, se voi ottaa yhteyttä verkkopalvelimiin ja vastaanottaa sieltä tietoja, kuten säätilan, lämpötilan ja kosteuden.
Esimerkiksi OpenWeatherMap API:n avulla voidaan lukea säätilaa ja sen komponentteja, kuten lämpötilaa, kosteutta ja painetta. Tätä varten käyttäjän täytyy ensin rekisteröityä OpenWeatherMap-verkkosivustolle ja hankkia API-avain. Rekisteröitymisen jälkeen käyttäjä voi käyttää ilmaista suunnitelmaa ja saada API-avaimen. Tätä API-avainta tarvitaan myöhemmin, jotta ESP32 voi tehdä pyyntöjä OpenWeatherMapin palvelimelle ja saada säätilan tiedot.
API-pyynnön testaamiseksi voidaan käyttää selainikkunaa, johon syötetään kaupungin nimi ja API-avain, ja tuloksena oleva JSON-muotoinen data voidaan tarkastella suoraan selaimessa. Näitä tietoja voidaan lukea ja käsitellä ESP32-laitteessa, joka puolestaan esittää ne OLED-näytöllä.
Koodissa käytetään useita kirjastoja, kuten WiFi.h Wi-Fi-yhteyksien muodostamiseen, HTTPClient.h HTTP-pyyntöjen lähettämiseen, Arduino_JSON.h JSON-tiedon jäsentämiseen sekä Adafruit_SSD1306.h OLED-näytön ohjaamiseen. Koodin setup()-funktiossa muodostetaan yhteys Wi-Fi-verkkoon ja alustetaan OLED-näyttö. Jos Wi-Fi-yhteys on onnistunut, koodi luo URL-osoitteen, joka liittyy halutun kaupungin säätilan hakemiseen OpenWeatherMapin API:sta. Sen jälkeen tehdään HTTP GET -pyyntö ja vastaanotettu JSON-data jäsennetään, jotta lämpötila, paine, kosteus ja tuulennopeus saadaan talteen ja näytettäväksi OLED-näytöllä.
Tämä esimerkki yhdistää IoT-laitteen, HTTP-protokollan ja datan visualisoinnin tehokkaaksi kokonaisuudeksi. Tällaisen järjestelmän avulla käyttäjä voi nopeasti tarkastella ja analysoida säätilatietoja suoraan omalta laitteeltaan.
Laitteen liittäminen Wi-Fi-verkkoon voi olla hankalaa, jos käytettävissä on useita eri verkkoja, sillä silloin koodia täytyy muuttaa joka kerta, kun verkko muuttuu. Tämä ongelma voidaan kuitenkin ratkaista WiFiManager-kirjastolla, joka mahdollistaa Wi-Fi-yhteyden määrittämisen helposti HTTP-sivuston kautta ilman, että koodia tarvitsee muokata. WiFiManagerin avulla käyttäjä voi valita verkon ja syöttää salasanan suoraan selaimessa, jolloin ESP32 liittää itsensä uuteen verkkoon automaattisesti. Tämä tekee laitteesta huomattavasti joustavamman ja helpommin käytettävän eri ympäristöissä ilman tarvetta koodin päivittämiselle.
On tärkeää huomata, että ESP32:n toiminta HTTP-asiakkaana ja palvelimena ei rajoitu pelkästään säätilan lukemiseen. Tämä esimerkki voi toimia perustana monille muille IoT-projekteille, joissa laitteet kommunikoivat verkkopalvelimien kanssa. HTTP-protokollan käyttö mahdollistaa laajempien ja monipuolisempien datan keräämis- ja käsittelyratkaisujen toteuttamisen IoT-laitteilla.
Miten käyttää FreeRTOS:ia ESP32-projekteissa LEDin vilkkumisen avulla?
FreeRTOS tarjoaa tehokkaan ja joustavan tavan hallita useita tehtäviä samanaikaisesti, mikä on erityisen hyödyllistä, kun halutaan käyttää ESP32:n kaltaisia monitehtävällisiä mikro-ohjainalustoja. Tämän esimerkin avulla selitämme, kuinka LEDin vilkkuminen voidaan toteuttaa käyttämällä FreeRTOS:ia ja miten se eroaa perinteisestä ohjelmoinnista Arduino-ympäristössä.
Kun käytämme FreeRTOS:ia ESP32:n kanssa, voimme hyödyntää sen tehtäväpohjaista lähestymistapaa, joka mahdollistaa useiden prosessien suorittamisen samanaikaisesti ilman tarvetta jatkuvalle silmukalle (loop). Tämän sijaan kirjoitamme erillisiä tehtäviä, jotka voivat toimia itsenäisesti ja vuorotellen. Näin ollen LEDien vilkkumisessa voimme hallita kahta LEDiä eri aikaväleillä samassa ohjelmassa.
Esimerkiksi, ensimmäinen LED voidaan ohjelmoida vilkkumaan 500 millisekunnin välein ja toinen LED 1000 millisekunnin välein. Tämä mahdollistaa erilaisten ajastusten hallinnan samassa sovelluksessa ilman, että niiden toimintaa tarvitsee erikseen ajoittaa tai synkronoida muulla tavalla.
Ensimmäinen LED: Vilkkuminen 500 millisekunnin välein
Aloitamme määrittelemällä tarvittavat pinnit ja tehtävän ensimmäiselle LEDille:
Tämä tehtävä kytkee LEDin päälle ja pois 500 millisekunnin välein käyttäen vTaskDelay()-funktiota, joka odottaa määritetyn ajan ennen seuraavaa toimintoa. Funktio vTaskDelay() perustuu FreeRTOS:in ja toimii ajastimilla, jotka ovat kytkettynä FreeRTOS:n aikayksikköön (ticks), ja portTICK_PERIOD_MS määrittelee yhden ajastimen tickin pituuden millisekunneissa.
Toinen LED: Vilkkuminen 1000 millisekunnin välein
Samalla tavalla voidaan luoda toinen tehtävä toiselle LEDille, mutta tällä kertaa vilkkumisen aikaväli on pidempi, eli 1000 millisekuntia:
Tässä tehtävässä LED syttyy ja sammuu 1 sekunnin välein, käyttäen samaa vTaskDelay()-funktiota kuin edellisessä tehtävässä.
Tehtävien luominen ja ohjelman käynnistäminen
Kun molemmat LEDin vilkkumistehtävät on määritelty, ne tulee luoda pääohjelmassa, setup()-funktiossa, ja määrittää niiden parametrit:
Tässä xTaskCreate-funktiolla luomme molemmat tehtävät, määrittelemme niiden pin-koodit, pinojen koon ja prioriteetit. Tässä esimerkissä molemmilla tehtävillä on sama prioriteetti (1), mutta niitä voisi säätää erikseen tarpeen mukaan.
Koska käytämme FreeRTOS:ia, loop()-funktiota ei tarvita. Tehtävät toimivat itsenäisesti taustalla, joten loop() voidaan jättää tyhjäksi:
FreeRTOS:n käyttö ja sen mahdollisuudet
Tässä esimerkissä olemme toteuttaneet perustoiminnot FreeRTOS:n avulla, mutta sen käyttöalue on laajempi. FreeRTOS mahdollistaa monimutkaisempien järjestelmien hallinnan, kuten ajastimien hallinnan, keskeytysten käsittelyn ja muistinhallinnan, jotka ovat tärkeitä suuremmissa sovelluksissa. Mikäli halutaan laajentaa tätä perusperiaatetta, voidaan lisätä useita muita tehtäviä, jotka voivat olla synkronoituja keskenään tai toimia itsenäisesti.
Erityisesti ESP32-alustalla FreeRTOS:in integrointi ESP-IDF-kehitysympäristöön avaa paljon lisämahdollisuuksia, kuten syvällisemmän virranhallinnan ja laajennetun laitteistotuen.
On tärkeää ymmärtää, että FreeRTOS on suunniteltu erityisesti monitehtävällisyyteen, ja se tarjoaa valmiita työkaluja, kuten ajastimia ja tehtäväprioriteetteja, joita voidaan hyödyntää järjestelmän suorituskyvyn optimoinnissa. Se ei kuitenkaan ole pelkästään tehokkuutta varten: FreeRTOS tarjoaa myös tavan hallita mikro-ohjaimen resursseja hallitusti, jolloin voidaan toteuttaa monimutkaisempia ja luotettavampia järjestelmiä.
PlatformIO: Vaihtoehto Arduino IDE:lle
Jos haluat työskennellä enemmän joustavasti ja tehokkaasti, PlatformIO tarjoaa vaihtoehdon Arduino IDE:lle. PlatformIO on monipuolinen kehitysympäristö, joka tukee useita mikro-ohjaimia, kuten ESP32:ta. Se tarjoaa laajemmat ominaisuudet, kuten projektin hallinnan, integroitu testauksen ja tuen eri kehysympäristöille, kuten ESP-IDF ja Arduino.
PlatformIO mahdollistaa projektien hallinnan eri alustoilla, ja se tukee myös laajempaa ekosysteemiä, mukaan lukien riippuvuudet, kirjastot ja konfiguraatiotiedostot. Esimerkiksi ESP32-projekteissa PlatformIO mahdollistaa Arduino Core:n ja ESP-IDF:n käytön samassa ympäristössä, jolloin voit valita juuri oikean kehyksen projektisi tarpeiden mukaan.
Esimerkkinä PlatformIO:lla voit luoda projektin helposti ja koota koodin tehokkaasti käyttäen arduino-ydintä, mutta saat samalla monipuoliset kehitystyökalut, jotka eivät ole saatavilla perinteisessä Arduino IDE:ssä.

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский