My portable is in a waterproof enclosure, but I have drilled some vent holes in it so outside air can get in. And any hot air generated by the electronics can get out. I'm thinking I may have to add more holes or make them bigger maybe? The vent holes are small so rain and snow can't get on the electronics. I have a couple on each side and a few on the bottom. Build pictures are here, https://1drv.ms/f/s!AjOYwiwlwDtpgq8_0VrdS3_H5xL_AA
Power is supplied by a powerboost 1000c and LIPO battery. Temps did read high so I added a BMP180, mounted externally to read the ambient temps. I also have an Si1145 to read the UV and ambient light levels. I use the light levels to adjust the LED matrix brightness. Here is the code I'm using.
Code: Select all
import os
import time, datetime
import Adafruit_BMP.BMP085 as BMP085
import SI1145.SI1145 as SI1145
import RPi.GPIO as GPIO
from sense_hat import SenseHat, ACTION_PRESSED, ACTION_HELD, ACTION_RELEASED
sense = SenseHat()
sense.set_rotation(180)
sense.set_imu_config(False, False, False)
sense.low_light = False
bmp = BMP085.BMP085()
uvs = SI1145.SI1145()
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(5, GPIO.IN, pull_up_down = GPIO.PUD_OFF)
GPIO.setup(16,GPIO.OUT, initial=1) #Red
GPIO.setup(19,GPIO.OUT, initial=1) #Yellow
GPIO.setup(20,GPIO.OUT, initial=1) #Green
GPIO.setup(21,GPIO.OUT, initial=1) #Blue
s=(0.1) # scroll speed
w=(0) # color all white toggle
o=(165)
L=(1) #LED's on or off
x=(2) #shutdown variable
m=(0)
def Shutdown(channel):
global x
x = (0)
def readvis():
vis = uvs.readVisible()
global w
global o
global L
global m
if vis < 270 and m == (0):
sense.low_light = True
w = (0)
o = (165)
L = (1)
elif vis >= 270 and vis < 500 and m == (0):
sense.low_light = False
w = (0)
o = (165)
L = (0)
elif vis >= 500 and m == (0):
sense.low_light = False
w = (255)
o = (255)
L = (0)
# is really stick down
def pushed_up(event):
global L
global m
if event.action == ACTION_PRESSED:
sense.low_light = True
L = (1)
m = (1)
# is really stick up
def pushed_down(event):
global L
global m
if event.action == ACTION_PRESSED:
sense.low_light = False
L = (0)
m = (1)
#is really stick right
def pushed_left(event):
global w
global o
global m
if event.action == ACTION_PRESSED:
w = (255)
o = (255)
m = (1)
# is really stick left
def pushed_right(event):
global w
global o
global m
if event.action == ACTION_PRESSED:
w = (0)
o = (165)
m = (1)
def pushed_middle(event):
global m
if event.action == ACTION_PRESSED:
m = (0)
sense.stick.direction_up = pushed_up
sense.stick.direction_down = pushed_down
sense.stick.direction_left = pushed_left
sense.stick.direction_right = pushed_right
sense.stick.direction_middle = pushed_middle
GPIO.add_event_detect(5, GPIO.FALLING, callback = Shutdown, bouncetime = 2000)
while True:
readvis()
dateString = "%A %B %-d %-I:%M %p"
msg = "It is %s" % (datetime.datetime.now().strftime(dateString))
sense.show_message(msg, scroll_speed=s, text_colour=(w, 255, 255))
t = bmp.read_temperature()
t = (round(t))
if t <= 0:
tc = [w, w, 255] # Blue
GPIO.output(16, 1) # Red
GPIO.output(19, 1) # Yellow
GPIO.output(20, 1) # Green
GPIO.output(21, L) # Blue <
elif t > 0 and t < 13:
tc = [255, 255, w] # Yellow
GPIO.output(16, 1) # Red
GPIO.output(19, L) # Yellow <
GPIO.output(20, 1) # Green
GPIO.output(21, 1) # Blue
elif t >= 13 and t <= 25:
tc = [w, 255, w] # Green
GPIO.output(16, 1) # Red
GPIO.output(19, 1) # Yellow
GPIO.output(20, L) # Green <
GPIO.output(21, 1) # Blue
else:
tc = [255, w, w] # Red
GPIO.output(16, L) # Red <
GPIO.output(19, 1) # Yellow
GPIO.output(20, 1) # Green
GPIO.output(21, 1) # Blue
msg = "and %sc" % (t)
sense.show_message(msg, scroll_speed=s, text_colour=tc)
h = sense.get_humidity()
h = (round(h))
if h > 100:
h = 100
elif h >= 30 and h <= 60:
hc = [w, 255, w] # Green
msg = "with %s%% Humidity" % (h)
sense.show_message(msg, scroll_speed=s, text_colour=hc)
elif h > 60 and h < 80:
hc = [255, 255, w] # Yellow
msg = "with %s%% Humidity" % (h)
sense.show_message(msg, scroll_speed=s, text_colour=hc)
else:
hc = [255, w, w] # Red
msg = "with %s%% Humidity" % (h)
sense.show_message(msg, scroll_speed=s, text_colour=hc)
readvis()
ph = bmp.read_pressure()
p = ph / 100
p = round(p)
if p > 0 and p < 985:
pc = [255, w, w] # Red
msg = "- Barometer is Very Low @ %smb - Storm Watch" % (p)
sense.show_message(msg, scroll_speed=s, text_colour=pc)
elif p >= 985 and p < 1005:
pc = [255, 255, w] # Yellow
msg = "- Barometer is Low @ %smb - Possible Percipitation" % (p)
sense.show_message(msg, scroll_speed=s, text_colour=pc)
elif p >= 1005 and p < 1025:
pc = [w, 255, w] # Green
msg = "- Barometer is Mid Range @ %smb" % (p)
sense.show_message(msg, scroll_speed=s, text_colour=pc)
elif p >= 1025 and p < 1050:
pc = [w, w, 255] # Blue
msg = "- Barometer is High @ %smb" % (p)
sense.show_message(msg, scroll_speed=s, text_colour=pc)
elif p >= 1050:
pc = [255, w, w] # Red
msg = "- Barometer is Very High @ %smb - Expect Dry Conditions" % (p)
sense.show_message(msg, scroll_speed=s, text_colour=pc)
uv = uvs.readUV()
u = uv/100
u = (round(u))
if u > 0 and u < 3 and L == 0:
msg = "- UV Index is Low @ %s" % (u)
sense.show_message(msg, scroll_speed=s, text_colour=(w, 255, w)) # Green
elif u >= 3 and u < 6 and L == 0:
msg = "- UV Index is Moderate @ %s" % (u)
sense.show_message(msg, scroll_speed=s, text_colour=(255, 255, w)) # Yellow
elif u >= 6 and u < 8 and L == 0:
msg = "- UV Index is High @ %s" % (u)
sense.show_message(msg, scroll_speed=s, text_colour=(255, o, w)) # Orange
elif u >= 8 and u < 11 and L == 0:
msg = "- UV Index is Very High @ %s" % (u)
sense.show_message(msg, scroll_speed=s, text_colour=(255, w ,w)) # Red
elif u >= 11 and L == 0:
msg = "- UV Index is Extreme @ %s" % (u)
sense.show_message(msg, scroll_speed=s, text_colour=(255, w, 255)) # Violet
#vis = uvs.readVisible()
#msg = "and the VIS is %s" % (vis)
#sense.show_message(msg, scroll_speed=s, text_colour=(255, w, 255))
if x == 0:
sense.clear()
os.system("sudo shutdown now -P")
time.sleep(30)
elif x == 1:
sense.clear()
raise SystemExit
time.sleep(30)
# Last edited on April 12th 2018
# run sudo crontab -e
# add
# @reboot python3 /home/pi/THPU.py &