3korre.se

by ekorrar for ekorrar!

User Tools

Site Tools


raspberry_lcd_nexa

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
raspberry_lcd_nexa [2015/01/16 11:27]
ekorre [Raspberry Pi LCD Display med meny för Nexa]
raspberry_lcd_nexa [2015/01/16 12:00]
ekorre [Utveckling]
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://3korre.se/download/Adafruit_CharLCDPlate.pyc|Adafruit_CharLCDPlate.pyc]]
 +  * [[http://3korre.se/download/Adafruit_I2C.pyc|Adafruit_I2C.pyc]]
 +  * [[http://3korre.se/download/Adafruit_MCP230xx.pyc|Adafruit_MCP230xx.pyc]]
 +
 +**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>
 +#!/usr/bin/python
 +
 +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 = "xx"
 +itempid = "xx"
 +
 +# 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 '{print $2}' | cut -d/ -f1" #kollar ipadressen
 +ipadress_e = run_cmd(hitta_ipadress_e) #kollar ip
 +hitta_ipadress_w = "ip addr show wlan0 | grep inet | awk '{print $2}' | cut -d/ -f1" #kollar ipadressen
 +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,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
 + return iter(p.stdout.readline, b'')
 +
 +#kommando for att hamta listan fran tdtool
 +command = 'tdtool --list'
 +
 +#kor en for-loop for att skapa en lista
 +for line in run_command(command.split()):
 +
 + first = line.find('\t') + 1 #hitta forsta \t <- tab
 + second = line.rfind('\t') #hitta andra \t <- tab
 + #hoppa over allt som innehaller temperature
 + if(line.find("temperature",first,second) > -1 ):
 + continue
 + #hoppa over allt som innehaller MODEL 
 + if(line.find("MODEL",first,second) > -1 ):
 + continue
 +
 + if (first > 0):
 + select_lista.append(line[first:second]) #spara endast namnet i en lista
 +##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('%b %d  %H:%M:%S\n'))
 + if (rakna >= huvudtid2):
 + #lcd.backlight(lcd.OFF)
 + lcd.clear()
 + lcd.backlight(lcd.OFF)
 + lcd.message(datetime.now().strftime('%b %d  %H:%M:%S\n'))
 +
 +
 +
 +
 + # vanster knapp
 + if (lcd.buttonPressed(lcd.LEFT)):
 + lcd.clear()
 + lcd.message("SELFIE INC!")
 + command2 = "xx/sökväg/xxselfie.sh"
 + #testa run_cmd istallet
 + run_cmd(command2)
 + #run_command(command2.split())
 + lcd.backlight(lcd.ON)
 + rakna = 0
 + sleep(5)
 + # uppat knapp
 + if (lcd.buttonPressed(lcd.UP)):  
 + lcd.clear()
 + lcd.message(datetime.now().strftime('%b %d  %H:%M:%S\n'))
 + lcd.backlight(lcd.ON)
 + rakna = 0
 + # nerat knapp
 + if (lcd.buttonPressed(lcd.DOWN)):
 + lcd.clear()
 + lcd.message("UPPDATERAR")
 + indoor = "" #temperatur inne
 + outdoor = "" #temperatur ute
 +
 + for line in run_command(command.split()):
 + first = line.find('\t') + 1 #hitta forsta \t <- tab
 + second = line.rfind('\t') #hitta andra \t <- tab
 + #hoppa over allt som innehaller temperature
 + if(line.find("temperaturehumidity",first,second) > -1 ):
 + temp_variabel = line[first:second]
 + first = temp_variabel.find('\t') + 1 #hitta forsta \t <- tab
 + second = temp_variabel.rfind('\t') #hitta andra \t <- tab
 + temp_variabel = temp_variabel[first:(second-2)]
 +
 + if(temp_variabel.find(itempid) > -1 ):
 + first = temp_variabel.find('\t') + 1
 + indoor = temp_variabel[first:(len(temp_variabel))]
 + elif(temp_variabel.find(otempid) > -1 ):
 + first = temp_variabel.find('\t') + 1
 + outdoor = temp_variabel[first:(len(temp_variabel))]
 +
 + #continue
 + #hoppa over allt som innehaller MODEL 
 + #if (first > 0):
 + # select_lista.append(line[first:second]) #spara endast namnet i en lista
 + ##AVSLUT
 +
 + lcd.clear()
 + lcd.message("Indoor : " + indoor + "\noutdoor: " + outdoor)
 +
 + lcd.backlight(lcd.ON)
 + rakna = 0
 + # hoger knapp
 + if (lcd.buttonPressed(lcd.RIGHT)):
 + lcd.clear()
 + lcd.message('E' + ipadress_e + '\nW' + ipadress_w)
 + 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("Enhet: %s\n V=on H=off" %(select_lista[select_list_val]))
 + while select_enabled:
 + if (lcd.buttonPressed(lcd.SELECT)):
 + select_enabled = 0
 + lcd.clear()
 + lcd.message("Lamnar nu Nexa\nmenyn")
 + 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 "komhit"
 + lcd.message("Enhet: %s\n V=on H=Off" %(select_lista[select_list_val])) #valj menyitem
 + 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 "komhit"
 + lcd.message("Enhet: %s\n V=on H=Off" %(select_lista[select_list_val])) #valj menyitem
 + sleep(0.05)
 +
 + if (lcd.buttonPressed(lcd.RIGHT)):
 + run_cmd("tdtool --off " + (select_lista[select_list_val]) )
 + if (lcd.buttonPressed(lcd.LEFT)):
 + run_cmd("tdtool --on " + (select_lista[select_list_val]) )
 +
 + rakna = 0
 +
 +
 +</file>
 +
 +**Kamera scriptet**
 +Det den gör är ta en bild med "raspistill" (alla variablar kan läsa i scriptet) och lägger bilden på en nätverks utdelning. Vill man så kan man ändra det till usbdisk, mapp etc. Sök efter xx och byt ut.
 +
 +<file python selfi.sh>
 +#!/bin/bash
 +
 +PICTURE=$(date +"%Y-%m-%d_%H%M").jpg
 +SOURCE=/tmp
 +DESTINATION=/mnt
 +
 +GETCOUNT=$(ps aux | grep raspistill | grep -v grep | wc -l)
 +
 +if [ "$GETCOUNT" -eq 0 ]
 +then
 + echo inga raspistill processer kors.. fortsatter...
 + raspistill -vf -hf -w 640 -h 480 -q 75 -o $SOURCE/$PICTURE
 + mount -t cifs -o "username=xx,password=xx" //xxdisk/xxshare $DESTINATION
 + cp $SOURCE/$PICTURE $DESTINATION/$PICTURE
 + rm $SOURCE/$PICTURE
 + sync;sync
 + umount /mnt
 + echo allt verkar i sin ordning...
 +else
 + echo RASPISTILL ALREADY RUNNING!
 +fi
 +</file>
 +
 +
 +====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.
raspberry_lcd_nexa.txt · Last modified: 2015/01/16 12:04 by ekorre