Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from os import system
- import curses
- import time
- import datetime
- import os
- import random
- from sense_hat import SenseHat
- from time import sleep
- import numpy as np
- import RPi.GPIO as GPIO
- GPIO.setmode(GPIO.BCM)
- GPIO.setup(11,GPIO.OUT) #led Red
- GPIO.setup(9,GPIO.OUT) #led Green
- GPIO.setup(10,GPIO.OUT) #led Yellow
- GPIO.output(11, GPIO.HIGH)
- GPIO.output(9, GPIO.HIGH)
- GPIO.output(10, GPIO.HIGH)
- sense = SenseHat()
- os.environ["NCURSES_NO_UTF8_ACS"] = "1"
- curses.initscr()
- curses.halfdelay(3)
- curses.start_color()
- curses.init_pair(1, curses.COLOR_BLACK, curses.COLOR_WHITE)
- curses.init_pair(2, curses.COLOR_WHITE, curses.COLOR_BLUE)
- curses.init_pair(3, curses.COLOR_BLACK, curses.COLOR_YELLOW)
- curses.init_pair(4, curses.COLOR_BLUE, curses.COLOR_WHITE)
- start_time = time.time()
- start_hour = time.time()
- # get CPU temperature
- def get_cpu_temp():
- res = os.popen("vcgencmd measure_temp").readline()
- t = float(res.replace("temp=","").replace("'C\n",""))
- return(t)
- # use moving average to smooth readings
- def get_smooth(x):
- if not hasattr(get_smooth, "t"):
- get_smooth.t = [x,x,x]
- get_smooth.t[2] = get_smooth.t[1]
- get_smooth.t[1] = get_smooth.t[0]
- get_smooth.t[0] = x
- xs = (get_smooth.t[0]+get_smooth.t[1]+get_smooth.t[2])/3
- return(xs)
- # calculates the real temperature compesating CPU heating
- def get_temp():
- t1 = sense.get_temperature_from_humidity()
- t2 = sense.get_temperature_from_pressure()
- t_cpu = get_cpu_temp()
- h = sense.get_humidity()
- p = sense.get_pressure()
- t = (t1+t2)/2
- t_corr = t - ((t_cpu-t)/1.25)
- t_corr = get_smooth(t_corr)
- f_corr = round(((t_corr * 9)/5)+32,1)
- return(f_corr)
- def sendlog():
- os.system("mpack -s picorder -a /home/pi/picordlog.txt d10d3.email@gmail.com")
- def logfile(logstring):
- global start_time
- global start_hour
- current_time=time.time()
- if current_time>start_time+180:
- x = datetime.datetime.now()
- tstamp = datetime.datetime(x.year,x.month,x.day,x.hour,x.minute)
- #local_time=time.ctime(current_time)
- f= open("/home/pi/picordlog.txt","a+")
- logstring=str(tstamp)+","+logstring
- f.write(logstring+"\r\n")
- f.close()
- start_time = time.time()
- if current_time>start_hour+3600:
- start_hour = time.time()
- sendlog()
- def BlinkinLights():
- grid = []
- for i in range(0,64):
- n = random.randint(0, 4)
- if n == 0:
- r = random.randint(0,100)
- b = random.randint(0,100)
- g = random.randint(0,100)
- grid.append ([r,g,b])
- else:
- grid.append ([0,0,0])
- sense.set_pixels(grid)
- def GetTemp_old():
- t = sense.get_temperature()
- t = round(t, 1)
- fconv = ((t * 9)/5)+32
- f = round(fconv,1)
- sleep (0.5)
- return f
- def display():
- k = 0
- #background Window
- bgw = curses.newwin(12,37,0,0)
- bgw.border(0)
- bgw.attron(curses.color_pair(4))
- for x in range(0,37):
- for y in range(0,12):
- try:
- bgw.addch(y,x," ")
- except curses.error:
- pass
- bgw.refresh()
- #Disply loop
- while (k != ord('q')):
- BlinkinLights()
- #Temperature
- t = get_temp()
- win_t = curses.newwin(3, 32, 0, 2)
- win_t.attron(curses.color_pair(1))
- win_t.border(0)
- rangex = (30 / float(120)) * t
- pos = int(rangex)
- if pos<1:
- pos = 0
- display = ' '
- if pos != 0:
- win_t.addstr(1, 1, "{}".format(display*pos),curses.color_pair(3))
- win_t.addstr(0,2,"Temp(f): " + str(t))
- win_t.refresh()
- #Pressure
- p = sense.get_pressure()
- p = round(p, 1)
- win_p = curses.newwin(3, 32, 3, 2)
- win_p.attron(curses.color_pair(1))
- win_p.border(0)
- rangex = (30 / float(1260)) * p
- pos = int(rangex)
- display = ' '
- if pos != 0:
- win_p.addstr(1, 1, "{}".format(display*pos),curses.color_pair(3))
- win_p.addstr(0,2,"Pressure(mb): " + str(p))
- win_p.refresh()
- #Humidity
- h = sense.get_humidity()
- h = round(h, 1)
- win_h = curses.newwin(3, 32, 6, 2)
- win_h.attron(curses.color_pair(1))
- win_h.border(0)
- rangex = (30 / float(100)) * h
- pos = int(rangex)
- display = ' '
- if pos != 0:
- win_h.addstr(1, 1, "{}".format(display*pos),curses.color_pair(3))
- win_h.addstr(0,2,"Humidity(%): " + str(h))
- win_h.refresh()
- #Magnetics
- raw = sense.get_compass_raw()
- mx = round(raw["x"],5)
- my = round(raw["y"],5)
- mz = round(raw["z"],5)
- m_av = round((mx+my+mz)/3,2)
- win_m = curses.newwin(3, 32, 9, 2)
- win_m.attron(curses.color_pair(1))
- win_m.border(0)
- rangex = (30 / float(800)) * (h+600)
- pos = int(rangex)
- display = ' '
- if pos != 0:
- win_m.addstr(1, 1, "{}".format(display*pos),curses.color_pair(3))
- win_m.addstr(0,2,"Ave. Magnetic Flux(uT): " + str(m_av))
- win_m.refresh()
- #logging
- logstring =str(t)+","+str(p)+","+str(h)+","+str(m_av)
- logfile(logstring)
- k = win_t.getch()
- sleep(5)
- def menu():
- k = 0
- #background Window
- win = curses.newwin(12,37,0,0)
- win.border(0)
- win.attron(curses.color_pair(4))
- while (k != ord('q')):
- for x in range(0,37):
- for y in range(0,12):
- try:
- win.addch(y,x," ")
- except curses.error:
- pass
- win.addstr(3,3,"T: Display Temperature",curses.color_pair(2))
- win.addstr(4,3,"Q: Quit",curses.color_pair(2))
- win.refresh()
- k = win.getch()
- if k == ord('t'):
- temp_graph()
- try:
- display()
- except curses.error:
- pass
- #Close down curses properly, inc turn echo back on!
- curses.nocbreak(); curses.echo()
- curses.endwin()
- GPIO.cleanup() # cleanup all GPIO
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement