Johdanto laiteläheiseen ohjelmointiin


Motto: Kun ohjelmoinnin perusteet on opittu Python-kielellä, on aika opiskella laiteläheistä ohjelmointia ja tavoitteena ennemmin tai myöhemmin olla IoT-Guru. Guru osaa monia kieliä.

Kun tietää mistä tullaan,
niin ymmärtää missä ollaan,
ja voi suunnitella minne mennään.

Unixin historia alkaa 1969 Bellin laboratoriossa USAssa. Bell Labs on puhelinyhtiö AT&T:n organisaatio, jossa on kehitetty mm. transistori, laser, Unix-käyttöjärjestelmä ja C-ohjelmointikieli. Siitä tuli yrityskaupan myötä osa Nokiaa (kevät 2015).

Ken Thompson kirjoitti assembly-kielellä Unixin ensimmäisen version. Yhdessä Dennis Ritchien kanssa he suunnittelivat minkälaisia laitteita Unix-koneeseen tulisi liittää ja minkälaisia ohjelma-ajureita ne tarvitsevat. Seuraavina vuosina he kehittelivät työkaluksi käyttöjärjestelmän koodaamista helpottamaan C-kielen. Ensimmäisen version julkistus oli vuonna 1972 ja ANSI-standardi siitä tuli 1989 ja C11-versio 2011.

Unix annettiin yliopistojen käyttöön ilmaiseksi ja ne puolestaan lähtivät kehittämään ideaa eteenpäin. Tässä yksi syy miksi Unixeja on useita eri versioita vielä tänäänkin. AT&T huomasi pian, että käyttöjärjestelmän myynnillä voisi tehdä rahaa. Valitettavasti kallis hinta rajoitti käytön vain suuryrityksiin ja yliopistoihin. Mutta eihän tuohon aikaan muilla tietokoneita ollutkaan.



Tuli vuosi 1971 ja kaikki muuttui. Tuolloin vielä hyvin pieni Intel-yhtiö kehitti mikroprosessorin. Siitä alkoi tietoyhteiskunnan kehitys. Syntyivät mm. IBM-PC, Apple, ARM, Microsoft...

GNU
Samoihin aikoihin MITin (Massachusetts Institute of Techology, USA) yliopistossa työskenteli nuorukainen nimeltä Richard Stallman.

Hän oli opiskeluaikoinaan oppinut, että tietokoneohjelmat ovat ilmaisia ja sille aatteelle hän pyhitti koko loppuelämänsä. Ajatuksensa tueksi hän perusti 1983 GNU-projektin. (GNU, rekursiivinen akronyymi ”GNU’s Not Unix”, suom. GNU ei ole Unix). Projektin kunnianhimoinen tavoite oli kehittää ilmainen Unixin korvaavaa käyttöjärjestelmä.

Työhön tarvittiin:
** C-kääntäjä ja muita työkaluohjelmia
** teksti-editori, jolla kirjoitetaan lähdekoodi
** käyttöjärjestelmän ydin eli kernel
** käyttöjärjestelmän tiedostojärjestelmä ohjelmien ja tietojen tallennukseen

Vuonna 1990 kaikki muu oli valmiina, mutta kernel puuttui. Sen työstö aloitettiin, mutta valmista vaan ei tullut.

Linus Torvalds opiskeli 1990-luvun alussa Helsingin yliopistossa tietotekniikkaa.
Käyttöjärjestelmän rakennetta ja toimintaa opiskeltiin professori Andrew S.Tanenbaumin kirjoittamalla Unixin minikloonilla Minix. Minixin ylivoimaisena etuna opiskelussa oli se, että ohjelma toimi IBM-PC-koneissa ja sen klooneissa.

GNU/Linux
Linus Torvalds kehitti oman version Unix-kernelistä ja ohjelman alkio pantiin ilmaiseen jakeluun Helsingin yliopiston palvelimelle nimellä Linux. Nimen keksi työkaveri. Internetin myötävaikutuksella mukaan kehitystyöhön tulivat hakkeri-gurujen lisäksi kaikki suurimmat globaalit IT-yritykset. Kun homma vaan laajeni, piti kehitystyötä koordinoimaan perustaa Linux Foundation-säätiö vuonna 2000 ja vetovastuuseen kutsuttiin Suomesta ilmiön alkuunpanija.


Hankkeen rahoituksesta vastaavat säätiön jäsenet. Eniten (500'000$) maksavat ns. platinum-jäsenyyden hankkineet:
AT&T, Cisco, Fujitsu, Hitachi, IBM, Intel, NEC, Microsoft, Oracle, Qualcomm, Samsung, WMWare ja Huawei.
Vuodesta 2005 lähtien Linuxin tekemiseen on osallistunut yli 8000 koodaajaa. Heille maksoi palkkaa yli 800 yritystä, joukossa mm. Microsoft. Että semmosia "harrastelijoita". Tätä kirjoitettaessa (elokuu 2016) aktiivisia kehittäjiä on noin 1600. Neljä viidestä työskentelee jossakin yrityksessä eli saa työstään palkkaa.

 

Voiko ilmaisella Linuxilla tehdä rahaa?

Amerikkalainen Marc Ewing käytti punaista hattua opiskellessaan yliopistossa tietotekniikkaa. Opintojen päätyttyä 1990-luvun alussa hän perusti yhdessä Bob Youngin kanssa ohjelmistoyrityksen
ja antoivat sille nimeksi Red Hat.

He tekivät oman Linux-distron (jakeluversion) ja alkoivat jakaa sitä, ilmaiseksi. Vuonna 2011 firman liikevaihto ylitti 1'000'000'000 dollaria, siis tuhat miljoonaa taalaa, siis miljardi taalaa. Vuonna, 2016, ylittyi kaksi miljardia!

Raspberry Pi
Englantilaiset olivat huolissaan kun kukaan nuori ei harrastanut enää ohjelmointia, kaikki vaan pelailivat. Siksi Cambridgen yliopiston yhteyteen perustettiin säätiö joka alkoi suunnitella pientä ja halpaa korttitietokonetta jonka avulla peruskouluikäiset voisivat aloittaa ohjelmoinnnin opiskelun.


Yhteistyön tuloksena syntyi Raspberry Pi, joka on pankkikortin kokoinen ihan oikea tietokone. Hinta 35 $, kotiin tuotuna. Kun ensimmäiset kortit tilattiin Kiinasta 2011, niin projektin vetäjät arvelivat, jos edes muutama tuhat konetta saataisiin opetuskäyttöön, niin kaikki olisi OK. Toukokuussa 2017 RaspberryPi-tietokoneita on myyty jo yli 12,5 miljooonaa kappaletta. Opiskelun lisäksi sitä käytetään mitä ihmeellisimmissä sovelluksissa kautta maapallon. Oheislaitteista on noussut uusi teollisuuden ala. Osaajat tekevät omiaan.

RasPissa toimii siis ihan oikea GNU/Linux-käyttöjärjestelmä (jopa Windows), se vaan asennetaan kiintolevyn sijasta SD-muistikortille. Tekniikkaa edustaa ”aivoina toimiva” ARM mikro-ohjain (sama jota käytetään kännyköissä), pari USB-liitintä, RJ45-nettiliitin, kameraliitäntä, HDMI-video- ja äänilähdöt ja vielä 40-pinninen Input/Output-liitäntä ulkoisten laitteiden liittämiseen (siksi soveltuu mainiosti elektroniikan opiskeluun). Jopa graafinen käyttöliityntä, GUI, toimii.

Parasta on kortin ympärille kasvanut maailmanlaajuinen yhteisö joka luo opiskeluun materiaalia ja laiteideoita kiihtyvällä vauhdilla. Osa on vanhojen Linux-konkarien kehittämää, osa tulee yliopistomaailmasta.

Mitä on IoT eli Teollinen Internet eli Internet of Things
”Netti jossa laitteet vaihtavat tietoja keskenään”

"Teollisella internetillä (The Internet of Things, lyhyemmin IoT) tarkoitetaan internet-verkon laajentumista laitteisiin ja koneisiin, joita voidaan ohjata, mitata ja sensoroida internet verkon yli.
Teollisessa internetissä on kyse fyysisistä laitteista, jotka pystyvät aistimaan ympäristöään ja viestimään tai toimimaan aistimansa perusteella älykkäästi.
Tähän tarvitaan antureita, ohjelmistoja sekä tietoliikenneyhteys, jolloin sensorit, koneet, prosessit ja palvelut tuottavat jatkuvasti tietoa, jota jalostamalla voidaan mm. ennakoida ja automatisoida työvaiheita".
https://fi.wikipedia.org/wiki/Teollinen_internet

Sulautettu järjestelmä
Teollinen internet tarkoittaa sulautettujen järjestelmien yhdistämistä internettiin ja niistä saatavan tiedon hyödyntämistä liiketoiminnassa.
Sulautetulla järjestelmällä tarkoitetaan laitetta jossa tietokone (mikro-ohjain) ja ohjelmistot ovat ikäänkuin upotettu jonkin laitteen sisään antamaan tuolle laitteelle lisäominaisuuksia. Mikro-ohjain puolestaan on integroitu piiri, johon on pakattu sekä mikroprosessori että ohjelma- ja datamuistit samaan pakettiin.

Sulautettujen järjestelmien merkitys arkielämässämme kasvaa päivä päivältä, vaikka aina emme sitä itse edes huomaa. Kuka tulee ajatelleeksi tv:n kanavia vaihtaessaan, rahaa pankkiautomaatista nostaessaan tai autolla ajaessaan, että samalla käyttää tietokonetta. Oikeastaan useaa mikrotietokonetta. Sulautettu järjestelmä on reaktiivinen, ts. se odottelee jotain tapahtuvan. Kun tapahtuma on havaittu, esim. lämpötila on tietyllä tasolla, ovi on auki/kiinni, tms, ryhdytään töihin.

Ohjelmointi
Tärkeää on ymmärtää heti aluksi, että ohjelmoinnin oppiminen on eri asia, kuin ohjelmointikielen oppiminen.
Ohjelmointitaito ei riipu kielestä. Se on taito ymmärtää miten yksinkertaisia, mutta selkeästi määriteltyjä käskyjä yhdistämällä tehdään (joskus hyvinkin) monimutkaisia asioita. Ohjelmointitaito kehittyy vasta kokemuksen ja kokeneitten myötävaikutuksella. Ohjelmointikielen oppiminen on helpompaa.

Mitä on laiteläheinen ohjelmointi?
Jotta nettiin kytkettävästä laitteesta saadaan älykäs, tarvitaan siihen tietokone, ympäristöä aistivia antureita ja toimilaitteita, ohjelmistoja ja vielä tietoliikenneyhteys, jolla välitetään kerätty data eteenpäin jatkojalostusta varten. Jos halutaan ohjailla teollisuuden prosesseja, saada kulunvalvontatietoja mökin pihamaalta, ilmoituksen kartanon vesivahingosta tai varkaiden hiippailusta, silloinkin tarvitaan tietokone ja siihen monenlaista oheiselektroniikkaa.
Kun haluat tarkkailla ja ohjata vaikkapa kasvihuoneen lämpötilaa, kosteutta, ym, tarvitaan sulautetun järjestelmän tietokone ja siihen ohjelma. Laiteläheinen ohjelma. Tietokone ei toimi ilman ohjelmaa.

Ensimmäisen opittavan ohjelmointikielen valintakriteeri
Ohjelmointikieli on väline jolla ihminen kertoo tietokoneelle, mitä sen tulee tehdä. Ohjelmointikieliä on kehitelty vuosien varrella tusinoittain periaatteella: joka työhön oma kieli.

Ensimmäisen opiskeltavan kielen valinnasta on kiistelty yhtä kauan. Turhaan. Se on Python. Koska helpoin oppia. Muut kielet ovat sen jälkeen yhtä helppoja.

Laiteläheisen ohjelmointikielen valintakriteerejä
Meillä on selvä ajatus, joka on IoT, Internet of Things, laitteiden internet. Ihmiset ovat jo netissä, nyt sinne ovat menossa laitteet. Se edellyttää laiteläheistä ohjelmointia. Siksi haluamme oppia tekemään laiteläheistä koodia.

Valittavan laiteläheisen kielen tulee olla ”lähellä ohjelmoijaa”:
* ohjelmoijan kannalta sen tulee olla ikään kuin oikea ihmisen kommunikaatioonsa käyttämä kieli.
Valittavan laiteläheisen kielen tulee olla ”lähellä konetta ja nettiä”:
* kielen tulee taipua manipuloimaan antureiden ja muiden oheislaitteiden ohjausrekisterien sisältöä bittitasolla.
Lisää syitä.
* Tärkeintä: opiskeltavat kielet ja niihin työkalut on valittava niin, että niille on käyttöä myöhemminkin kun jatketaan ammattilaisina.
* Toinen kriteeri: ohjelmointityökalujen tulee olla ilmaisia, löytyä netistä ja niillä tulee olla laaja käyttäjäkunta joka takaa työkalujen kehityksen jatkuvuuden.

Laiteläheinen on nettiläheinen
Sulautetun järjestelmän ohjelman tekeminen alkaa lähdekoodin kirjoittamisella. Puhtaan konekoodin (se jota mikroprosessori ymmärtää) kirjoittaminen on kovin työlästä. Erilaisilla ”korkean tason” ohjelmointikielillä se sujuu paljon helpommin. Näillä kielillä kirjoitetut koodit on muunnettava CPU:n ymmärtämään muotoon konekieleksi joko kääntäjä- tai tulkki-ohjelmilla.

Miksi ohjelmointikieli C/C++ ?
Laiteläheiset ohjelmat on perinteisesti kehitetty C-kielellä. Se on lähes yhtä tehokas ja laiteläheinen kuin assembly-kieli mutta paljon helpompi oppia. Kun opit ohjelmoinnin idean ja ohjelman perusrakenteet Pythonin peruskurssin avulla, niin uusien kielien oppiminen on matalan kynnyksen takana. Perusideoitten oppimisen jälkeen syvällisemmälle opille on saatu tartuntapintaa. Joten, seuraava kieli opittavaksi voisi olla laiteläheinen C-kieli, joka on C++ kielen osajoukko. Vaikka kieli on vanha, se on yhä laajalti koodiammattilaisten käytössä.
Mm Unix- ja Linux-käyttöjärjestelmät on koodattu pääosin C-kielellä. C-kieli täyttää kriteerimme, sen syntaksi on sekä ”lähellä ihmistä” että ”lähellä konetta”. Siinä on käskyjä, jotka ovat ihmiskielen kaltaisia, siis helppoja oppia ja toisaalta käskyjä, joilla voidaan manipuloida koodia bittitasolla. Bittitasolla kirjoitetaan laiteläheistä koodia. Koodia, joilla kaikenmaailman laitteet liitetään yhteen, siis internettiin.

Miksi ohjelmointikieli on JavaScript/Nodejs?
Selaimelle lähetettävä JavaScript-koodi kirjoitetaan HTML-koodin kanssa suoraan web-sivuille (oikeastaan erilliseen tiedostoon), joten koodaamiseen tarvitaan vain tekstieditori. Sillä ohjelmoidaan liikettä web-sivuille ja ohjataan dataa talteen ja tarvittaessa takaisin ja edelleen web-sivuille.

Node.js on JavaScriptiä palvelimen/serverin päässä.
Node.js toimii kaikissa käyttöjärjestelmissä ja kaikissa koneissa, joissa se hoitelee tietovaraston (tietokanta) liikenteen web-sivustolle ja mikä tärkeintä, sillä voi ohjata ja valvoa tulo/lähtö- (Input/Output-) liitäntöjä ja oheislaitteita. Node.js kasvaa ja yleistyy vauhdilla koska se on standardoitu, tapahtuma-pohjainen ja monipuolisten kirjastojen ansiosta nopea koodata.


Miksi merkkauskieli on HTML?
HTML, HyperText Markup Language, merkkauskieli/kuvauskieli. Se määrittää web-sivun rakenteen ja sisällön, joten sillä teemme web-sivuja. Niitä taas tarvitaan kun toimilaitteita ohjataan ja valvotaan internetin/ethernetin/WLANin kautta.

Mitä vielä tarvitset?
Kiinnostusta, innostusta, motivaatiota. Joka kasvaa kunhan, alkuvalmistelujen jälkeen, varsinainen koodin kirjoittaminen alkaa.
Tottakai tarvitset oppia elektroniikasta, antureista, toimilaitteista. Niistä tietoa on netti täynnä.
PC ja sen käyttötaitoa Sinulta jo löytyykin, muuten et lukisi tätä. PC voi olla varsin vaatimatonkin, kunhan se mieluusti on GNU/Linux-kone.
Vielä tarvitset internet-yhteyden, jolla saat helposti yhteyden alan ammattilaisiin ja harrastajiin, joilta saa ideoita ja muuta apua tarvittaessa.
Internetistä löytyvät myös mallikoodit, komponenttien datatiedot ja paljon muuta.

Vielä jotain.
Rakennamme itse RaspberryPi-tietokoneeseen oheiselektroniikan, joilla liitämme sensorit/anturit, moottorit, ym RasPin GPIO-liitäntään. (GPIO-liitännästä lisää sen omassa dokumentissa). 
Itsellinen lukutaitoinen selviää yksinkin, varsinkin sellainen kaveri, jolla ei ole peukalo keskellä kämmentä ja looginen ajattelu toimii. Eikä innostus lopu ensimmäiseen ongelmaan.

Tartuntapintaa
Oppiminen on läpi elämän alati jatkuva prosessi, joten ensin kannattaa panostaa jatkuvuuden mahdollistavan kunnon kivijalan tekemiseen. Vain laajoista perustiedoista syntyy tartuntapintaa, johon uudet asiat voivat kiinnittyä. Tieto kun on kumulatiivista, kasautuvaa. Mitä paremmat pohjatiedot, sitä helpompaa on siihen kartuttaa uutta tietoa. Mikro-ohjaimen ohjelmoinnin ja siihen liittyvän elektroniikan opiskelu on kuin polkupyörällä ajoa, senkin oppii vain itse ajamalla.

Tulevaisuus
Tuskin kenenkään arjesta löytyy elektronista laitetta, jossa ei käytettäisi ohjelmoitavaa mikro-ohjainta. Tämä taas edellyttää laitteiden suunnitteluun ja valmistukseen mukaan lisää uusia ammattilaisia, nimittäin IoT-järjestelmien osaajia. On osattava sekä laitteiston toiminta, että sen ohjelmointi.

Työkalut kuten kielet, kääntäjät, editorit ynnä muu on valittu sitä silmällä pitäen, että samat välineet ovat ammattilaisten käytössä huomennakin. Ties mihin päästään ja mitä syntyy. Itsellinen opinhaluinen muuttaa tiedon osaamiseksi. Varsinkin kaveri, jolla on halu oppia jotain sellaista ”mitä Pat Boone ei pysty laulamaan”.

Yhteenveto
Suomi tarvitsee uusia PellePelottomia jotka uskaltavat ajatella vanhat asiat uudella tavalla. Kun separaattori pitää saada kiinni internettiin, niin liittämiseen tarvitaan tietokone, sille sopiva tietokoneohjelma ja rautaa eli liitäntäelektroniikkaa.

Ja pikkasen erilaista ajattelua.

said Steve J.

« Paluu pääsivulle

 

Päivitetty 05/2024
Jaa somessa:
Punomo Logo

Kirjaudu Punomoon

Ei vielä Punomo tiliä? Rekisteröidy alla

Punomo Logo

Anna palautetta

Käyttäjiemme palaute auttaa Punomon kehittämisessä. Anna palautetta alla.