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)