Introduktionskurs: Webbapplikationer i inbyggda system (IoT)
Introduktionskurs: Webbapplikationer i inbyggda system (IoT)
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.
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.
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.
Re: Introduktionskurs: Webbapplikationer i inbyggda system (
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?
* Läsa digitala utgångar , för det är väl ingångar?
Re: Introduktionskurs: Webbapplikationer i inbyggda system (
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.
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:
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.
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.
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:/home/<användare>/Program/openjdk-8
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:1. cd /etc
2. nano profile
Hur som helst. I /etc/profile ska ni tillägga följande längst ned:sudo apt-get install nano
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.export JAVA_HOME="/home/<användare>/Program/openjdk-8"
export PATH=$JAVA_HOME/bin:$PATH
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.
Re: Introduktionskurs: Webbapplikationer i inbyggda system (
Skrev fel. Korrigerar.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?
Re: Introduktionskurs: Webbapplikationer i inbyggda system (
Har alla installerat färdigt? Jag tänkte gå vidare i kursen
Re: Introduktionskurs: Webbapplikationer i inbyggda system (
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..."
Typo hunt, part II: "OpenJDK 8 är även snart utgående..."
Re: Introduktionskurs: Webbapplikationer i inbyggda system (
> 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?
Varför vänta? Var och en kan ju ta stegen i valfri takt.
Eller tänkte du plocka bort något?
Re: Introduktionskurs: Webbapplikationer i inbyggda system (
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.
Re: Introduktionskurs: Webbapplikationer i inbyggda system (
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#.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..."
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.
Re: Introduktionskurs: Webbapplikationer i inbyggda system (
Jag tänkte bara att jag vill ha med alla på tåget. Sådant får ta sin tid.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.
Re: Introduktionskurs: Webbapplikationer i inbyggda system (
Varför då?Al_Bundy skrev: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#.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..."
Re: Introduktionskurs: Webbapplikationer i inbyggda system (
beror inte det på vad man ska göra?
definiera gärna "seriösa"...
definiera gärna "seriösa"...
Re: Introduktionskurs: Webbapplikationer i inbyggda system (
Grafikdrivrutiner, vissa spel som kräver enorm prestanda t.ex. Unity 3D.svanted skrev:beror inte det på vad man ska göra?
definiera gärna "seriösa"...
C++ används endast när man vill:Shimonu skrev:Varför då?Al_Bundy skrev: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#.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..."
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.
Re: Introduktionskurs: Webbapplikationer i inbyggda system (
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.
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.
Re: Introduktionskurs: Webbapplikationer i inbyggda system (
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:
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.
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:
Om du undrar vad du har för enhet på ditt MicroSD så skriv följande:dd if=RasbianFilen.img of=/dev/MicroSD
Då kommer du hitta ditt MicroSD kort. Exempelvis hittar du följande:sudo fdisk -l
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
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.