198 lines
7 KiB
Python
198 lines
7 KiB
Python
# SPDX-FileCopyrightText: 2021 Liz Clark for Adafruit Industries
|
|
#
|
|
# SPDX-License-Identifier: MIT
|
|
|
|
import time
|
|
import board
|
|
import simpleio
|
|
import adafruit_sgp30
|
|
import displayio
|
|
import adafruit_imageload
|
|
from adafruit_emc2101 import EMC2101
|
|
from adafruit_funhouse import FunHouse
|
|
|
|
i2c = board.I2C() # uses board.SCL and board.SDA
|
|
# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
|
|
|
|
# setup for SGP30 sensor
|
|
sgp30 = adafruit_sgp30.Adafruit_SGP30(i2c)
|
|
# setup for fan controller
|
|
emc = EMC2101(i2c)
|
|
|
|
print("SGP30 serial #", [hex(i) for i in sgp30.serial])
|
|
|
|
#SGP30 start-up
|
|
sgp30.iaq_init()
|
|
sgp30.set_iaq_baseline(0x8973, 0x8AAE)
|
|
|
|
# FunHouse setup
|
|
funhouse = FunHouse(default_bg=0x0F0F00)
|
|
# start-up bitmap
|
|
bitmap, palette = adafruit_imageload.load("/scene1_fume.bmp",
|
|
bitmap=displayio.Bitmap,
|
|
palette=displayio.Palette)
|
|
tile_grid = displayio.TileGrid(bitmap, pixel_shader=palette)
|
|
# connecting bitmap
|
|
bitmap2, palette2 = adafruit_imageload.load("/scene2_fume.bmp",
|
|
bitmap=displayio.Bitmap,
|
|
palette=displayio.Palette)
|
|
grid2 = displayio.TileGrid(bitmap2, pixel_shader=palette2)
|
|
# default background
|
|
bitmap3, palette3 = adafruit_imageload.load("/scene3_fume.bmp",
|
|
bitmap=displayio.Bitmap,
|
|
palette=displayio.Palette)
|
|
grid3 = displayio.TileGrid(bitmap3, pixel_shader=palette3)
|
|
# internet connection icon
|
|
bitmap4, palette4 = adafruit_imageload.load("/connect_icon.bmp",
|
|
bitmap=displayio.Bitmap,
|
|
palette=displayio.Palette)
|
|
icon1 = displayio.TileGrid(bitmap4, pixel_shader=palette4, x = 2, y = 2)
|
|
# red x icon
|
|
bitmap5, palette5 = adafruit_imageload.load("/x_icon.bmp",
|
|
bitmap=displayio.Bitmap,
|
|
palette=displayio.Palette)
|
|
icon2 = displayio.TileGrid(bitmap5, pixel_shader=palette5, x = 2, y = 2)
|
|
# display group
|
|
group = displayio.Group()
|
|
# adding start-up bitmap to group
|
|
group.append(tile_grid)
|
|
funhouse.splash.append(group)
|
|
# text for fume data
|
|
fume_text = funhouse.add_text(
|
|
text=" ",
|
|
text_position=(110, 90),
|
|
text_anchor_point=(0.5, 0.5),
|
|
text_color=0xf57f20,
|
|
text_font="fonts/Arial-Bold-24.pcf",
|
|
)
|
|
# text for fan RPM data
|
|
fan_text = funhouse.add_text(
|
|
text=" ",
|
|
text_position=(110, 165),
|
|
text_anchor_point=(0.5, 0.5),
|
|
text_color=0x7fffff,
|
|
text_font="fonts/Arial-Bold-24.pcf",
|
|
)
|
|
# showing graphics
|
|
funhouse.display.show(funhouse.splash)
|
|
|
|
# state machines
|
|
run = False # state if main code is running
|
|
connected = False # checks if connected to wifi
|
|
start_up = False # state for start-up
|
|
clock = 0 # time.monotonic() device
|
|
|
|
# function for sending fume data to adafruit.io
|
|
def send_fume_data(solder_fumes):
|
|
funhouse.network.push_to_io("fumes", solder_fumes)
|
|
|
|
# function for sending fan rpm to adafruit.io
|
|
def send_fan_data(fan_rpm):
|
|
funhouse.network.push_to_io("fan-speed", fan_rpm)
|
|
|
|
while True:
|
|
# if main program has not started
|
|
if not run:
|
|
# if you press the down button
|
|
if funhouse.peripherals.button_down:
|
|
print("run")
|
|
# remove start-up bitmap
|
|
group.remove(tile_grid)
|
|
# add main bitmap
|
|
group.append(grid3)
|
|
# add red x icon to show not connected to internet
|
|
group.append(icon2)
|
|
# change state for main program
|
|
run = True
|
|
# if you press the middle button
|
|
if funhouse.peripherals.button_sel:
|
|
# remove start-up bitmap
|
|
group.remove(tile_grid)
|
|
# add connecting... bitmap
|
|
group.append(grid2)
|
|
# connect to the network
|
|
funhouse.network.connect()
|
|
print("connecting")
|
|
# change state for network
|
|
connected = True
|
|
# start main program
|
|
start_up = True
|
|
# start time.monotonic()
|
|
clock = time.monotonic()
|
|
# after connecting to the internet
|
|
if start_up:
|
|
# remove connecting bitmap
|
|
group.remove(grid2)
|
|
# add main bitmap
|
|
group.append(grid3)
|
|
# add internet icon
|
|
group.append(icon1)
|
|
# start main program
|
|
run = True
|
|
# reset start-up state
|
|
start_up = False
|
|
|
|
# run state for main program after selecting whether or not to connect to wifi
|
|
if run:
|
|
# print eCO2 and TVOC data to REPL
|
|
print("eCO2 = %d ppm \t TVOC = %d ppb" % (sgp30.eCO2, sgp30.TVOC))
|
|
# 2 second delay
|
|
time.sleep(2)
|
|
|
|
# fumes variable for reading from SGP30
|
|
# comment out either TVOC or eCO2 depending on data preference
|
|
fumes = sgp30.TVOC
|
|
# fumes = sgp30.eCO2
|
|
|
|
# mapping fumes data to fan RPM
|
|
# value for TVOC
|
|
mapped_val = simpleio.map_range(fumes, 10, 1000, 10, 100)
|
|
# value for eCO2
|
|
# mapped_val = simpleio.map_range(fumes, 400, 2500, 10, 100)
|
|
|
|
# adding fume text
|
|
# PPB is for TVOC, PPM is for eCO2
|
|
funhouse.set_text("%d PPB" % fumes, fume_text)
|
|
# funhouse.set_text("%d PPM" % fumes, fume_text)
|
|
|
|
# adding fan's RPM text
|
|
funhouse.set_text("%d%s" % (mapped_val, "%"), fan_text)
|
|
# printing fan's data to the REPL
|
|
print("fan = ", mapped_val)
|
|
# setting fan's RPM
|
|
emc.manual_fan_speed = int(mapped_val)
|
|
|
|
# if you're connected to wifi and 15 seconds has passed
|
|
if connected and ((clock + 15) < time.monotonic()):
|
|
# send fume data to adafruit.io
|
|
send_fume_data(fumes)
|
|
# send fan RPM to adafruit.io
|
|
send_fan_data(mapped_val)
|
|
# REPL printout
|
|
print("data sent")
|
|
# reset clock
|
|
clock = time.monotonic()
|
|
# if you're connected to wifi and you press the up button
|
|
if connected and funhouse.peripherals.button_up:
|
|
# the internet icon is removed
|
|
group.remove(icon1)
|
|
# the red x icon is added
|
|
group.append(icon2)
|
|
# reset connected state - no longer sending data to adafruit.io
|
|
connected = False
|
|
# REPL printout
|
|
print("disconnected")
|
|
# 1 second delay
|
|
time.sleep(1)
|
|
# if you're NOT connected to wifi and you press the up button
|
|
if not connected and funhouse.peripherals.button_up:
|
|
# the red x icon is removed
|
|
group.remove(icon2)
|
|
# the internet icon is added
|
|
group.append(icon1)
|
|
# the connection state is true - start sending data to adafruit.io
|
|
connected = True
|
|
# REPL printout
|
|
print("connected")
|
|
# 1 second delay
|
|
time.sleep(1)
|