Kategori: Bash

Koppla rörelsesensor till Raspberry Pi

Vi har en Scoreboard på m.nu som visar aktuellt orderläge. Här kan du läsa om hur vi gjort för att automatiskt starta webbläsare i helskärmsläge när vår Raspberry Pi startar.
Vi vill inte att skärmen ska stå på och dra el när vi inte är där, så vi har satt en Rörelsesensor direkt på GPIO-porten. Rörelsesensor drivs med 5V, men lämnar praktiskt nog 3,3V som utsignal, så utsignalen kan kopplas direkt till GPIO-pinne på vår Raspberry Pi.

Så här kopplade vi:

5V på GPIO-porten (pinne 2) kopplas till 5V på rörelsesensorn
GND (pin 6) kopplas till GND
Rörelsesensorns utsignal till GPIO1 (pin 12).

När rörelse detekteras är utsignalen hög i några sekunder.
Läsa från GPIO-porten
Vi använder mjukvaran WiringPi för att läsa från GPIO-porten. Wiring pi är installerat på din pi om du kör en ny version av Raspbian Jessie
När WiringPi är installerat kan man använda mjukvaran gpio för att interagera med GPIO-porten.
Exempel:
gpio read 1
Som returnerar 1 om GPIO1 är hög och 0 om GPIO1 är låg. På WiringPi finns en bra översikt över vilka pinnar som är vilka, det är minst sagt rörigt
Slå på och av skärmen
Eftersom skärmen är ansluten via HDMI går det att skicka signaler via HDMI-kabeln för att stänga av och slå på skärmen.
Vi skapade ett litet script som löser detta på en mycket enkelt sätt:
nano /home/pi/screen.sh

Lägg sedan in följande i filen:
#!/bin/bash
if [ "$1" == 'on' ]; then
tvservice -p #Slå på skärmen
fbset -depth 8 #Trick för att se till att skärmen uppdateras
fbset -depth 16 #Trick för att se till att skärmen uppdateras
sudo chvt 6 #Trick för att se till att skärmen uppdateras (Växla till terminalfönster)
sudo chvt 2 #Trick för att se till att skärmen uppdateras (Växla till grafiskt fönster)
echo 'Switched Screen ON!'
fi
if [ "$1" == 'off' ]; then
tvservice -o #Stäng av skärmen
echo 'Switched Screen OFF!'
fi

Gör filen körbar:
chmod 700 /home/pi/screen.sh
Nu går det enkelt via scriptet att slå på och av skärmen genom att köra screen.sh med on respektive off som parametrar
Helheten
Nu skapar vi ett script till som läser av GPIO-porten och tänder släcker skärmen med rörelsesensorn som insignal:
nano /home/pi/movement.sh
Innehåll:
#!/bin/bash
/home/pi/screen.sh off #Vi börjar med att stänga av skärmen vid uppstart, annars kommer den stå på i onödan
counter="0" # Sätter en variabel vi använder i scriptet
while true; do #Loopa för evigt
if [ `gpio read 1` = "1" ]; then #Om rörelsesensor detekterat rörelse
echo "Rörelse detekterad"
if [ $counter = 0 ]; then # Om counter-värdet är 0 är skärmen släckt och vi aktiverar den
/home/pi/screen.sh on
fi
counter=1200 # Sätt counter till 1200, vilket kommer innebära att skärmen är på ca 20 minuter. Detta görs varje gång rörelse dekterats så om rörelse detkteras gång på gång kommer skärmen inte att släckas.
else # om ingen rörelse detekterats...
echo "ingen rörelse"
if [ $counter -gt "0" ]; then # om räknarvärdet är större än 0
counter=`expr $counter - 1` #räkna ner med 1
fi
if [ $counter = 0 ]; then # om räknarvärdet är 0 har ingen rörelse detekterats på 20 minuter och vi stänger av skärmen
/home/pi/screen.sh off
fi
fi
sleep 1 #Vänta en sekund innan vi börjar om.
echo "$counter\n"

done

 
 

Raspberry Pi Kiosk mode

Scoreboarden på m.nu
Vill du visa något i helskärm på din Raspberry Pi? Som kanske till och med startar automatiskt? (Det vill säga starta en applikation i “Kiosk mode“)
Det ville vi på m.nu när vi satte upp vår Scoreboard som visar aktuell orderstatus.
Så här gjorde vi:
Raspberry Pi fäst på baksidan av skärmen
Hårdvara
1st gammal skärm
1st Raspberry Pi (med minneskort så klart!)
Mjukvara
Vi installerade en helt vanlig Raspbian Jessie (Release date. 2017-01-11)
På servern skapade vi en hemsida som uppdateras automatiskt och som innehåller den information vi ville visa på statusskärmen.
Steg för steg

Börja med att installera fönsterhanteraren matchbox:
sudo apt-get install matchbox

Se till att pajjen startas till comandoprompten inloggad som pi:
Kör:
sudo raspi-config
Bläddra till Boot options och välj B1 Desktop / CLI
Välj sedan B2 Console Autologin

(Om bilden inte fyller hela skärmen eller om du vill starta ssh vid start kan du ändra inställningar för Overscan och ssh under fliken advanced i Raspi-config)
Skapa filen /home/pi/.xinitrc
Raderna vi lagt till är:
xset s off
xset -dpms
xset s noblank
/home/pi/movment.sh
matchbox-window-manager -use_titlebar no -use_cursor no &
chromium-browser --kiosk https://www.m.nu
xset s off stänger av skärmsläckare
xset -dpms stänger av display power management system, vi vill inte att skärmen ska släckas automatiskt
xset s noblank gör att skärmen inte släcks
/home/pi/movment.sh är ett litet skript som med hjälp av en rörelsesensor ser till att skärmen är på när någon är i rummet för att sedan släcka skärmen när ingen är där. Här kan du läsa om hur det skriptet fungerar.
chromium –kiosk www.m.nu Startar webbläsaren  med angiven url i fullskärmsläge.
Här finns beskrivet hur man kan göra för att visa en sida som laddas om utan att crasha om vi skulle tappa internetkoppling en liten stund. 
Lägg till följande i slutet av /home/pi/.bashrc
if [ -z "$SSH_CLIENT" ] || [ -z "$SSH_TTY" ]; then
xinit -- -nocursor
fi

Klart! Nu är det bara att starta om så ska din raspberry pi starta i helskärmsläge med den angivna hemsidan.

Läser in

Kul att du gillar vår blogg!

Skriv upp dig på vår maillista för att få allt det senaste från m.nu - Nya produkter, kampanjer och mycket mer!

Wohoo! Du är nu med på maillistan!