Guide - Styra GPIO via webläsaren (LAMP, Python)
Hej,
Fick min Raspberry Pi v.2 förra veckan (2013-09-24) och började genast leta efter guider på hur man konfigurerade den till att styra externa strömkällor.. för att på så sätt kunna koppla på DC-motorer, garageöppnare eller styra lampor i huset mm.
SÅ i och med det så bestämde jag mig för att dela med mig av vad jag knåpat ihop genom olika guider på nätet. Hoppas någon kan få nytta av det!
Tänk på att ni kan förstöra er Raspberry PI och än värre ta livet av er om ni mixtrar med ström! Bara en påminnare
Inhandlade Solderless Educative starterbox EDU01 http://www.kjell.com/sortiment/el/elektronik/elektroniklab/utbildningskit-elektronik-p36303
Kostade 149:- och har allt man behöver för att koppla ihop Raspberry Pi GPIO med extern strömkälla, !!!!OBS ENBART Låg VOLT!!!!!
Men det går ju bra att ha och labba med. Som jag kommer visa i den här guiden.
Det ni behöver är:
Raspberry PI med Rasbian på SD. och strömkälla
Nätverksanslutning
2st 1pin för att koppla ihop GPIO med Labb-brädan (Använder en kontakt från en gammal dator typ till LED eller intern högtalare)
Allt under här kan bytas ut / och kommer bytas ut av ett färdigt relä http://www.ebay.com.au/itm/New-5V-8-Channel-Relay-Module-Board-Electronic-for-Arduino-AVR-PIC-MCU-DSP-ARM/390568255094?_trksid=p2047675.m1850&_trkparms=aid%3D222002%26algo%3DSIC.FIT%26ao%3D1%26asc%3D11%26meid%3D1674567838104348330%26pid%3D100011%26prg%3D1005%26rk%3D2%26rkt%3D5%26sd%3D320871202967%26
Ska bara få hem det från kina, tar nog några veckor.. men då blir det att testa med "riktiga" lampor först.
1st 9volt batteri (Ingår ej i Utbildningskitet)
1st 240ohm (Ingår i Utbildningskit)
1st 10k ohm (Ingår i Utbildningskit)
1st BC547 Transistor NPN (Ingår i Utbildningskit)
1st Diod (För att inte strömmen ska gå på fel håll) http://www.kjell.com/sortiment/el/elektronik/halvledare/dioder/diod-1n4001-50v-1a-p90028(Ingår ej Utbildningskit)
1st LED (Ingår i Utbildningskit)
Så här ser kopplingschemat ut (snyggt va? ) Skripten kör mot GPIO11:
Så här fixar man en LAMP server på Rasbian:
Installera LAMP server, (Linux Apache MySQL PHP)
https://www.digitalocean.com/community/articles/how-to-instal...
sudo su
apt-get update
apt-get install apache2 -y
Kontrollera vilken IP adress ni har och testa att surfa ditt: http://x.x.x.x
Om ni kör trådat
ifconfig eth0 | grep inet | awk '{ print $2 }'
Om ni kör trådlöst (Wifi)
ifconfig wlan0 | grep inet | awk '{ print $2 }'
alternativt (Leta efter något som liknar 192.168.0.100 (Vanligaste IP nät för hemmabruk), detta beror helt på hur ni satt upp er router/dhcp)
ifconfig
Installera nu MySQL (Om ni vill, bra att ha, MEN i den här guiden använder jag dock en text fil för att kontrollera om GPIO11 är på eller av)
apt-get install mysql-server -y
ange nytt lösenord för root användaren för MySQL
Kör konfiguration av MySQL
mysql_secure_installation
--------------------------
root@raspberrypi:/etc# mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MySQL to secure it, we'll need the current
password for the root user. If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.
You already have a root password set, so you can safely answer 'n'.
Change the root password? [Y/n] n
... skipping.
By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] y
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] y
... Success!
By default, MySQL comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] y
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MySQL
installation should now be secure.
Thanks for using MySQL!
--------------------------
Installera PHP
apt-get install php5 php5-mysql libapache2-mod-php5
Starta sedan om Apache
service apache2 restart
Kontrollera om PHP fungerar:
Skapa en info.php-fil genom att köra:
nano /var/www/info.php
Klistra in följande och spara:
<?php
phpinfo();
?>
Öppna sedan er webbläsare och surfa in på ert ip till servern, http://x.x.x.x/info.php
Får ni fram en lila tabell med värden så fungerar PHP.
Installera python / för att köra .py skript mot GPIO:
sudo apt-get install python-dev
sudo apt-get install python-rpi.gpio
Ändra rättigheter, så att skript kan köras (Inte "best practice", men men vi ska ju inte öppna ut mot internet.. ..än ):
sudo nano /etc/sudoers
Lägg till följande rad längst ner (För att spara trycker ni CTRL-X, sedan "y"):
www-data ALL=(root) NOPASSWD:ALL
INSTALLERA FTP (Lättare att ladda upp till sidor webservern):
sudo apt-get install vsftpd
Editera konfigurationen:
nano /etc/vsftpd.conf
Leta upp följande rader och editera enligt nedan (OBS! Detta är inte "Best Practice" men snabbt att få igång, FTP användare borde vara enbart FTP användare då authentiseringen är i "Clear text"):
Anonymous_enable=NO
Local_enable=YES
Write_enable=YES
Ascii_upload_enable=YES
Ascii_download_enable=YES
local_umask=022
Lägg till följande rad under "Local_enable=YES":
local_root=/var/www
Spara sedan filen och starta om FTP tjänsten:
/etc/init.d/vsftpd restart
Ändra så att ni kan skriva till mappen där hemsidan ligger:
root@raspberrypi#:cd /var
root@raspberrypi:/var#chmod 777 www
Testa nu att öppna FTPn från er (windows) dator genom att öppna CMD, (START->Kör->"cmd" <tryck enter>)
Ni kan även använda öppna FTPn genom att öppna en mapp och skriva ftp://xxx.xxx.xxx.xxx istället för sökvägen till mappen som står
(http://www.cs.colostate.edu/helpdocs/ftp.html)
Vill ni använda min design så kan ni hämta filerna här:
softwaist.se/raspberrypi/Raspberry_Switch-a-Php.zip
Jag har försökt kommentera lite i .php filerna så att ni lättare ska kunna editera med flera GPIO:er.
LightOFF.py = Python-skript för att sätta GPIO till 0v
LightON.py = Python-skript för att sätta GPIO till 3.3v
OnOrOff.txt = Textdokument för att få en kontroll på om GPIO11 är 3.3v eller 0v
Raspberry_Pi_Logo.png = Hallon
index.html = För att man ska kunna ansluta mot enbart http://ipadressen (Redirect till index.php)
index.php = Sidan där knapparna ger input, så att de två skripten körs
info.php = för att lista alla specifikationer om Apache-servern
style.css = Fil för att få det fina utseendet på knapparna...
Navigera till mappen där ni sparat index.php, index.html och de andra filerna
C:\>cd "C:\work\Raspberry Pi"
C:\work\Raspberry Pi>ftp
ftp> open 172.16.0.19
Connected to 172.16.0.19.
220 (vsFTPd 2.3.5)
User (172.16.0.19:(none)): pi
331 Please specify the password.
Password:
230 Login successful.
ftp> bin
200 Switching to Binary mode.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
info.php
226 Directory send OK.
ftp: 13 bytes received in 0.00Seconds 13.00Kbytes/sec.
ftp> put index.html
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
ftp: 527 bytes sent in 0.00Seconds 263.50Kbytes/sec.
ftp> put index.php
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
ftp: 670 bytes sent in 0.00Seconds 670.00Kbytes/sec.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
LightOFF.py
LightON.py
OnOrOff.txt
Raspberry_Pi_Logo.png
index.html
index.php
info.php
style.css
226 Directory send OK.
ftp: 36 bytes received in 0.00Seconds 18.00Kbytes/sec.
ftp>bye
Testa nu att surfa till http://x.x.x.x/index.html
Fungerar inte?
Logga in på Raspberry Pi och kör följande för att lägga till rättigheter på filerna:
root@raspberrypi:#cd /var/www
root@raspberrypi:/var/www# chmod 666 index.html
root@raspberrypi:/var/www# chmod 666 index.php
root@raspberrypi:/var/www# chmod 666 info.php
root@raspberrypi:/var/www# ls -lsa
total 20
4 drwxrwxrwx 2 root root 4096 Oct 1 07:23 .
4 drwxr-xr-x 12 root root 4096 Oct 1 06:14 ..
4 -rw-rw-rw- 1 pi pi 508 Oct 1 07:23 index.html
4 -rw-rw-rw- 1 pi pi 633 Oct 1 07:23 index.php
4 -rw-rw-rw- 1 root root 20 Oct 1 06:41 info.php
root@raspberrypi:/var/www#
Och så har vi ett färdigt resultat som ser ut så här:
En liten film,
I mobiltelefonen,
I datorn,
Om ni använder bifogad index.php så kan det vara bra att veta lite hur det går till.
<?php
// Check for safe mode, Detta är egentligen bara för att vara säker på att vi kommer kunna köra exec-kommandot...
if( ini_get('safe_mode') ){
// Do it the safe mode way
echo "Server runs in safe mode, Script will not be executed";
}else{
// Do it the regular way
}
//Rename post to other variable - Post funktionen som hämtas från formuläret (knapparna)
$LightON = $_POST['RunScript_LightON'];
$LightOFF = $_POST['RunScript_LightOFF'];
//POST SWITCH - En simpel switch tyckte jag var roligare att använda då vi kan utveckla sidan betydligt mer än om vi bara har "if isset"
switch ($_GET['action']) {
case "ON":
exec("sudo python /var/www/LightON.py"); //Kör skriptet - sätt GPIO till 3.3v
exec("echo 1 > /var/www/OnOrOff.txt"); //uppdaterar OnOrOff.txt med "1" för att indikera att GPIO är satt till 3.3v
break;
case "OFF":
exec("sudo python /var/www/LightOFF.py"); //Kör skriptet - sätt GPIO till 0v
exec("echo 0 > /var/www/OnOrOff.txt"); //uppdaterar OnOrOff.txt med "1" för att indikera att GPIO är satt till 0v
break;
}
//Check if OnOrOff.txt is set to 1 or 0 // satt vi vet, även om vi startar en ny session i webläsaren.
$OnOrOff = exec("cat /var/www/OnOrOff.txt");
//Check which button to be shown, if OnOrOff.txt equals 1, show off button, else show on button
if($OnOrOff == "1"){
$Button_OFF = "<input type='submit' class='button_two' value='OFF' name='RunScript_LightOFF'>";
}else{
$Button_ON = "<input type='submit' class='button_one' value='ON' name='RunScript_LightON'>";
}
Optional - Installera PostFix - Skicka mail via PHP (PhpMailer eller sendmail)
apt-get install php-pear
pear install mail
pear install Net_SMTP
pear install Auth_SASL
pear install mail_mime
apt-get install postfix
Se vad jag printar!
3dreserven.se/whatsprinting.php