Premiär! Fyndchans i SweClockers Månadens Drop

Guide - Styra GPIO via webläsaren (LAMP, Python)

Permalänk
Medlem

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

mailfunktion
Permalänk
Medlem
Skrivet av mr2clean:

Härligt med lite rapsberry pi guider
KSa läsa igenom bättere efter jobbet men det ser bra och välskrivet ut.
Hoppas på fortsättningen av projektet någon gång

Permalänk
Medlem
Skrivet av Romoes:

Härligt med lite rapsberry pi guider
KSa läsa igenom bättere efter jobbet men det ser bra och välskrivet ut.
Hoppas på fortsättningen av projektet någon gång

Kul att någon gillar min guide!
Det kommer komma en uppdatering, dock inväntar jag en hel del från ebay.. sjukt va mycket grejor man kan köpa för inga pengar alls!

Skickades från m.sweclockers.com

Permalänk
Medlem
Skrivet av mr2clean:

Kul att någon gillar min guide!
Det kommer komma en uppdatering, dock inväntar jag en hel del från ebay.. sjukt va mycket grejor man kan köpa för inga pengar alls!

Skickades från m.sweclockers.com

Haha jag vet
Upptäckte själv kinesiska komponenter på ebay för någon vecka sedan. Väntar på 7 olika paket, fattar inte att de kan sälja något för 10 spänn med gratis frakt till Sverige.

Det roliga är att man blir löjligt snål och tycker att 30 spänn är mycket för 1300 resistorer när det finsn för 25

Ska kika in din guide nogrannt när det blir dags. Har tänkt mig automatiskt bevattning av några blommor med fuktsensor så komemr behöva koppla in ett relä iaf

Permalänk
Medlem

Kul att du delar med dig av ditt projet med kod och allt! Tackar och bockar!

Jag kollade igenom din kod och det är en rad i python-koden som jag inte förstår.

try:
trigger() <---- Vad gör du här?
exctept:

mvh
zonar

Skickades från m.sweclockers.com

Visa signatur

C2D E6300 @ 3.2HGz 1.2V | Thermalright 120 Extr. | Gainward 8800 GT Golden Sample |Samsung 2x500Gb | Corsair VX 550V | Antec P182 [img]http://valid.x86-secret.com/cache/banner/421648.png[/img]

Permalänk
Medlem
Skrivet av zonar:

Kul att du delar med dig av ditt projet med kod och allt! Tackar och bockar!

Jag kollade igenom din kod och det är en rad i python-koden som jag inte förstår.

try:
trigger() <---- Vad gör du här?
exctept:

mvh
zonar

Skickades från m.sweclockers.com

Fick själv problem med just den raden igår när jag körde en while loop som skulle köras 2 rundor, testade skapa en siren (Nytt projekt, kommer snart en guide på mitt hemmalarm).

Så här ser det ut (Inte riktiga koden, men ni förstår säkert vad jag menar):

####################
count = 0
while (count < 2):
#set GPIO 3.3 volt (HIGH)
#time.sleep(0.2)
#set GPIO 0 volt (LOW)
#time.sleep(0.2)
count = count + 1
try:
trigger()
except:
#keyboardinput
####################

Får också problem med trigger() "not defined". Tror trigger() betyder att den ska köra hela skriptet och sedan är ju "try" för att fånga felmeddelande.
I koden åvan behöver jag själv inte någon try/except, iom att jag enbart kör en av och på mot en GPIO.

Kanske någon annan som läser tråden som vet?

Permalänk
Medlem

Om du ska används det på det sättet måste du då först definiera en funktion kring scriptet som hanterar lampan.

import RPi.GPIO as GPIO from time import sleep def Trigger() # Tell GPIO library to use GPIO references GPIO.setmode(GPIO.BCM) # Set pin 7 as GPIO as output GPIO.setup(7 , GPIO.OUT) count = 0 while (count < 2): #set GPIO 3.3 volt (HIGH) GPIO.output(7, True) time.sleep(0.2) #set GPIO 0 volt (LOW) GPIO.output(7, False) time.sleep(0.2) count += 1 try: trigger() except KeyboardInterrupt: print " You pressed Ctrl-C" except: print ' Unexpected Error: ',sys.exc_info()[0] print ' Error Type: ',sys.exc_info()[1] raise finally: # Reset GPIO GPIO.cleanup()

Mvh z

Skickades från m.sweclockers.com

Visa signatur

C2D E6300 @ 3.2HGz 1.2V | Thermalright 120 Extr. | Gainward 8800 GT Golden Sample |Samsung 2x500Gb | Corsair VX 550V | Antec P182 [img]http://valid.x86-secret.com/cache/banner/421648.png[/img]

Permalänk
Medlem

Väldigt trevlig tutorial, precis vad jag behöver! (Man kan för övrigt köpa relä kort på kjell & co också, lite dyrare men snabbare

Finns även en något mer färdig lösning
http://code.google.com/p/webiopi/

Liknanar din.

Permalänk
Medlem
Skrivet av CTH:

Väldigt trevlig tutorial, precis vad jag behöver! (Man kan för övrigt köpa relä kort på kjell & co också, lite dyrare men snabbare

Finns även en något mer färdig lösning
http://code.google.com/p/webiopi/

Liknanar din.

Men det är roligare att knåpa själv...

Följde guiden i tråden och körde in apache samt php. Databasen får vänta.

Nu styr jag min hem-automations central (z-wave Vera) med min pi.

La till en knapp för att ta en bild med kameran till Pi också, nästa steg är att fixa en rörelsesensor samt en 1-wire temperatur givare.

/z

Visa signatur

C2D E6300 @ 3.2HGz 1.2V | Thermalright 120 Extr. | Gainward 8800 GT Golden Sample |Samsung 2x500Gb | Corsair VX 550V | Antec P182 [img]http://valid.x86-secret.com/cache/banner/421648.png[/img]

Permalänk
Medlem

Skoj att läsa! Tack för guiden. Började från scratch för några veckor sen med min pi och tror jag lärt mig en del. Ska leka runt lite med koden senare!

Jag kör en "station" trådlöst i min lilla växthörna (chili, tomat, örter... no joke) som loggar temperatur och fuktighet på ett par nivåer med hjälp av ett par olika sensorer och uppdaterar en lokal websida hostad på raspberryn.

Som ni ser på loggen är det stor skillnad i noggrannhet mellan DS18B20 och DHT11. Jag skiulle inte rekommendera DHT11 för varken temp. eller fuktmätning. Dock ska DHT22 vara mycket bättre, så kommer testa den snart.

Min plan är att baserat på detta data styra element i lägenheten som ska slå av och på vid vissa temperaturer för att hålla jämn temperatur hela vintern... vilket annars är heeelt omöjligt för tillfället. Efter lite "forskning" kom jag fram till att det lättaste (och säkraste) sättet är att köpa färdiga trådlösa kontakter (dessa från Kjell) och en sändarmodul (också från Kjell) som använder samma frekvens som strömbrytarmottagarna.

Lättare sagt än gjort. Jag lyckas styra sändaren från raspberryn och kopplat på en led för att se när sändaren arbetar men kontakterna vägrar svara. Det håller på att driva mig till vansinne, så om någon har några förslag så dela gärna med er. Jag har även öppnat upp orginalkontrollen men förstår inte riktigt hur jag ska kunna styra den med raspberryn. Jag är nära på att inköpa en mottagarmodul och spela in signalen men vet inte om det skulle leda någon vart. Är det någon som testat på detta och lyckats?

Permalänk

Sändarmodulen du har köpt måste paras ihop med den mottagare som den ska styra , det görs nog enklast med hjälp av en mottagarmodul.
Det finns ett Arduinobaserat projekt där det används fjärrstyrning (Nexa), hoppas du hittar tips där för hur du ska göra.
http://www.systemserik.com/arduino-alarm-clock-with-433-92-mh...

/Tobbe

Visa signatur

/Tomma tunnor skramlar mest/

Permalänk
Medlem
Skrivet av Papaste:

skit i sändarmodulen och hacka fjärrkontrollen du fick med. borde gå att få en knapptryckning med en optokopplare, relä eller en transistor

Permalänk
Medlem
Skrivet av TobbeWendt:

Sändarmodulen du har köpt måste paras ihop med den mottagare som den ska styra , det görs nog enklast med hjälp av en mottagarmodul.
Det finns ett Arduinobaserat projekt där det används fjärrstyrning (Nexa), hoppas du hittar tips där för hur du ska göra.
http://www.systemserik.com/arduino-alarm-clock-with-433-92-mh...

/Tobbe

Skrivet av Romoes:

skit i sändarmodulen och hacka fjärrkontrollen du fick med. borde gå att få en knapptryckning med en optokopplare, relä eller en transistor

Tack för svaren. Jag lämnade tillbaka sändarmodulen och öppnade upp fjärrkontrollen en gång till. Kom snabbt fram till att det inte var så komplicerat som det först verkade. Nedan är kontrollen isärplockad:

Vad jag gjorde var att testade mig fram vilka kontakter som behövde kopplas ihop för att simulera knapptryckningen. Jag suger hårt på att löda och är egentligen allt för klumpig och darrig för att göra ett bra jobb men lödde i alla fall på ett par kablar (vääääldigt fula lödningar):

Efter det satte smällde jag in dom i kopplingsbrädan tillsammans med ett par NPN transistorer, jordade och kopplade in kablar från GPIO till transistorbasen:

Funkar klockrent och kan styra strömbrytarna lätt med python Så det billigaste sättet är definitivt att köpa på sig ett set med dessa kontakter för 79kr från Kjell medans de kör kampanjen

Permalänk
Medlem

Nice
Strömmatar du fjärren med 12V batteriet som medföljer?
Akta så att inte spänningen som normalt flyter av strömbrytarna i fjärrkontrollen går in och sabbar dina GPIO pinnar.
Jag är inte proffs men på bilden kan jag enbart se 2 transistorer. För att med säkerhet isolera spänningen från 12V batteriet skulle jag vilja se antingen reläer eller optokopplare mellan fjärrkontrollen och GPIO. Kommentarer??

Permalänk
Medlem
Skrivet av pacmyc:

Nice
Strömmatar du fjärren med 12V batteriet som medföljer?
Akta så att inte spänningen som normalt flyter av strömbrytarna i fjärrkontrollen går in och sabbar dina GPIO pinnar.
Jag är inte proffs men på bilden kan jag enbart se 2 transistorer. För att med säkerhet isolera spänningen från 12V batteriet skulle jag vilja se antingen reläer eller optokopplare mellan fjärrkontrollen och GPIO. Kommentarer??

Hoppsan. Ja, jag strömmatar fjärrkontrollen med orginalbatteriet samt ger ut 3.3V till basen av transistorn för att få igång den när jag vill slå av eller på strömbrytaren:

Är detta idiotiskt?. Jag är som sagt en total nybörjade när det kommer till elektronik. Om du har förslag på att enkelt göra detta säkrare så shoot

Permalänk
Medlem
Skrivet av Papaste:

Hoppsan. Ja, jag strömmatar fjärrkontrollen med orginalbatteriet samt ger ut 3.3V till basen av transistorn för att få igång den när jag vill slå av eller på strömbrytaren:

http://i.imgur.com/wzwGxOZ.jpg

Är detta idiotiskt?. Jag är som sagt en total nybörjade när det kommer till elektronik. Om du har förslag på att enkelt göra detta säkrare så shoot

Snyggt! blir sugen på att göra en likadan

Är också rätt grön på detta men om jag förstått allt rätt så finns det en chans att din spänning på 12V kan "läcka" över till din GPIO pinne vilket kommer förstöra din RPi. Har inte fördjupat mig så mycket i det men det borde väl vara specat på transistorn vilken spänning som krävs för att det ska ske..

Man kan säga att en optokopplare tänder en liten led vilket gör att en närliggande ledning sluts. Så om du tänder LEDen men din RPi så är du helt isolerad från den högre spänningen (från kontrollen). Du skulle kunna köpa en sådan här: http://www.electrokit.com/ltv847b-dip16-optokopplare-x4.50602
den ger dig totalt 4 st optokopplare ifall du vill expandera

Det är aldrig fel att ha några optokopplare liggandes hemma ifall du vill koppla in reläer senare

Permalänk
Medlem
Skrivet av Romoes:

Snyggt! blir sugen på att göra en likadan

Är också rätt grön på detta men om jag förstått allt rätt så finns det en chans att din spänning på 12V kan "läcka" över till din GPIO pinne vilket kommer förstöra din RPi. Har inte fördjupat mig så mycket i det men det borde väl vara specat på transistorn vilken spänning som krävs för att det ska ske..

Man kan säga att en optokopplare tänder en liten led vilket gör att en närliggande ledning sluts. Så om du tänder LEDen men din RPi så är du helt isolerad från den högre spänningen (från kontrollen). Du skulle kunna köpa en sådan här: http://www.electrokit.com/ltv847b-dip16-optokopplare-x4.50602
den ger dig totalt 4 st optokopplare ifall du vill expandera

Det är aldrig fel att ha några optokopplare liggandes hemma ifall du vill koppla in reläer senare

Tack för tipset! Köpte på mig ett par optokopplare och annat roligt. Kontrollen är urkopplad tills jag klurat ut hur det ska riggas på ett bättre sätt. Jag kanske hade lite tur i och med att jag endast gav output från GPIO i dryga sekunden för att sätta igång fjärrkontrollen.

Transistorn är en vanlig BC547B som kom med i ett elektronik-labkit jag köpte för ett par veckor sen för att försöka lära mig grunderna. Enligt databladen fixar den rätt höga spänningar men jag kanske läser det fel.

Hursomhelst, efter på och avslagning av element baserat på temperatur blir nog nästa steg en kamera för att fota timelapses (kanske t.o.m. den nya IR kameran till RPi eftersom jag tänkte fota växter) och någon gång i framtiden ett automat-bevattningssystem.

Permalänk
Medlem
Skrivet av Papaste:

Tack för tipset! Köpte på mig ett par optokopplare och annat roligt. Kontrollen är urkopplad tills jag klurat ut hur det ska riggas på ett bättre sätt. Jag kanske hade lite tur i och med att jag endast gav output från GPIO i dryga sekunden för att sätta igång fjärrkontrollen.

Transistorn är en vanlig BC547B som kom med i ett elektronik-labkit jag köpte för ett par veckor sen för att försöka lära mig grunderna. Enligt databladen fixar den rätt höga spänningar men jag kanske läser det fel.

Hursomhelst, efter på och avslagning av element baserat på temperatur blir nog nästa steg en kamera för att fota timelapses (kanske t.o.m. den nya IR kameran till RPi eftersom jag tänkte fota växter) och någon gång i framtiden ett automat-bevattningssystem.

Låter som ett kul projekt!
Håller själv lite på med automatisk bevattning just nu faktiskt: http://www.youtube.com/watch?v=mMCiVDtx_Ug&feature=youtu.be
Väldigt simpel design, mäter resistansen mellan två spikar (ju fuktigare desto lägre resistans) och när den går under ett visst gränsvärde drar pumpen igång och den skickar iväg ett mail till mig.

Kodmässigt är jag mer eller mindre klar men pumpen jag köpte på biltema till detta skickar ut 1 dl/s typ så tror jag behöver skaffa en lite klenare.

Permalänk
Medlem
Skrivet av Romoes:

Låter som ett kul projekt!
Håller själv lite på med automatisk bevattning just nu faktiskt: http://www.youtube.com/watch?v=mMCiVDtx_Ug&feature=youtu.be
Väldigt simpel design, mäter resistansen mellan två spikar (ju fuktigare desto lägre resistans) och när den går under ett visst gränsvärde drar pumpen igång och den skickar iväg ett mail till mig.

Kodmässigt är jag mer eller mindre klar men pumpen jag köpte på biltema till detta skickar ut 1 dl/s typ så tror jag behöver skaffa en lite klenare.

Grymt! Skoj att du la up film på det! Jag är lite intresserad på hur du kopplat alltihopa om du vill skriva en sammanfattning

Vilket relä kör du med? 1 dl/s låter rätt häftigt... finns det klenare att köpa?

För tillfället har jag runt 20 krukor i min grönhörna... vettefan om det är möjligt/värt att koppla in saker till allt. Alternativet är ju att installera ett hydroponiskt system och Pi-styra allt genom det. Det är säkert lättare men kostar tyvärr en slant.

Permalänk
Medlem
Skrivet av Papaste:

Grymt! Skoj att du la up film på det! Jag är lite intresserad på hur du kopplat alltihopa om du vill skriva en sammanfattning

Vilket relä kör du med? 1 dl/s låter rätt häftigt... finns det klenare att köpa?

För tillfället har jag runt 20 krukor i min grönhörna... vettefan om det är möjligt/värt att koppla in saker till allt. Alternativet är ju att installera ett hydroponiskt system och Pi-styra allt genom det. Det är säkert lättare men kostar tyvärr en slant.

Jag skulle tippa på att en vindrute-spolarmotor ska funka bra. Jag hade tänkt 2 m lyfthöjd till blomkrukan

Relät är: http://www.electrokit.com/relakort-x4-5v.49163
Det är tyvärr ett relä utan optokopplare men upptäckte att jag kunde få det att klicka med 3.3 V så jag kopplade in det direkt. VCC på relät går till en 3.3V, gnd till gnd och relät som används för vattenpumpen går till GPIO 18. Fungerar precis som din kontrollstyrnning med transistorn fast kretsen som sluts är 3.3 till 0 V på RPin vilket i sin tur sluter kresten mellan pumpen och en 12V adapter jag snodde från en bredbandsbolagsrouter.

Fuktsensor är en liten specialare jag läste om på adafruit. Det gick inte att läsa resistans direkt mellan pinsen så den läser hur lång tid det tar att fylla en kondensator efter spikarna istället: http://learn.adafruit.com/basic-resistor-sensor-reading-on-ra....

Kommenterade till koden en del så hoppas det är läsbart.
Ifall du vill den ska skicka ett mail så skapa en ny mail specifikt till den eftersom lösenordet står direkt i koden.

MinBlomkruka är gmail kontot till min bevattningstation

#!/usr/bin/python

#########
# About #
#########

# This script uses a Raspberry Pi to sense for the presense or absense of moisture using 2 nails as a simple sensor.
# If there is an absense of moisture, an email is sent and a water pump starts watering the plant.
# When it's wet again, another email is sent, and the pump is turned off.

# To run this script at boot, edit /etc/rc.local to include (no quotes) 'sudo python <pathtoyourscript>.py'

###########################################################################
# LICENCE #
###########################################################################
# Released under the WTFPL. #
# Full text and more information here: http://en.wikipedia.org/wiki/WTFPL #
###########################################################################

# Gmail login credentials to send email
username = 'MinBlomkruka' #you don't need the "@gmail.com" bit.
password = 'password' #Change this to the pass of your mial

# General Email Parameters
From = "MinBlomkruka@gmail.com"
To = "johan8703@hotmail.com"

# Email Parameters when sensor is Wet
Subject_wet = "Nu var jag klar"
Body_wet = "Nu var jag klar med vattningen."

# Email Parameters when semsor is Dry
Subject_dry = "Nu vattnar jag!"
Body_dry = "Hoppas det inte svammar over"

import smtplib
from email.mime.text import MIMEText
import RPi.GPIO as GPIO
import string
import time
GPIO.setmode(GPIO.BCM)

# Function Definitions

#takes either "wet" or "dry" as the condition.
def email(condition):
print "Attempting to send email"
if condition == 'wet':
Body = string.join((
"From: %s" % From,
"To: %s" % To,
"Subject: %s" % Subject_wet,
"",
Body_wet,
), "\r\n")
if condition == 'dry':
Body = string.join((
"From: %s" % From,
"To: %s" % To,
"Subject: %s" % Subject_dry,
"",
Body_dry,
), "\r\n")

# The actual mail send
server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
print "Logging in..."
server.login(username,password)
print "Logged in as "+username+"."
server.sendmail(From, [To], Body)
server.quit()
print "Email sent."

# Tests whether wter is present.
# returns 0 for dry
# returns 1 for wet
# Change second if to match your water sensor
def RCtime (RCpin):
reading = 0
GPIO.setup(RCpin, GPIO.OUT)
GPIO.output(RCpin, GPIO.LOW)
time.sleep(0.1)
GPIO.setup(RCpin, GPIO.IN)
# This takes about 1 millisecond per loop cycle
while True:
if (GPIO.input(RCpin) == GPIO.LOW):
reading += 1
if reading >= 300: #change this value to fit your moisture sensor
return 0
if (GPIO.input(RCpin) != GPIO.LOW):
return 1

def vattna ():
GPIO.setwarnings(False)
GPIO.setup(18, GPIO.OUT, initial = GPIO.LOW)
while RCtime(17)==0:
print "Watering..."
GPIO.output(18, GPIO.HIGH) #realay at pin 18
time.sleep(1) #This is the ON time for the pump
GPIO.output(18, GPIO.LOW)
time.sleep(1) # This is the wait time to let the water sink into the plant earth

# Main Loop

print 'Waiting for dryness...'
while True:
time.sleep(1)
if RCtime(17) == 0: #Mosit sensor at pin 17
print "Blomkruka is dry!"
while True:
time.sleep(10) #Checks if it is sitll dry after 10 seconds from the first dry report
if RCtime(17) == 1: #Breaks the loop if the sensor is wet
print "Just kidding :)"
time.sleep(2)
print "Waiting for dryness"
break
if RCtime(17) == 0: #starts the pump with vattna()
print "Blomkruka is still dry!"
email('dry')
time.sleep(2)
vattna() #Continues until the sensor is wet again
print "Blomkruka is wet again"
email('wet')
time.sleep(1)
print "Waiting for dryness..."
break

Dold text
Permalänk
Medlem
Skrivet av Romoes:

Jag skulle tippa på att en vindrute-spolarmotor ska funka bra. Jag hade tänkt 2 m lyfthöjd till blomkrukan

Relät är: http://www.electrokit.com/relakort-x4-5v.49163
Det är tyvärr ett relä utan optokopplare men upptäckte att jag kunde få det att klicka med 3.3 V så jag kopplade in det direkt. VCC på relät går till en 3.3V, gnd till gnd och relät som används för vattenpumpen går till GPIO 18. Fungerar precis som din kontrollstyrnning med transistorn fast kretsen som sluts är 3.3 till 0 V på RPin vilket i sin tur sluter kresten mellan pumpen och en 12V adapter jag snodde från en bredbandsbolagsrouter.

Fuktsensor är en liten specialare jag läste om på adafruit. Det gick inte att läsa resistans direkt mellan pinsen så den läser hur lång tid det tar att fylla en kondensator efter spikarna istället: http://learn.adafruit.com/basic-resistor-sensor-reading-on-ra....

Kommenterade till koden en del så hoppas det är läsbart.
Ifall du vill den ska skicka ett mail så skapa en ny mail specifikt till den eftersom lösenordet står direkt i koden.

MinBlomkruka är gmail kontot till min bevattningstation

#!/usr/bin/python

#########
# About #
#########

# This script uses a Raspberry Pi to sense for the presense or absense of moisture using 2 nails as a simple sensor.
# If there is an absense of moisture, an email is sent and a water pump starts watering the plant.
# When it's wet again, another email is sent, and the pump is turned off.

# To run this script at boot, edit /etc/rc.local to include (no quotes) 'sudo python <pathtoyourscript>.py'

###########################################################################
# LICENCE #
###########################################################################
# Released under the WTFPL. #
# Full text and more information here: http://en.wikipedia.org/wiki/WTFPL #
###########################################################################

# Gmail login credentials to send email
username = 'MinBlomkruka' #you don't need the "@gmail.com" bit.
password = 'password' #Change this to the pass of your mial

# General Email Parameters
From = "MinBlomkruka@gmail.com"
To = "johan8703@hotmail.com"

# Email Parameters when sensor is Wet
Subject_wet = "Nu var jag klar"
Body_wet = "Nu var jag klar med vattningen."

# Email Parameters when semsor is Dry
Subject_dry = "Nu vattnar jag!"
Body_dry = "Hoppas det inte svammar over"

import smtplib
from email.mime.text import MIMEText
import RPi.GPIO as GPIO
import string
import time
GPIO.setmode(GPIO.BCM)

# Function Definitions

#takes either "wet" or "dry" as the condition.
def email(condition):
print "Attempting to send email"
if condition == 'wet':
Body = string.join((
"From: %s" % From,
"To: %s" % To,
"Subject: %s" % Subject_wet,
"",
Body_wet,
), "\r\n")
if condition == 'dry':
Body = string.join((
"From: %s" % From,
"To: %s" % To,
"Subject: %s" % Subject_dry,
"",
Body_dry,
), "\r\n")

# The actual mail send
server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
print "Logging in..."
server.login(username,password)
print "Logged in as "+username+"."
server.sendmail(From, [To], Body)
server.quit()
print "Email sent."

# Tests whether wter is present.
# returns 0 for dry
# returns 1 for wet
# Change second if to match your water sensor
def RCtime (RCpin):
reading = 0
GPIO.setup(RCpin, GPIO.OUT)
GPIO.output(RCpin, GPIO.LOW)
time.sleep(0.1)
GPIO.setup(RCpin, GPIO.IN)
# This takes about 1 millisecond per loop cycle
while True:
if (GPIO.input(RCpin) == GPIO.LOW):
reading += 1
if reading >= 300: #change this value to fit your moisture sensor
return 0
if (GPIO.input(RCpin) != GPIO.LOW):
return 1

def vattna ():
GPIO.setwarnings(False)
GPIO.setup(18, GPIO.OUT, initial = GPIO.LOW)
while RCtime(17)==0:
print "Watering..."
GPIO.output(18, GPIO.HIGH) #realay at pin 18
time.sleep(1) #This is the ON time for the pump
GPIO.output(18, GPIO.LOW)
time.sleep(1) # This is the wait time to let the water sink into the plant earth

# Main Loop

print 'Waiting for dryness...'
while True:
time.sleep(1)
if RCtime(17) == 0: #Mosit sensor at pin 17
print "Blomkruka is dry!"
while True:
time.sleep(10) #Checks if it is sitll dry after 10 seconds from the first dry report
if RCtime(17) == 1: #Breaks the loop if the sensor is wet
print "Just kidding :)"
time.sleep(2)
print "Waiting for dryness"
break
if RCtime(17) == 0: #starts the pump with vattna()
print "Blomkruka is still dry!"
email('dry')
time.sleep(2)
vattna() #Continues until the sensor is wet again
print "Blomkruka is wet again"
email('wet')
time.sleep(1)
print "Waiting for dryness..."
break

Dold text

Mycket intressant, tack för koden! Ska definitivt anpassa min kod så att den skickar ut mail med temperatur samt när den nu slår av och på elementet.

Jag kopplade in optokopplaren just och allt funkar lika bra som med transistorn:

Så allt jag gjorde nu var att lägga till ett par rader i slutet på scriptet (som uppdaterar websidan med den nya grafen):

last_temp = tempdata_2[-1] GPIO.setmode(GPIO.BCM) GPIO.setup(17,GPIO.OUT) GPIO.setup(22,GPIO.OUT) if last_temp < 19: GPIO.output(17, 1) time.sleep(1) GPIO.output(17, 0) time.sleep(0.5) GPIO.cleanup() elif last_temp > 21: GPIO.output(22, 1) time.sleep(1) GPIO.output(22, 0) time.sleep(0.5) GPIO.cleanup() else: GPIO.cleanup()

Nu blir det att få till det där med utskick av mail samt fixa till hemsidan med lite knappar och webkamera etc. Fan, går att göra en del med RPi utan att vara expert

Permalänk
Medlem
Skrivet av Papaste:

Mycket intressant, tack för koden! Ska definitivt anpassa min kod så att den skickar ut mail med temperatur samt när den nu slår av och på elementet.

Jag kopplade in optokopplaren just och allt funkar lika bra som med transistorn:

http://i.imgur.com/iprtvKy.jpg

http://i.imgur.com/7p5gDzJ.jpg

Så allt jag gjorde nu var att lägga till ett par rader i slutet på scriptet (som uppdaterar websidan med den nya grafen):

last_temp = tempdata_2[-1] GPIO.setmode(GPIO.BCM) GPIO.setup(17,GPIO.OUT) GPIO.setup(22,GPIO.OUT) if last_temp < 19: GPIO.output(17, 1) time.sleep(1) GPIO.output(17, 0) time.sleep(0.5) GPIO.cleanup() elif last_temp > 21: GPIO.output(22, 1) time.sleep(1) GPIO.output(22, 0) time.sleep(0.5) GPIO.cleanup() else: GPIO.cleanup()

Nu blir det att få till det där med utskick av mail samt fixa till hemsidan med lite knappar och webkamera etc. Fan, går att göra en del med RPi utan att vara expert

Du får ta en gäng bilder på det sen när allt är klart
Vad använder du för program för att göra en ritningar?

Permalänk
Medlem
Skrivet av Romoes:

Du får ta en gäng bilder på det sen när allt är klart
Vad använder du för program för att göra en ritningar?

Det ska jag göra! Jag ritade snabbt upp det i https://www.circuitlab.com/. Den har någon slags tidsgräns för hur länge du kan använda sidan, men bara att rensa kakor och cache om du når det. Sedan Print Screen för att spara (annars måste du registrera för att spara ritningar).

Permalänk
Medlem

Hej
Har satt upp detta men måste gjort något galet. För när jag för över filerna kommer filerna över men är tomma. 0kb

Sen hur går det för alla som mixtrar med detta?

Permalänk
Medlem
Skrivet av gurk_82:

Hej
Har satt upp detta men måste gjort något galet. För när jag för över filerna kommer filerna över men är tomma. 0kb

Sen hur går det för alla som mixtrar med detta?

Testa öppna din ftp session och skriv "bin".. tror du överför i fel format. kolla här.. http://www.serv-u.com/newsletter/NewsL2008-03-18.asp

Permalänk
Medlem
Skrivet av gurk_82:

Hej
Har satt upp detta men måste gjort något galet. För när jag för över filerna kommer filerna över men är tomma. 0kb

Sen hur går det för alla som mixtrar med detta?

Det gick ganska bra men var lite trassligt att köra med kryptering på icke-standard port men jag löste det också.

Här är ett exempel på kod för att skicka en bild från pi till min webserver

# Import required libraries import ftplib,os,sys,time,socket from subprocess import call # -------------------------------------------------------------------------------- def sendFile(self): try: sftp=ftplib.FTP_TLS() print " Connecting,", sftp.connect('192.168.10.5',21,10) print "-Done \n Setup secure control connection,", sftp.auth() print "-Done \n Setup secure data connection,", sftp.prot_p() print "-Done \n Login,", sftp.login('test','test') print "-Done" #sftp.retrlines('LIST') sftp.cwd('www') #sftp.retrlines('LIST') sftp.sendcmd("TYPE I") fileHandle=open(self.file) sftp.storbinary('STOR %s' %self.file,fileHandle) sftp.close() fileHandle.close() except: print " ERROR: There was a problem with uploading the image"

Resten av koden hittar du Här

mvh
zonar

Visa signatur

C2D E6300 @ 3.2HGz 1.2V | Thermalright 120 Extr. | Gainward 8800 GT Golden Sample |Samsung 2x500Gb | Corsair VX 550V | Antec P182 [img]http://valid.x86-secret.com/cache/banner/421648.png[/img]

Permalänk
Medlem

Missade helt att det tillkommit mer guider i tråden, kul att det får ringar på vattnet!
Kör hårt!

Själv håller jag på med två projekt nu.. en med RPi, hemlarm och en med Arduino, 3D printer! Kan hända att skrivaren får en RPi för styrning via nätet med webcam

Permalänk
Medlem
Skrivet av mr2clean:

Testa öppna din ftp session och skriv "bin".. tror du överför i fel format. kolla här.. http://www.serv-u.com/newsletter/NewsL2008-03-18.asp

Hej
Jag går in kommandotolken och kopplar upp mig med ftp och skriver bin men det blir ingen skillnad dom kommer upp tomma. Använder även Winscp men dom kommer bara över tomma.

Permalänk
Medlem
Skrivet av gurk_82:

Hej
Jag går in kommandotolken och kopplar upp mig med ftp och skriver bin men det blir ingen skillnad dom kommer upp tomma. Använder även Winscp men dom kommer bara över tomma.

Ok, det låter som rättighetsproblem...kör du som root?

Permalänk
Medlem

Hej
Nej jag logga in som pi. Men skall prova det.