IoT: Go home PI, you’re drunk!

Internet of Things on kiehtonut omaa mieltä jo pitkään ennen kuin termi edes keksittiin: Se on pääosin se asia joka nykypäivän communicator/mobile device kategorian laitteissa ja älypuettavissakin kiehtoo. Älykkäiden verkottuneiden laitteiden mahdollisuudet ja uhat. Nyt tuli sitten aika pistää äly pyörille.

2015-07-05 17.27.22

Nykypäivänä on helpompaa kuin koskaan näperrellä ja prototypoida näiden parissa: Raspberry Pi tietokoneet ovat halpoja ja niihin saa kiinnitettyä oikeastaan mitä vain mielikuvitus loihtii. Olen itse rakennellut niihin aiemmin kokeilumielessä full stack raskasta Java EE ratkaisua, milloin MySQL kannan, milloin MongoDB:n kera ohjaamaan kodin automaatiota. Tuli kokeiltua sekin miten Glassfish sovelluspalvelin pyörähtää käyntiin: Ihan hienosti, jopa ihan ykkösgeneraation Raspissa.

Tällä kertaa halusin kokeilla jotain uutta. Muutama vuosi takaperin JavaOne seminaarissa osallistuin autokilpailuun jossa koodailtiin autoihin algoritmia jolla ne ajaisivat lujaa mutta pysyisivät radalla. Siitä jäi ajatus itämään. Hiljattain tutkin Lego Mindstorm EVO paketteja, mutta ne tuntuivat rajoittuneilta, ja kalliilta kokeiluun nähden. Niihinkin löytyy toki nykyään BrickPi-laajennus jolla voi laittaa Raspberryn käskemään EVO kontrollereita ja sensoreita. Mutta itselleni haaviin jäi GoPiGo-alusta. Moottorit, pieni kontrolleri joka kytkeytyy suoraan Pin kylkeen, virtapaketti joka toimii pattereilla ja irrottaa laitteen virtapiuhan tyranniasta. Go, Pi, Go, feel the wind in your electronic hairs! 😉

2015-07-05 17.27.05

Eli tilaukseen napsahti, ja ei kun testailemaan. GoPiGo web sitelta sai latailla valmiin imagen joka pohjautui jo tuttuun Raspbianiin, ja toimi ihan ok, kunhan viritin sen langattomaan kotiverkkoon ja kävin läpi alustusrutiinit. Sieltä löyty esimerkkejä mm. Pythonilla, Javalla, ja testailin niiden avulla että olin koonnut kaiken oikein ja piuhat olivat paikallaan. Mutta kuten sanottua, tällä kertaa oli tarkoitus tehdä jotain uutta.

Joten päädyin viritykseen, jossa ytimen muodostaa node.js palvelin. Viritin sen automaattikäynnistymään Raspin myötä. Automaattikäynnistys tapahtuu ihan init.d scripteillä, ja apuna käyttelin forever + nodemon yhdistelmää, jotta prosessi päivittää itsensä kun koodeja päivitetään, ja myös jos se sattuisi kaatumaan.

Palvelin initialisoi GoPiGo osan, ja kiinnittää pari tapahtumankuuntelijaa, mm. varoittamaan jos virta käy vähiin pattereissa. Ja lataa html-sivun jonka kautta raspia voi ohjailla. Tuossa vähän maistiaista miltä sen pään koodi näyttää:

socket.on('status', function(msg){
  $('#messages').append($('<li>').text(msg));
});
$('#forward').click(function() {
  socket.emit('command','move forward');
});
$('#backward').click(function() {
  socket.emit('command','move backward');
});

Halusin rivakkuutta ohjaukseen joten websocketeilla mennään. Tarkemmin, socket.io nykyisellä inkarnaatiolla. Käyttöliittymä on tässä kohtaa karu – pelkkää html:ää ja jquerya. Vähän kutkuttaisi päästää Aurelia irti tässä kohtaa. Käytännössä siis websocket kanavalla liikkuu kahteen suuntaan tavaraa: status viestit menevät ’status’ kanavalle, ja näytetään ’client’ päässä. Komennot lähetetään ’commands’ kanavalle, ja voivat olla esim. mene eteenpäin, pysähdy, käänny, laita ledejä päälle, jne.

Ja sehän toimii. Hienosti. Jopa ihan Android kännykästä käsin. Sillä oli kiva kiusata kissoja ja koiraa 😉

2015-07-05 17.33.55

2015-07-01 22.21.13

Mitähän hittoa tällä sitten tekee? No ei yhtikäs mitään. Mutta mielenkiintoinen harjoite taas keveiden pikku älylaitteiden maailmassa, nodejs tuntuisi olevan mukavan keveä ratkaisu tämäntapaiseen hommaan, ja Raspberry Pi tuntuu Noden kanssa tarjoavan kaikki tarpeelliset palaset että prosessin saa pyörimään luotettavasti ja itsenäisesti.

Seuraavia askelia:

– pistä UI päähän jotain fiksumpaa ja helpompaa kehitysframeworkia, esim. Aurelia.

– Kiinnitä pakkaan sensoreita, esim. mikroaaltotutka, kamera, servoja.

– Opeta robotille Asimovin kolme periaatetta ettei käy kuin Volkswagenin tehtailla

– Laita laite tuomaan kylmä olut kun se aistii sille tarpeen.

– Ja ampumaan raketteja devaajan päähän joka taas /&%/&% rikkoi sen buildin! Tässä voidaan vähän joustaa Asimov-periaatteiden kanssa.

http://www.dexterindustries.com/GoPiGo/projects/python-examples-for-the-raspberry-pi/raspberry-pi-controlled-office-cannon/

Mainokset

Vastaa

Täytä tietosi alle tai klikkaa kuvaketta kirjautuaksesi sisään:

WordPress.com-logo

Olet kommentoimassa WordPress.com -tilin nimissä. Log Out / Muuta )

Twitter-kuva

Olet kommentoimassa Twitter -tilin nimissä. Log Out / Muuta )

Facebook-kuva

Olet kommentoimassa Facebook -tilin nimissä. Log Out / Muuta )

Google+ photo

Olet kommentoimassa Google+ -tilin nimissä. Log Out / Muuta )

Muodostetaan yhteyttä palveluun %s