This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Last revision Both sides next revision | ||
raspberry_lcd_nexa [2015/01/16 10:35] ekorre [Fördberedelser] |
raspberry_lcd_nexa [2015/01/16 12:00] ekorre [Utveckling] |
||
---|---|---|---|
Line 2: | Line 2: | ||
//Av: Johan.S & Micke.K// | //Av: Johan.S & Micke.K// | ||
- | Vi frånsäger oss allt ansvar och skador detta script kan ge. | + | //"Vi frånsäger oss allt ansvar och skador detta script kan ge. |
Har ingen support,och har ingen Garanti. men hjälper gärna till i mån av tid. | Har ingen support,och har ingen Garanti. men hjälper gärna till i mån av tid. | ||
Detta script är fortfarande under utveckling och versionen idag är: **V.15.1.15** \\ | Detta script är fortfarande under utveckling och versionen idag är: **V.15.1.15** \\ | ||
- | Du får gärna dela med dig av scriptet om du hänvisar hit, modifiera det (dela gärna med dig av förbättringar). Men inte sälja det eller någon del av det. | + | Du får gärna dela med dig av scriptet om du hänvisar hit, modifiera det (dela gärna med dig av förbättringar). Men inte sälja det eller någon del av det. // |
Line 61: | Line 61: | ||
====Filerna==== | ====Filerna==== | ||
+ | |||
+ | Det är 5(4)st filer som behövs, den 5e är enbart för Kamran. | ||
+ | Har du inte tänkt använda den kan du skippa den filen. | ||
+ | Första 3st är från Adafruit och är för Lcd kitet. Har du kört deras tuturial har du säkert redan dom annar ladda ner dom här: | ||
+ | |||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | **Huvudscripet** | ||
+ | |||
+ | Sök efter xx och byt ut värderna där. | ||
+ | Om jag inte missat nåt så är det 2 ställen: | ||
+ | * Tempgivarna | ||
+ | * Sökvägen till camera scriptet | ||
+ | |||
+ | <file python lcdnexameny.py> | ||
+ | # | ||
+ | |||
+ | import subprocess | ||
+ | import smbus | ||
+ | import socket | ||
+ | import os | ||
+ | |||
+ | from time import sleep, strftime | ||
+ | from Adafruit_I2C import Adafruit_I2C | ||
+ | from Adafruit_MCP230xx import Adafruit_MCP230XX | ||
+ | from Adafruit_CharLCDPlate import Adafruit_CharLCDPlate | ||
+ | from datetime import datetime | ||
+ | from subprocess import * | ||
+ | |||
+ | |||
+ | def run_cmd(cmd): | ||
+ | p = Popen(cmd, shell=True, stdout=PIPE) | ||
+ | output = p.communicate()[0] | ||
+ | return output | ||
+ | |||
+ | |||
+ | #Definera temperatur sensorerm | ||
+ | otempid = " | ||
+ | itempid = " | ||
+ | |||
+ | # use busnum = 0 for raspi version 1 (256MB) and busnum = 1 for version 2 | ||
+ | lcd = Adafruit_CharLCDPlate(busnum = 1) | ||
+ | # clear display | ||
+ | lcd.clear() | ||
+ | |||
+ | rakna = 0 #Variabel for halla reda pa tiden for backlight mm | ||
+ | huvudtid1 = 30 # =3 sekunder. Tiden hududmeny ska lysa och hur lange submenyerna ska visas. | ||
+ | huvudtid2 = 60 # tiden till huvudmeny slacks | ||
+ | hitta_ipadress_e = "ip addr show eth0 | grep inet | awk ' | ||
+ | ipadress_e = run_cmd(hitta_ipadress_e) #kollar ip | ||
+ | hitta_ipadress_w = "ip addr show wlan0 | grep inet | awk ' | ||
+ | ipadress_w = run_cmd(hitta_ipadress_w) #kollar ip | ||
+ | select_enabled = 0 # aktivera select valet for nexa menyn | ||
+ | select_lista = [] | ||
+ | select_list_val = 0 | ||
+ | |||
+ | |||
+ | #funktion for att lasa in data till selectmenyn: | ||
+ | def run_command(command): | ||
+ | p = subprocess.Popen(command, | ||
+ | return iter(p.stdout.readline, | ||
+ | |||
+ | #kommando for att hamta listan fran tdtool | ||
+ | command = ' | ||
+ | |||
+ | #kor en for-loop for att skapa en lista | ||
+ | for line in run_command(command.split()): | ||
+ | |||
+ | first = line.find(' | ||
+ | second = line.rfind(' | ||
+ | #hoppa over allt som innehaller temperature | ||
+ | if(line.find(" | ||
+ | continue | ||
+ | #hoppa over allt som innehaller MODEL | ||
+ | if(line.find(" | ||
+ | continue | ||
+ | |||
+ | if (first > 0): | ||
+ | select_lista.append(line[first: | ||
+ | ##AVSLUT | ||
+ | |||
+ | |||
+ | ##HITTA ETT OBJEKT I LISTAN | ||
+ | print select_lista | ||
+ | print len(select_lista) | ||
+ | #SKRIV UT ETT NAMN UR LISTAN | ||
+ | |||
+ | |||
+ | while 1: | ||
+ | sleep(0.1) | ||
+ | |||
+ | |||
+ | #tar den till top sidan och lange top sidan i vilolaget | ||
+ | rakna = rakna + 1 | ||
+ | if (rakna > huvudtid1 and rakna < huvudtid2): | ||
+ | lcd.clear() | ||
+ | lcd.message(datetime.now().strftime(' | ||
+ | if (rakna >= huvudtid2): | ||
+ | # | ||
+ | lcd.clear() | ||
+ | lcd.backlight(lcd.OFF) | ||
+ | lcd.message(datetime.now().strftime(' | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | # vanster knapp | ||
+ | if (lcd.buttonPressed(lcd.LEFT)): | ||
+ | lcd.clear() | ||
+ | lcd.message(" | ||
+ | command2 = " | ||
+ | #testa run_cmd istallet | ||
+ | run_cmd(command2) | ||
+ | # | ||
+ | lcd.backlight(lcd.ON) | ||
+ | rakna = 0 | ||
+ | sleep(5) | ||
+ | # uppat knapp | ||
+ | if (lcd.buttonPressed(lcd.UP)): | ||
+ | lcd.clear() | ||
+ | lcd.message(datetime.now().strftime(' | ||
+ | lcd.backlight(lcd.ON) | ||
+ | rakna = 0 | ||
+ | # nerat knapp | ||
+ | if (lcd.buttonPressed(lcd.DOWN)): | ||
+ | lcd.clear() | ||
+ | lcd.message(" | ||
+ | indoor = "" | ||
+ | outdoor = "" | ||
+ | |||
+ | for line in run_command(command.split()): | ||
+ | first = line.find(' | ||
+ | second = line.rfind(' | ||
+ | #hoppa over allt som innehaller temperature | ||
+ | if(line.find(" | ||
+ | temp_variabel = line[first: | ||
+ | first = temp_variabel.find(' | ||
+ | second = temp_variabel.rfind(' | ||
+ | temp_variabel = temp_variabel[first: | ||
+ | |||
+ | if(temp_variabel.find(itempid) > -1 ): | ||
+ | first = temp_variabel.find(' | ||
+ | indoor = temp_variabel[first: | ||
+ | elif(temp_variabel.find(otempid) > -1 ): | ||
+ | first = temp_variabel.find(' | ||
+ | outdoor = temp_variabel[first: | ||
+ | |||
+ | # | ||
+ | #hoppa over allt som innehaller MODEL | ||
+ | #if (first > 0): | ||
+ | # | ||
+ | ##AVSLUT | ||
+ | |||
+ | lcd.clear() | ||
+ | lcd.message(" | ||
+ | |||
+ | lcd.backlight(lcd.ON) | ||
+ | rakna = 0 | ||
+ | # hoger knapp | ||
+ | if (lcd.buttonPressed(lcd.RIGHT)): | ||
+ | lcd.clear() | ||
+ | lcd.message(' | ||
+ | lcd.backlight(lcd.ON) | ||
+ | rakna = 0 | ||
+ | |||
+ | if (lcd.buttonPressed(lcd.SELECT)): | ||
+ | lcd.backlight(lcd.ON) | ||
+ | select_enabled = 1 | ||
+ | select_list_val = 0 | ||
+ | sleep (0.5) | ||
+ | lcd.clear() | ||
+ | lcd.message(" | ||
+ | while select_enabled: | ||
+ | if (lcd.buttonPressed(lcd.SELECT)): | ||
+ | select_enabled = 0 | ||
+ | lcd.clear() | ||
+ | lcd.message(" | ||
+ | sleep(1) | ||
+ | sleep(0.15) | ||
+ | if (lcd.buttonPressed(lcd.UP)): | ||
+ | #print select_list_val #for debug | ||
+ | #print len(select_lista) #for debug | ||
+ | lcd.clear() | ||
+ | select_list_val = select_list_val - 1 #oka menyval med ett | ||
+ | #om listan e slut borja om fran borjan. | ||
+ | #print select_list_val | ||
+ | if(select_list_val < 0 ): | ||
+ | select_list_val = len(select_lista) - 1 | ||
+ | #print " | ||
+ | lcd.message(" | ||
+ | sleep(0.05) | ||
+ | if (lcd.buttonPressed(lcd.DOWN)): | ||
+ | print select_list_val | ||
+ | #print select_list_val #for debug | ||
+ | #print len(select_lista) #for debug | ||
+ | lcd.clear() | ||
+ | select_list_val = select_list_val + 1 #oka menyval med ett | ||
+ | #om listan e slut borja om fran borjan. | ||
+ | if(len(select_lista) < (select_list_val)+1): | ||
+ | select_list_val = 0 | ||
+ | #print " | ||
+ | lcd.message(" | ||
+ | sleep(0.05) | ||
+ | |||
+ | if (lcd.buttonPressed(lcd.RIGHT)): | ||
+ | run_cmd(" | ||
+ | if (lcd.buttonPressed(lcd.LEFT)): | ||
+ | run_cmd(" | ||
+ | |||
+ | rakna = 0 | ||
+ | |||
+ | |||
+ | </ | ||
+ | |||
+ | **Kamera scriptet** | ||
+ | Det den gör är ta en bild med " | ||
+ | |||
+ | <file python selfi.sh> | ||
+ | #!/bin/bash | ||
+ | |||
+ | PICTURE=$(date +" | ||
+ | SOURCE=/tmp | ||
+ | DESTINATION=/ | ||
+ | |||
+ | GETCOUNT=$(ps aux | grep raspistill | grep -v grep | wc -l) | ||
+ | |||
+ | if [ " | ||
+ | then | ||
+ | echo inga raspistill processer kors.. fortsatter... | ||
+ | raspistill -vf -hf -w 640 -h 480 -q 75 -o $SOURCE/ | ||
+ | mount -t cifs -o " | ||
+ | cp $SOURCE/ | ||
+ | rm $SOURCE/ | ||
+ | sync;sync | ||
+ | umount /mnt | ||
+ | echo allt verkar i sin ordning... | ||
+ | else | ||
+ | echo RASPISTILL ALREADY RUNNING! | ||
+ | fi | ||
+ | </ | ||
+ | |||
+ | |||
+ | ====Problem==== | ||
+ | Det största problemen vi stött på är att Kamerafunktionen hänger hela Raspberryn.\\ | ||
+ | Men den senaste versionen v15.1.15 så har det inte uppstått än.\\ | ||
+ | ====Utveckling==== | ||
+ | Inga större ändringar är planerade i dagsläget.\\ | ||
+ | Det enda är att vi ska få den att köras som en service, just nu körs den manuellt med screen.\\ | ||
+ | Göra någon form av larm finns i tankarna också, men blir nog separat projekt. |