code.py
1 # SPDX-FileCopyrightText: 2022 Liz Clark for Adafruit Industries 2 # SPDX-License-Identifier: MIT 3 4 import os 5 import time 6 import ssl 7 import wifi 8 import socketpool 9 import microcontroller 10 import board 11 import busio 12 import adafruit_requests 13 import adafruit_ahtx0 14 from adafruit_io.adafruit_io import IO_HTTP, AdafruitIO_RequestError 15 16 wifi.radio.connect(os.getenv('WIFI_SSID'), os.getenv('WIFI_PASSWORD')) 17 18 aio_username = os.getenv('aio_username') 19 aio_key = os.getenv('aio_key') 20 21 pool = socketpool.SocketPool(wifi.radio) 22 requests = adafruit_requests.Session(pool, ssl.create_default_context()) 23 # Initialize an Adafruit IO HTTP API object 24 io = IO_HTTP(aio_username, aio_key, requests) 25 print("connected to io") 26 27 # use Pico W's GP0 for SDA and GP1 for SCL 28 i2c = busio.I2C(board.GP1, board.GP0) 29 aht20 = adafruit_ahtx0.AHTx0(i2c) 30 31 try: 32 # get feed 33 picowTemp_feed = io.get_feed("pitemp") 34 picowHumid_feed = io.get_feed("pihumid") 35 except AdafruitIO_RequestError: 36 # if no feed exists, create one 37 picowTemp_feed = io.create_new_feed("pitemp") 38 picowHumid_feed = io.create_new_feed("pihumid") 39 40 # pack feed names into an array for the loop 41 feed_names = [picowTemp_feed, picowHumid_feed] 42 print("feeds created") 43 44 clock = 300 45 46 while True: 47 try: 48 # when the clock runs out.. 49 if clock > 300: 50 # read sensor 51 data = [aht20.temperature, aht20.relative_humidity] 52 # send sensor data to respective feeds 53 for z in range(2): 54 io.send_data(feed_names[z]["key"], data[z]) 55 print("sent %0.1f" % data[z]) 56 time.sleep(1) 57 # print sensor data to the REPL 58 print("\nTemperature: %0.1f C" % aht20.temperature) 59 print("Humidity: %0.1f %%" % aht20.relative_humidity) 60 print() 61 time.sleep(1) 62 # reset clock 63 clock = 0 64 else: 65 clock += 1 66 # pylint: disable=broad-except 67 # any errors, reset Pico W 68 except Exception as e: 69 print("Error:\n", str(e)) 70 print("Resetting microcontroller in 10 seconds") 71 time.sleep(10) 72 microcontroller.reset() 73 # delay 74 time.sleep(1) 75 print(clock)