Ohjaimena toimii html/javascript pohjainen ohjelmisto esim. kännykässä, joka ohjaa laitetta muodostamansa langattoman lähiverkon kautta. Laitepuolen esimerkkiohjelmina on servo- ja pwm-moottoriohjauksilla toteutetut ohjelmistot ESP12/ESP32 laitteille.
"Ohjelmisto" koostuu IoT ohjainohjelmasta (ohjain.html jossa javascript) ja Arduinolla koodatusta ESP-laitepuolesta. Ohjain eli "lähetin" 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. Kaksipotkurisessa hydrokopterissa voidaan käyttää pelkästään 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.
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, 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 mahdollisesti hotspottia jonka nimi ja salasana sille oli annettu.
Näet ESP:n saaman IP-osoitteen verkosta sarjamonitoriakin käyttäen, mutta jos kyseessä on puhelimen tarjoama hotspot, niin näet siihen liittyneet laitteet puhelimesta kohdasta "Laiteluettelo".
Kuvassa alla puhelimeen ilmestyi ohjelmoinnin jälkeen "ESP-460A4E", jonka IP-osoite on 192.168.43.190. Jos näyttöön ei ilmesty mitään, niin joskus ESP:n reset napin painallus auttaa (varsinkin ESP32).
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. Tiedostot kopioidaan lopulta kaapelilla puhelimen muistiin (sdcard), jonka juureen on hyvä tehdä oma kansio iot-ohjelmistoja varten. Puhelimella useimmat kuitenkin haluavat ohjata, mutta muutamat alkuasetukset ja testailut kannattaa tehdä ensin tietokoneella.
Tietokoneella pitää kuitenkin ohjelmoida ensin laite ja ohjaamisen helpottamiseksi javascript-koodiin on hyvä muuttaa Notepadilla valmiiksi IP-osoite, jonka ESP sai. Alku on aina 192.168.43. ja käytännössä vain kyseisen perään tulevaa viimeistä numeroa (malliesimerkissä 190) tarvitsee muuttaa. Tämän jälkeen ohjelmiston voi siirtää puhelimeen. Osoitteen voi toki syöttää myös käsin joka kerta kun ohjaamisen aloittaa.
Puhelimessa olevaan html-sivuun osoitetaan ensimmäisellä kerralla koko polulla. Esimerkki kun puhelimeen on tehty ohjelmistoa varten kansio "iot":
file:///sdcard/iot/ohjain.html
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.
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.
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.
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.
Jos yhteys katkeaa tai sitä ei ole ollenkaan, muuttuu aloitusnappi violetiksi ja siinä lukee "Katkos".
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.
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).
Sulje ruksista jokainen jäänne ohjaimesta eli sinikehyksinen pikku kuvake ohjaimesta jonka näet.
Kaiva ohjain.html tämän jälkeen tuoreeltaan uusiksi muistista ja näyttö ei ole 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
Esittelyvideo kaksikanavaisesta PWM-ohjauksesta IoT-Hydrokopterin muodossa (YouTube).