Introduktionskurs: Webbapplikationer i inbyggda system (IoT)

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Introduktionskurs: Webbapplikationer i inbyggda system (IoT)

Inlägg av Al_Bundy »

Hej allihopa!

Jag tänkte säga att jag tänker använda denna tråd för att lära ut hur man skapar webbapplikationer för inbyggda system. Plattformen vi kommer hålla oss till är Raspberry, men har ni exempelvis någon annan plattform som stöds så fungerar det lika bra. Helst en snabb Raspberry. Själv kör jag en Raspberry B+, vilket fungerar bra om man inte belastar den så mycket. Plattformar som stöds kan ni hitta på http://www.Pi4J.com i vänstra hörnet.

Webbapplikationerna kommer utvecklas med Eclipse IDE för vi kommer använda oss utav Java EE (Enterprise Edition), vilket är Oracle's guldkant. I Java EE så finns det något som heter Java Server Faces. Java Server Faces är ett enkelt bibliotek för att skapa webbapplikationer i .xhtml format. Java Server Faces är det näst populära biblioteket för att skapa webbapplikationer i Java. Populäraste är ramverket Spring, men problemet med Spring är att det är tungkört och svårt att komma igång till skillnad från Java Server Faces som är ett lättviktigt bibliotek.

Tillsammans med Java Server Faces så skall vi använda utav Primefaces. Primefaces är ett extrabibliotek för Java Server Faces. Primefaces är det populäraste bibliotek av alla *faces bibliotek så som Openfaces eller Icefaces med mera. Primefaces bygger på att allt ska vara färdigt och enkelt att använda. Bästa med Primefaces är att dem erbjuder hög support och exempelmallar för varje komponent att använda. Primefaces använder sig också utav Ajax, vilket underlättar och gör dynamiska sidor mycket smidiga.

Webbapplikationernas mål är att kunna styra GPIO pinnar. För att styra GPIO pinnar så krävs två bibliotek. Pi4J för att tala med WiringPi och WiringPi för att C-kod ska kunna tala med GPIO pinnarna. Mellan Pi4J och WiringPI finns det något som heter Java JNA som är Java's funktion att Javakod ska kunna tala med C kod på ett enkelt och professionellt sätt. Konkurrenten till Pi4J är bland annat Java ME (Micro Edition) från Oracle. Det är en nedskalad variant utav Java SE (Second Edition) för att kunna styra olika typer utav enkortsdatorer. Problemet med Java ME är att den saknar god support och är mycket svår att använda för den bygger på samma utvecklingsteknik programmerare använder när de programmerade applikationer för mobiltelefoner innan 2008, även kallat Java Midlets. Java ME är mer optimerad jämfört med Pi4J, men istället så har Pi4J smartare funktioner som Java ME saknar. Dessutom så går det inte kombinera Java ME och Java EE. Så här passar Pi4J utmärkt om man ska bygga väderstationer, kaffeautomater, övervakningar, hembryggare, hemautomation med mera.

Efter avslut på denna kurs så ska man kunna:

* Sätter upp ett projekt i Eclipse
* Skapa webbapplikationer
* Styra digitala utgångar
* Läsa digitala ingångar
* Använda sig utav SPI
* Använda sig utav i²c

I denna kurs så krävs följande mjukvara:

* Eclipse SimRel
* Pi4J
* Java EE
* Primefaces
* WiringPi
* Raspbian
* Tomcat

I denna kurs så skrävs följande hårdvara:

* Raspberry Pi eller liknande enkortsdator som stödjs av Pi4J
* MCP3008 analog- till digitalkonverterare
* MCP23017 I/O-expanderare
* MCP9700A temperaturgivare
* LED lampa
* Knapp
* Kopplingsdäck
* Elkablar

Jag kommer använda mig utav Ubuntu Linux när jag utvecklar i Eclipse, Men Windows eller macOS fungerar lika bra.
Det är fritt fram och ställa frågor om någon undrar. Jag ser hellre att den blir en bra diskussion så vi alla kan lära oss från varandra.
Efter kursen är slut så hoppas jag verkligen att tråden lever vidare så fler och läsa den och lära sig hur man skapar webbapplikationer som
styr GPIO pinnar. Det är ett riktigt stort kliv in i IoT-världen.
Selection_001.png
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Senast redigerad av Al_Bundy 10 november 2018, 21:03:13, redigerad totalt 4 gånger.
Användarvisningsbild
rvl
Inlägg: 5775
Blev medlem: 5 april 2016, 14:58:53
Ort: Helsingfors

Re: Introduktionskurs: Webbapplikationer i inbyggda system (

Inlägg av rvl »

Sätter ett märke i tråden. Det blev typo här:
* Läsa digitala utgångar , för det är väl ingångar?
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Introduktionskurs: Webbapplikationer i inbyggda system (

Inlägg av Al_Bundy »

Lektion 1: Installation utav Eclipse

Nu tänkte jag att vi ska installera Eclipse. Det vi börjar med är att gå till Ecplises hemsida och laddar ner den senaste versionen utav Eclipse. Eclipse är standard när det kommer till utveckling inom Java. Det finns tre populära IDE's som används för Java och det är:

* Eclipse - Trygg, tråkig, seg men robust och följer standarden
* Intellij - Modern, snabb med kostar pengar och följer inte standarden
* NetBeans - Omodern, buggig, anpassad för Java ME och följer standarden

Det självklara valet är Eclipse för den är den mest naturliga när det kommer till utveckling utav Java EE. Jag har Linux så jag väljer att ladda ned tarball versionen utav Eclipse. Ni kan ladda ner Eclipse här: https://www.eclipse.org/

Medan ni laddar ned Eclipse så tänkte jag passa på att ni ska få installera OpenJDK 8. OpenJDK 8 är den senaste som stödjer ARM processorer. OpenJDK 8 är även snart utgående och tappar supporten vid Januari 2019. Men tids nog så kommer OpenJDK 11 att få stöd till ARM processorer. Bakgrunden är att Oracle har valt att lägga ut Java på en öppna källkodssidan och börjar nu ta betalt för OracleJDK, som erbjuder uppdateringar. Resultatet blev att en grupp vid namn AdoptOpenJDK tog hand om OpenJDK och utvecklar nu stöd för ARM. Så tids nog så kommer AdoptOpenJDK att erbjuda support för ARM processorer när det kommer till senaste OpenJDK. Enligt utvecklarna själva så finns redan support för OpenJDK 11 för ARM 64-bit, men jag har ingen Raspberry Pi med ARM 64-bit, endast 32-bit.

Gruppen finns här https://adoptopenjdk.net/ och dem finns även på GitHub https://github.com/AdoptOpenJDK

Hur som helst. OpenJDK 8 laddar ni ned här:
http://jdk.java.net/8/

För Linux användare så måste ni ladda ned 32-bit eller 64-bit versionen av tarball filen. Efter ni har laddad ned den så paketerar ni upp den och lägger den på t.ex.
/home/<användare>/Program/openjdk-8
Efter ni har packat upp tarballfilen så ska ni gå in i följande för att sätta JAVA_HOME. Skriv följande när ni är rootanvändare:
1. cd /etc
2. nano profile
Ni kan använda godtycklig textredigerare istället för nano. Har ni inte nano, men önskas och ni kör Ubuntu, vilket många gör, så kan ni installera nano via:
sudo apt-get install nano
Hur som helst. I /etc/profile ska ni tillägga följande längst ned:
export JAVA_HOME="/home/<användare>/Program/openjdk-8"
export PATH=$JAVA_HOME/bin:$PATH
Spara med CTRL-X och vid förfrågan om sparning så tryck Y och sedan Enter. Antingen så startar ni om din dator eller så loggar ni ut och in igen.
Efter detta är klart så ska det se ut så här i terminalen i Linux eller MS-DOS promt i Windows när ni efterfrågar vilken verison av Java ni kör:
asus@asus-X551MA:~$ java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-8u181-b13-1ubuntu0.18.04.1-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
asus@asus-X551MA:~$

Om detta är så här så är allt fint.
Då är det dags att installera Eclipse. För linuxnavändare så packar ni upp Eclipse tarballfilen och kör installationen. Då SKALL ni välja Java EE for Web Developers. Installera vart du vill. För Windowsnavändare så är det vanlig wizard-installation som gäller.
Senast redigerad av Al_Bundy 6 november 2018, 20:19:41, redigerad totalt 3 gånger.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Introduktionskurs: Webbapplikationer i inbyggda system (

Inlägg av Al_Bundy »

rvl skrev:Sätter ett märke i tråden. Det blev typo här:
* Läsa digitala utgångar , för det är väl ingångar?
Skrev fel. Korrigerar.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Introduktionskurs: Webbapplikationer i inbyggda system (

Inlägg av Al_Bundy »

Har alla installerat färdigt? Jag tänkte gå vidare i kursen :)
Användarvisningsbild
rvl
Inlägg: 5775
Blev medlem: 5 april 2016, 14:58:53
Ort: Helsingfors

Re: Introduktionskurs: Webbapplikationer i inbyggda system (

Inlägg av rvl »

De flesta har väl anmält sitt intresse mer eller mindre "på åskådarplats". Håller som bäst på att försöka lära mig en blandning av Qt och C++ litet bättre, så har inte riktigt resurser för aktivt deltagande just nu.

Typo hunt, part II: "OpenJDK 8 är även snart utgående..."
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43176
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Introduktionskurs: Webbapplikationer i inbyggda system (

Inlägg av sodjan »

> Har alla installerat färdigt?

Varför vänta? Var och en kan ju ta stegen i valfri takt.
Eller tänkte du plocka bort något?
Användarvisningsbild
rvl
Inlägg: 5775
Blev medlem: 5 april 2016, 14:58:53
Ort: Helsingfors

Re: Introduktionskurs: Webbapplikationer i inbyggda system (

Inlägg av rvl »

Ja det är väl en av de stora fördelarna med onlinematerial att var och en kan gå i sin takt. Men visst, det kanske finns en viss poäng i att flera skulle vara i ungefär samma takt, för en mer givande diskussion.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Introduktionskurs: Webbapplikationer i inbyggda system (

Inlägg av Al_Bundy »

rvl skrev:De flesta har väl anmält sitt intresse mer eller mindre "på åskådarplats". Håller som bäst på att försöka lära mig en blandning av Qt och C++ litet bättre, så har inte riktigt resurser för aktivt deltagande just nu.

Typo hunt, part II: "OpenJDK 8 är även snart utgående..."
Glöm C++! Ska du göra seriösa saker så använd högre nivå språk så som Python eller Java eller C#.

Ja! OpenJDK 8 är gammalt, men ändå det som senaste som officiellt stöds av ARM. OpenJDK 8 är dock buggfritt då det har varit med om ett tag. Några år typ.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Introduktionskurs: Webbapplikationer i inbyggda system (

Inlägg av Al_Bundy »

rvl skrev:Ja det är väl en av de stora fördelarna med onlinematerial att var och en kan gå i sin takt. Men visst, det kanske finns en viss poäng i att flera skulle vara i ungefär samma takt, för en mer givande diskussion.
Jag tänkte bara att jag vill ha med alla på tåget. Sådant får ta sin tid. :)
Shimonu
Inlägg: 294
Blev medlem: 21 oktober 2015, 22:44:33

Re: Introduktionskurs: Webbapplikationer i inbyggda system (

Inlägg av Shimonu »

Al_Bundy skrev:
rvl skrev:De flesta har väl anmält sitt intresse mer eller mindre "på åskådarplats". Håller som bäst på att försöka lära mig en blandning av Qt och C++ litet bättre, så har inte riktigt resurser för aktivt deltagande just nu.

Typo hunt, part II: "OpenJDK 8 är även snart utgående..."
Glöm C++! Ska du göra seriösa saker så använd högre nivå språk så som Python eller Java eller C#.
Varför då?
svanted
Inlägg: 5082
Blev medlem: 30 augusti 2010, 21:20:38
Ort: Umeå

Re: Introduktionskurs: Webbapplikationer i inbyggda system (

Inlägg av svanted »

beror inte det på vad man ska göra? :oops:
definiera gärna "seriösa"...
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Introduktionskurs: Webbapplikationer i inbyggda system (

Inlägg av Al_Bundy »

svanted skrev:beror inte det på vad man ska göra? :oops:
definiera gärna "seriösa"...
Grafikdrivrutiner, vissa spel som kräver enorm prestanda t.ex. Unity 3D.
Shimonu skrev:
Al_Bundy skrev:
rvl skrev:De flesta har väl anmält sitt intresse mer eller mindre "på åskådarplats". Håller som bäst på att försöka lära mig en blandning av Qt och C++ litet bättre, så har inte riktigt resurser för aktivt deltagande just nu.

Typo hunt, part II: "OpenJDK 8 är även snart utgående..."
Glöm C++! Ska du göra seriösa saker så använd högre nivå språk så som Python eller Java eller C#.
Varför då?
C++ används endast när man vill:

1. Ha prestanda
2. Ha objektorientering

I dessa fall betyder det att man t.ex. vill utveckla grafikdrivrutiner. C++ finns idag då mycket under 2000-talet skrevs i C++. Hade Microsoft skapat Word så hade dem garanterat skrivit det i C# av just tidssparning. Det kostar att byta språk från C++ till C#. Men tids nog så kommer de flesta stora program att gå över till plattformsberoende programmeringsspråk.
Kulla
Inlägg: 1266
Blev medlem: 7 januari 2010, 10:06:11
Ort: Sandared
Kontakt:

Re: Introduktionskurs: Webbapplikationer i inbyggda system (

Inlägg av Kulla »

Seriösa?

Därför vi har varje spel skriven i Java och varje operativsystem är skriven i Java med. Varje drivrutin som finns är gjort i C++ (eller C).

Du har 0 koll på saker och ting eller du är klassiskt troll. C++ kan inte bytas mot C# om du kör inte windows och vill ha .NET framework för att ens kunna köra C# program.

:roll:
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Introduktionskurs: Webbapplikationer i inbyggda system (

Inlägg av Al_Bundy »

Lektion 2: Installera Raspbian

Nu tänkte jag att vi skulle installera Raspbian Linux. Raspbian Linux är ett optimerat debbaserat linuxoperativsystem för Raspberry Pi och alla andra "Pi"-liknande datorer.

Börja med att ladda ner iso-filen via torrent eller .zip https://www.raspberrypi.org/downloads/raspbian/
Här väljer vi skrivbordsversionen.

När vi har IMG filen så ska vi bränna över den till en MicroSD kort. I linux kan man enkelt göra det via kommandot:
dd if=RasbianFilen.img of=/dev/MicroSD
Om du undrar vad du har för enhet på ditt MicroSD så skriv följande:
sudo fdisk -l
Då kommer du hitta ditt MicroSD kort. Exempelvis hittar du följande:

Kod: Markera allt

Disk /dev/loop18: 14,5 MiB, 15204352 byte, 29696 sektorer
Enheter: sektorer av 1 * 512 = 512 byte
Sektorstorlek (logisk/fysisk): 512 byte / 512 byte
I/O-storlek (minsta/optimal): 512 byte / 512 byte
Där loop18 kan vara ditt MicroSD kort. I detta fall är det inte det med tanke på hur liten loop18 är. Men det är bara söka.

Efter ni har bränt över IMG filen till SD-kortet så är det bara att trycka in det i din enkortsdator och köra igång.

För dig som kör Windows kan ladda ned Win32DiskImager från http://sourceforge.net/projects/win32diskimager/
Då pekar du på ditt SD-kort och sedan på IMG-filen och bränner över den till SD-kortet. Klart.
Skriv svar