Embedded-programmering

Ett fancy ord som jag läst många gånger, men egentligen inte funderat på så mycket vad det innebär. Så vad är det?

Ett gammalt projekt med en arduino-bil som kunde köras från en app i min android-telefon. Arduino-delen är en sorts embedded-programmering. Appen som gjordes i Unity (C#) räknas inte till embedded-programmering.

I princip är det att programmera en delfunktion i en apparat. T.ex. programmera tvättmaskinens knappfunktioner och hur det påverkar själva processen. Alltså apparater som inte har ett vedertaget operativsystem så att säga – dvs, det är inte mobiltelefoner, laptops och så vidare.

Det här uttrycket var något som låg på min lista ”uttryck och begrepp att kolla upp och förstå” och bara för någon vecka sedan så kikade jag faktiskt upp det. Hade jag gått en ren programmeringsutbildning hade det kanske varit solklart för längesedan, men det är väl sådana här saker man missar som självlärd.

Iallafall, jag har konstaterat att jag är en embedded-programmare. Att programmera en PLC är en, ganska specialiserad och nischad, typ av embedded-programmering. En maskin som styrs via en styrpulpet med fysiska knappar kan ju faktiskt liknas vid en tvättmaskin. Inte konstigare än så, egentligen.

En annan typ av embedded-programmering är om man programmerar en arduino – här har du också ett gränssnitt mot den fysiska världen och det vanliga är att man ansluter fysiska tryckknappar eller olika sorters givare som startar en funktion.

Förra helgen så rotade jag fram min arduino då jag hade fått en fråga om jag hade någon erfarenhet av .NET-programmering i C#, vilket jag inte hade, och behövde då ett projekt för att kunna säga att jag faktiskt använt .NET. Mitt mål var att skapa ett program som kunde köras i Windows 10 och ta emot ett mätvärde från arduinon.

Arduino programmeras via en USB-kabel som ju är en seriell kommunikation och det inbyggda kommunikationssättet. Jag har några wifi- och blåtandsmoduler jag skulle kunna använda, men de kräver lite mer hårdvara; motstånd för att få rätt signalnivåer (från 5V till 3.3VDC) vilket också då kräver lödning och en arbetsyta, vilket inte är optimalt i mitt nyrenoverade hemmakontor med heltäckningsmatta osv. Iallafall, att kunna kommunicera seriellt utnyttjar serieportar (COM-portar) och för att komma åt denna i C# får man i .NET-api:n nyttja System.IO.Ports och sedan ”SerialPort”-classen.

Tänkt och gjort, så lyckades jag faktiskt på bara någon timme skapa ett C#-konsollprogram som både läser ut mätvärdet men också loggar det till en textfil.

Videoexempel på denna snurra som använder en temperatur- och luftfuktighetsgivare vars mätvärde presenteras live samt loggas med datumtidstämpel.

Sedan har jag under veckan försökt ta mig tid att skapa ett grafiskt interface samt att från C#-programmet kunna skicka kommandon till arduino som den också reagerar på. Det allra enklaste är att skicka tillbaka det man skickat så att säga. För detta behövde jag för första gången utforska Window Forms i Visual Studio, som blir som ett grafiskt layout-program med kopplingar till bakomliggande C#.

Här sköts grundläggande kommunikationsparametrar. Två rutor för inkommande meddelanden. Den vänsta är en textbox som bara visar det senaste meddelandet och den högra, en combobox, visar det senaste plus tidigare meddelanden. Nere till vänster matar jag in och skickar meddelande till arduino.

En sån här lösning skulle i princip kunna vara grunden till ”smarta hem funktioner” eller liknande. Troligtvis skulle själva C#-delen här fungera lika bra om jag hade haft wifi eller blåtandsmodul som skickade, också seriell kommunikation, via blåtand eller wifimodulerna jag nämnde tidigare. Med ett litet batteripack till arduinon så skulle jag således ganska snart kunna ha trådlösa givare som skickar över data till min Win10-maskin.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *