100%
Boreas Electronics Oy
1
IoT ohjain- ja Arduinokoodi ESP-menopelien ohjaukseen

Ohjaimena toimii html/javascript pohjainen ohjelmisto esim. kännykässä, jolla laitetta ohjataan langattoman lähiverkon kautta. Ohjattavan ESP12/ESP32 laitepuolen ohjelma on Arduinopohjainen, pwm-moottoriohjauksia- ja servoa käyttävä ohjelmisto.


Ohjain
Ohjain koostuu IoT-ohjainohjelmasta (ohjain.html javascript-koodilla). Se toimii tietokoneessa, puhelimessa tai missä tahansa laitteessa kunhan siinä toimii selain. Mitään ylimääräisiä appeja ei tarvita.

Laiteohjelma / Arduino
Arduinopuolen-malliohjelmia on kaksi versiota. Yksikanavaisessa ohjelmassa pwm-kanavia on vain yksi, menopelin kuten auton liikuttamiseksi yhdellä moottorilla. Kääntyminen hoidetaan servolla. Toisena versiona on kaksikanavainen ohjaus, joka mahdollistaa ohjauksen pelkästään moottoreilla, mutta siinäkin voidaan käyttää servoa. Tällöin samanaikainen moottoreiden ohjaus avustaa sekä kääntymistä että -kulkemista ja toimii tasauspyörästön tavoin eikä esim. auto puske. Esimerkiksi kaksipotkurisessa hydrokopterissa voidaan käyttää kaksikanavaista moottoriohjausta.

Arduino-ohjelmisto NodeMCU:n/ESP12(ESP8266) osalta on yhteensopiva moottoriohjaimen NODEX293 kanssa, jolla voi käyttää vaihteellisia pienivirtaisia moottoreita. Suositeltavampaa on kuitenkin käyttää Ideaportin pientä fet-moottoriohjainta, sen matalilla jännitteillä paremman hyötysuhteen- ja virranantokyvyn takia.


Olisi hyvä jos käytettävistä Espressif alustoista olisi jonkin verran kokemusta. Ennen ohjelmien käyttöä oletetaan että Arduino IDE on alustettu toimimaan ESP12/ESP32 pohjaisien kehitysalustojen kanssa. Arduinon "Boards Managerista" tulee löytyä käyttämäsi kehitysalustan paketit, joko "esp8266 by ESP8266 Community" tai "esp32 by Espressif Systems".
Esimerkkinä ESP12/NodeMCU asennusohjeet:


Ohjelmat (Arduino-IDE:ssä sketsit) on tehty sekä ESP12(8266) että ESP32 pohjalle. Valitse vain oikea kehitysalusta ohjelmointia varten kuten "NodeMCU 1.0 (ESP-12E Module)" / "ESP32 Dev Module"... ja testaa että edellä kerrotut ESP- kirjastot ovat kunnossa.

Ohjain-Vaaka-Yhteys.jpg?ver=

Kuva puhelimen näytöstä - ohjain lähetysvalmiudessa


Huomaa että ESP32-kirjaston tulee olla päivitetty >3.0 versioihin, joissa pwm funktio on analogWrite kuten on ollut jo kauan ESP8266 puolella (eikä vanhempi ledcWrite)

Arduino-ohjelmat .ino muodossa:


Huom. Älä koskaan muuta Arduino IDE:n tallentaman tiedoston nimeä resurssienhallinnan kautta! Arduino .ino päätteisten tiedostojen nimien pitää aina vastata sitä kansion nimeä, jossa tiedosto on Arduino-sketseissä. Kun olet ladannut ohjelman ja avaat sen, niin anna Arduino-IDE:n luoda ohjelmalle sen nimeä vastaava kansio. Voit sitten tallentaa ohjelman myöhemmin Arduino IDE:n kautta haluamallasi nimellä jos muokkaat sitä.

Ennen kuin siirrät ohjelman laitteeseen, muuta lähiverkon nimi ja salasana oikeiksi koodista, jotta laite pystyy kirjautumaan sisään langattomaan verkkoon.

// Hot Spotin tunnus ja salasana
const char* ssid = "HottiSpotti";
const char* salasana = "salainensana";

Kun kyseinen on tehty, siirrä ohjelma Arduinolla käyttämääsi ESP-alustaan. Kun ESP on kaapelin päässä ja resetoituu ohjelman kirjoittumisen jälkeen, alkaa se heti etsimään lähiverkkoa, eli esim. puhelimen "hotspottia", jonka nimi- ja salasana sille oli annettu.

Näet ESP:n saaman IP-osoitteen myös Arduino IDE:n sarjamonitoria käyttäen, mutta jos käytössä on puhelin, niin näet sen myös puhelimen mobiilitukiaseman tietojen alta ("Mobiilitukiaseman hallinta" tms.).

Boreas Electronics Oy
2

Kuvassa alla puhelimeen ilmestyi ohjelmoinnin jälkeen "ESP-460A4E" ja IP-osoite 192.168.43.190. Jos näyttöön ei ilmesty mitään, niin joskus ESP:n reset napin painallus auttaa (varsinkin ESP32). Kyseessä oli Huawein vanhempi puhelin. Monesti listassa ei näy suoraan IP-ko. osoitetta, vaan tieto löytyy erikseen kunkin listalta löytyvän rivin tarkempia tietoja tutkimalla (ja esim. Samsungista vielä sitten erillistä info-täppää painamalla).


Laiteluettelo.jpg?ver=


Ohjainohjelma / puhelin

Ohjainohjelma eli html, javascript ja css tiedosto sekä pari kuvatiedostoa ovat yhdessä zip tiedostossa. Pura zip ensin tietokoneelle ja pidä ko. tiedostot samassa kansiossa. Sitten ohjelmiin tehdään pienet käyttöä helpottavat muutokset, varsinkin jos ohjaimena käytetään puhelinta jossa muutoksia ei voi enää tehdä.


Javascript-koodiin on hyvä muuttaa valmiiksi IP-osoite, jonka ESP sai (kuten edellinen esimerkki 192.168.43.190). Käytä muuttamiseen Notepadia. Käytännössä samaan puhelimeen (tai muu tukiasema) liittyvien muiden ESP-moduuleitten osalta yleensä vain viimeistä neljättä numeroa tarvitsee muuttaa (malliesimerkissä numeroa 190). Tämän jälkeen ohjelmiston voi siirtää puhelimeen. Osoitteen voi toki muuttaa ohjaimeen oikeaksi joka kerta kun ohjainta alkaa käyttämään.


Ohjaimen siirto puhelimeen

Android versiot >10
Lähes kaikissa nykyään käytettävissä Android-versioissa ohjelmisto on siirrettävä puhelimen muistissa sen selaimen alaiseen kansioon jota ohjaamisessa tullaan käyttämään. Liitä ensin puhelin tietokoneeseen ja salli tiedostojen siirto USB:n kautta.

Avaa puhelimesta kansionäkymä (Sisäinen tallennustila) siirry kansioon Android > data
Kansiossa on useita alikansioita, joista valitaan käytettävän selaimen kansio kuten:
• com.android.chrome - Chrome-selain
• com.opera.browser - Opera-selain

Mennään yhä syvemmälle alikansioon:
.../files/Download
Nyt ollaan perillä kunhan kyseiseen Download kansioon tehdään vielä oma kansio kuten "/iot"

Koko polku näyttää esimerkiksi seuravalta:

KansioPuhelimessa_Android11plus.jpg?ver=

Kaikki ohjaimen tiedostot siirretään tähän kansioon.

Sitten asia ei ole niin yksinkertainen, että selaimelle voisi antaa juuri tuon saman polun ohjaimen käyttämiseksi. Sen takia että asiaa "emuloidaan" turvasyistä, on selaimen osoiteriville annettava polku seuraava:

Chrome:
file:///storage/emulated/0/Android/data/
com.android.chrome/files/Download/iot/ohjain/ohjain.html

Opera:
file:///storage/emulated/0/Android/data/
com.opera.browser/files/Download/iot/ohjain/ohjain.html

Android versiot <11
"Ennen oli kaikki paremmin" ja helpompaa. Jos saat käyttöösi minkä tahansa toimivan vanhemman kännykän jolla saa muodostettua lähiverkon, on sen käyttäminen huomattavasti helpompaa. Tee puhelimen muistiin kansio kuten /iot ja siirrä sinne ohjelmisto.
Polku on tällöin:
file:///sdcard/iot/ohjain.html - anna tuo polku myös selaimelle ja käytä

Puhelimessa olevaan html-sivuun osoitetaan ensimmäisellä kerralla koko polulla. Myöhemmin selain osaa ehdottaa tuota osoitetta pian jo kirjainta "O" tarjotessa, aivan kuten internetissä toimiville muille sivuille joilla on aiemmin käyty. Lisäksi osoite kannattaa merkata suosikiksi.

Puhelimeen pitäisi avautua seuraava näkymä. Tässä tapauksessa puhelin on vaaka-asennossa. Ohjain toimii myös pystyasennossa.

Ohjain-Vaaka-Aloitus.jpg?ver=


Boreas Electronics Oy
3

Näytöllä on kaksi sormilla toimivaa "padia", joiden hiplailu näyttää koordinaatteja. Oikeanpuoleinen/isompi "Joystickpad" (pystyasennossa alempi) on ohjaamista varten ja vasemmanpuoleinen "Nappulapad" (pystyasennossa ylempi) on asetuksia varten. Jälkimmäinen alue on näissä esimerkkiohjelmissa toimeton. Sen sisältämät koordinaatit kuitenkin siirtyvät ESP:lle ja niitä voi käyttää ohjelmissa hyväksi. Padit ovat kuvia, joista nappulapadin (npad.gif) voi vaihtaa kuvaan jossa on oikeasti nappeja. Koordinaattien avulla vastaanottopäässä voi saada niiden avulla tapahtumaan asioita kuten vaikka valot päälle.

Kun painat "Aloita"-nappia, kysyy ohjelma IP-osoitetta. Jos korjasit IP-osoitteen jo Javascript-koodiin, ei osoitetta tarvitse muuttaa.

Ohjain-Aloitus-IPosoite.jpg?ver=

Aloita nappi muuttuu vihreäksi ja pysyy vihreänä jos yhteys toimii. X-tilt-napilla näytön saa kokoruudun moodiin ja nappi alkaa näyttämään astelukua vasemmalle/oikealle. Jos aikomus ei ole aloittaa keinutusohjausta, niin paina uudestaan.

Jos painat Y-tilt nappia yhden kerran, niin se muuttuu harmaaksi ja alkaa näyttämään astelukua itseesi- ja poispäin. Kun painat Y-tilt nappia toisen kerran, muuttuu sekin vihreäksi, mutta sen astelukukin nollautuu. Kyseisestä asteluvusta tulee eteen-/taakse keinutuksen uusi nollakohta. Eli esim. "täysi kaasu" eteenpäin onkin sen jälkeen vaakataso ja täysi kaasu taaksepäin silloin kun puhelin on 90° pystyssä.

Huom. keinuttamista tukevia toimintoja ei ole kaikissa puhelimissa. Jos puhelin toimii vatupassina (mitään yhteyksiä laitteeseen ei tarvita), niin sillä voi ohjata keinuttaen. Ohjaaminen onnistuu kuitenkin aina Joystickpadilla sormin ohjaten.

Ohjain-Pysty-Yhteys-Xtilt-Ytilt1.jpg?ver=

Näytössä näkyy myös ESP:n antennisignaalin taso. Käytännössä -90dBm paikkeilla kannattaa alkaa ohjaamaan laitetta takaisinpäin, mutta et juuri enää näe ohjattavaa laitettakaan.

Jos keikuttamalla ohjaaminen on päällä ja keikautat puhelinta yli 45° keskiasennosta suuntaan tai toiseen, ilmoittaa puhelin siitä värinällä ja muuttamalla näytön taustan punaiseksi.

Ohjain-Pysty-Vibra.jpg?ver=


Jos yhteys katkeaa tai sitä ei ole ollenkaan, muuttuu aloitusnappi violetiksi ja siinä lukee "Katkos".

Ohjain-Pysty-Katkos.jpg?ver=


Akun jännitteen näyttö ruudulle
Puhelimen näytöltä pystyy tarvittaessa seuraamaan myös ohjattavan laitteen akun jännitettä. ESP voi lukea jännitteitä A/D pinneillä, esimerkissämme pinnillä A0 (ESP32=GPIO36, piirilevyn merkintä riippuu alustasta esim. Devkit piirilevyillä lukee VP). Normaalisti pinniin voi syöttää korkeintaan 3,3V jännitteen. Tätä varten laitteeseen tarvitaan vastusjakokytkentä tiputtamaan jännite sopivaksi ja lisäksi elektrolyyttikondensaattori vakauttamaan ko. jännite.

Kun vastukset ovat kuten kytkentäkaaviossa alla, voi akuissa olla max. 12V jännite. Arvon voi tarkemminkin kalibroida tutustumalla ohjain.js (javascriptin) koodissa olevaan selostukseen.

Volt-A0.jpg?ver=


Boreas Electronics Oy
4

Puhelimen näyttö sekaisin?
Asia johtuu siitä että selain yrittää itsepintaisesti muistella vanhoja ja olet jo käännellyt ja väännellyt puhelinta tällä välin. Pakota kyseinen instanssi sulkautumaan painamalla selaimessa olevaa pientä ruutua yläreunassa (kuvassa ruudussa on no. 1).

SelainSeko1.jpg?ver=


Sulje ruksista jokainen jäänne ohjaimesta eli sinikehyksinen pikku kuvake ohjaimesta jonka näet.

SelainSeko2.jpg?ver=

Kaiva ohjain.html tämän jälkeen tuoreeltaan uusiksi muistista ja näyttö ei pitäisi olla enää seko.

Esittelyvideot

Lyhyt esittely IoT-ohjatusta autosta. Autossa on yksikanavainen pwm ja kääntäminen tapahtuu servolla. Videolla vaihdetaan ensin yhdestä ohjelmasta toiseen (oikeasti html-tiedostosta toiseen joissa Javascript on se ohjelma) ja sitten aloitetaan auton ohjaaminen. Huom. ohjaimen versio on videolla hieman vanhempi

4WD_Sivusta.jpg?ver=


Esittelyvideo kaksikanavaisesta PWM-ohjauksesta IoT-Hydrokopterin muodossa (YouTube).

Hydrokopteri.jpg?ver=