Tag Archive | Raspberry Pi

GPS och Raspberry Pi (del 3)

Detta är som sagt den tredje delen i serien med Raspberry Pi (RPi) och GPS. I fösta delen kopplades GPS-modulen ihop med RPi:n via den inbyggda UART:en, och i andra delen användes en daemon för att läsa och koppla positionsinformation till Pythonkoden. I slutet av del två så hade jag en skräddarsydd GPS-logg som skrev data till en fil.

Jag har nu förfinat koden lite så att loggen döps automatiskt och skrivs till ett kopplat USB-minne i stället, vilket blir mer praktiskt än att behöva ta ur det lilla SD-kortet eller koppla upp nätverk och SSH hela tiden. Mitt python skript körs även automatiskt när RPi:n bootar. Allt detta är finesser som egentligen inte behövs för att lära sig något, men om det är många som vill ha en mer detaljerad redogörelse för hur detta gjordes så säg till så kanske det blir ett inlägg om detta specifikt.

I det här inlägget så kommer det dock att bli GPIO och lysdioder och knappar. Jag släpper GPS lite så att är du bara intresserad av GPIO funktionalitet med RPi, så behöver du inte stressläsa de tidigare två delarna.

Läs mer…

GPS och Raspberry Pi (del 2)

Har du inte läst gårdagens inlägg, så gör det inte så mycket. Där beskriver jag hur jag kopplar samman en GPS med en Raspberry Pi (RPi) till en seriell port via de inbyggda UART kretsarna.

Vill du göra motsvarande eller läsa om hur det gick till så skall du börja med det inlägget, men vill du bara veta hur du får in seriell GPS i Python (linux), då räcker det att hänga med här.

Läs mer…

GPS med Raspberry Pi

Jag har sedan en längre tid flera Raspberry Pi (RPi) och GPS moduler liggande, tillsammans med ett antal Arduinovarianter. Arduino har jag använt i flera projekt medan Raspberry Pi mest har blivit mediacenter kopplat till TVn. Jag gissar att det är så de flesta RPi:er tillbringar sin tid.

Nu tänkte jag då ge mig på den GPIO, eller General Purpous Input Output, stiftpanel som sitter på dessa och se hur svårt det är att använda RPi i kommande projekt.

Det kommer att bli mer än ett inlägg totalt, men om jag fyller ut hela veckan vet jag inte nu när jag börjar skriva. Hänger du med så kommer du förhoppningsvis att lära dig hur du ansluter en GPS-modul och interagerar med knappar och lysdioder, för att sedan själv skapa dina egna RPi projekt baserade på Python. Jag går inte in på detaljer i hur du ansluter via ssh, eller hur du redigerar filer i Linux, så detta bör du redan känna till, eller vara beredd på att googla lite.

I det här första inlägget så tänker jag se till att RPi:n förstår signalerna som kommer från GPS-modulen.

Läs mer…

Webbkartserver för 300 kr

Ja du behöver lite mer för att det skall fungera fullt ut, men mycket av detta kanske du redan har liggande.

raspberrypi

Till att börja med så behöver du en Raspberry Pi (Modell B), vilket är en liten men komplett dator. Det enda som egentligen behövs till är ett operativsystem och lite lagringsutrymme, vilket man löser genom ett vanligt SD-kort på några GB (jag använder ett på 4 GB). På bilden så syns min Raspberry Pi med en låda och en extra kabel som inte ingår när man köper datorn. Kabeln är bra om man vill bygga lite andra elektronikexperiment med olika kretskort, men för det här projektet så behövs den inte. En låda däremot kan vara bra men inte nödvändig.

Som alla datorer så måste man även ansluta till en skärm (HDMI) och mus/tangentbord (USB), samt en nätverksanslutning (vanlig nätverkskabel). ”Pajen” strömförsörjs med en mikro-USB kabel och den måste leverera minst 700 mA (helst 1 A). Det var det sista som var lite struligt för mig, så det slutade med att jag fick beställa en mikro-USB laddare för ändamålet.

Raspberry Pi säljs i princip överallt och om man använder någon av prisjämförelsesidorna så hittar man dem för under 300, men vanligt pris i butik är strax över 300 kronor.

Börja med att ladda hem operativsystemet från http://www.raspberrypi.org. Det finns flera att välja på och jag använder ”Raspbian” i den här instruktionen.

Filen man hämtar är packad och packas upp på vanligt sätt. Sedan behöver man skriva den *.img fil som blir resultatet av uppackningen till SD-kortet och här skiljer det sig beroende på operativsystem (sök efter ”Win32 Disk Imager” på Windows och ”PiWriter” på OS X). Här redogör jag för terminalkommandona i Linux, eftersom den beskrivna grafiska metoden inte fungerade för mig.

df -h
umount /dev/sdkort-namn_från_förra_kommandot
sudo dd bs=4M if=/sökväg/raspbian-avbildning.img of=/dev/sdkort-namn_från_första_kommandot
sync

Det första kommandot ovan listar alla enheter och partitioner där det gäller att hitta igen det anslutna SD-kortet. På min dator heter kortet ”/dev/mmcblk0”.

Kortet avmonteras med det andra kommandot och det tredje skriver diskavbildningen till kortet. Processen rensar kortet helt och det är mycket viktigt att man anger rätt sökväg, då man kan skriva över fel disk av misstag. Ingen vill väl bli av med sin primära linuxpartition.

Om det inte fungerar så kan man prova att ändra ”bs” till ”1M”, vilket kan fungera men tar betydligt längre tid.

Medan programmet kör så händer ingenting, men det är bara att vänta (för mig tog det ca 5 minuter). Om allt gick bra så kör man sista kommandot för att rensa cachen och göra det säkert att ta ut kortet.

Sätt in kortet i ”Pajen” och anslut skärm, tangentbord, nätverk och slutligen ström via mikro-USB.

pi3

Det kan ta några sekunder men sedan så bör det börja blinka lampor och text rulla på skärmen. Efter ett tag så kommer det upp en meny:

pi1

Här konfigurerar man grunderna i systemet och jag kör ettan för att använda hela SD-kortet, tvåan för att byta lösenord, trean för att bota till kommandoraden då jag inte behöver en skrivbordsmiljö och sedan går jag in i de avancerade inställningarna under åtta:

pi2

Här använder jag A2 för att bestämma vad servern skall heta (jag väljer ”piserver”) och sedan så kör jag A4 för att aktivera SSH så det går att komma åt servern från en annan dator och fjärrstyra den. Slutligen väljer jag ”Finish” och loggar in med användarnamnet ”Pi” och det valda lösenordet. Kör kommandot ”ifconfig” för att kontrollera IP-adressen och därefter ”sudo halt” för att stänga av servern så alla onödiga sladdar kan tas bort. När jag sedan återansluter strömmen så skall det bara vara nätverkskabeln kvar som är ansluten.

Från en annan dator kan jag nu ansluta med SSH exempelvis med följande kommando från en linuxdator:

ssh pi@piserver

I mitt fall fungerade det inte att ange namnet utan jag fick använda IP-adressen till servern i stället.

Det kan som vanligt vara bra att uppdatera servern med kommandona:

sudo apt-get update
sudo apt-get upgrade

Nu kan man i princip installera vad man vill på datorn, men tänk på att det inte är ett prestandamonster till dator.

Jag installerar en enkel webbserver med kommandot:

sudo apt-get install lighttpd

Jag passar även på att installera samba (apt-get install samba) och gör de konfigurationer som behövs för att komma åt webb-roten med en filhanterare.

Screenshot from 2014-05-23 21:27:05

Naturligtvis behöver rättigheten sättas på katalogen /var/www också, och tills vidare så gör jag det med kommandot:

sudo chmod 775 /var/www

Det var egentligen det hela. Resten består i att ladda upp html och javaskriptfiler till den utdelade katalogen, och sedan är det bara att ansluta med webbläsaren till servern.

Screenshot from 2014-05-23 21:46:34

Här i bilden har jag bara skapat en enkel ”index.html” fil i den utdelade katalogen och kör ett mycket enkelt Leaflet exempel med Open Street Map som enda lager.

Att tänka på är att lagringsutrymmet är begränsat men det fungerar ganska bra att hänvisa till data på andra servrar (exempelvis WMS tjänster). Eftersom javaskript körs på klienten så blir det inte heller så betungande för den lilla servern.

Ha inte för stora förväntningar på ”pajen”, men det blir svårt att hitta en server som tar mindre plats och drar mindre ström, för att inte tala om den obefintliga ljudnivån…

[EDIT]

För att aktivera PHP på webservern kör följande kommandon:

sudo apt-get install php5-common php5-cgi php5
sudo lighty-enable-mod fastcgi-php
sudo service lighttpd force-reload

Testa PHP med koden:

<?php
 phpinfo( );
?>

Det var det hela…

Jag bygger en GPS logg med Open Source

Det var ett tag sedan förra inlägget, men det har varit mycket julmat ett tag, och nu laddas det för nyårsfirande.

Jag sticker dock emellan med ett litet experiment jag håller på med som handlar om att logga GPS positioner. Men det är väl inget nytt? Nej, men jag vill kunna skräddarsy loggarna själv och på sikt inkludera flera saker i projektet, exempelvis styrning av GoPro kameror.

Öppen för Open Source som jag är så fann jag ett par hårdvaruprojekt som är Open Source, här följer två av dessa.

Jag var inne lite på Raspberry Pi (endast delvis Open Source), som är en liten billig (runt 350kr) minidator som är uppbyggd kring ARM processorn och som normalt kör Linux där det går att koppla en massa extra komponenter till. Programmeringen sker sedan i valfritt språk, men Raspberry Pi rekommenderar Python, vilket inte är helt fel att lägga lite tid på att lära sig. Men då det strulade lite för mig med strömförsörjningen (Raspberry Pi kräver 5V via micro-USB men det vanliga är 3,3V) så har jag släppt detta för tillfället.

I stället så har jag testat Arduino (även här) och nybörjarkortet UNO (R3). Kortet kostade runt 200 kr och tillsammans med ett kort för micro-SD kort (120kr) och en GPS modul (350kr) så blev totalkostnaden runt 700 kr med lite annat ”krims-krams” inräknat. Jämfört med en färdig GPS-logg så är det fortfarande billigt, med tanke på den prestanda som GPS modulen har.

Arduino har en egen utvecklingsmiljö (IDE) som bygger på AVR-GCC (programspråket C), men är gjort så att det skall vara så enkelt som möjligt att komma igång med hårdvaruprojekt. Detta har såväl för- som nackdelar, men för mina experiment så är det tillräckligt bra.

Efter lite pillande med grunder, där Jeremy Blum var en stor hjälp med sina YouTube lektioner, så kastade jag mig in i projektet. Arduino, SD-läsare och GPS kopplades samman med lite lysdioder, motstånd och sladdar, sedan var det dags för programmering. Jag började med att försöka lösa allt på en gång, men det gick inget vidare. Det blev i stället olika delmoment där varje funktion för sig testades fram för att slutligen slås samman till ett fungerande program.

IMG_0473_m

Min GPS-logg (som den ser ut och fungerar just nu) läser GPS data från GPS-modulen och sparar latitud, longitud, datum och tid samt fart, kurs, HDOP och antal satelliter till en csv-fil på micro-SD kortet. En grön diod lyser när GPS-fix finns och en röd blinkar för att visa att allt fungerar som det skall. Vissa förutsägbara fel fångas också upp och då kommer den röda dioden att blinka och lysa på lite olika sätt.

Nästa steg blir att koppla in ett 9V batteri och gå ut och prova ute, men det får nog vänta ett par dagar. Så länge får det duga med att ha GPS-mottagaren i fönstret och hoppas på goda GPS förhållanden.

Jag valde csv formatet dels för att det är en vanlig textfil och dels för att det är lätt att importera till exempelvis Excel eller olika GIS program. På sikt så skall jag lägga till styrkablar till GoPro kameror så att jag kan styra när bilder skall tas från Arduinon, vi får se om det går att få till. Då skulle man kunna tänka sig att man automatiskt fångar bilder med ett visst tidsintervall, eller för den delen med ett visst avståndsintervall. Men det tar inte stopp där. Det borde gå att definiera platser som är särskilt intressanta och få systemet att ta bilder med ett annat intervall där. Idéerna är många, men det får som sagt vänta ett tag.

(Sök på YouTube efter Arduino eller Raspberry Pi så går det att få massor med inspiration till olika byggen)

[EDIT]

Jag har nu varit ute och testat lite och passade på att spela in en liten filmsnutt för att visa lite diodfunktioner.