1
1
import time
2
2
import board
3
3
import busio
4
- from digitalio import DigitalInOut , Direction
4
+ from digitalio import DigitalInOut
5
5
import neopixel
6
6
from adafruit_esp32spi import adafruit_esp32spi , adafruit_esp32spi_wifimanager
7
7
from adafruit_io .adafruit_io import IO_HTTP
10
10
import adafruit_pm25
11
11
import adafruit_bme280
12
12
13
+ ### Configure Sensor ###
14
+ # Return BME280 environmental sensor readings in degrees Celsius
15
+ USE_CELSIUS = False
16
+ # Interval the sensor publishes to Adafruit IO, in minutes
17
+ PUBLISH_INTERVAL = 10
13
18
14
19
### WiFi ###
15
20
31
36
wifi = adafruit_esp32spi_wifimanager .ESPSPI_WiFiManager (esp , secrets , status_light )
32
37
33
38
# Connect to a PM2.5 sensor over UART
34
- reset_pin = DigitalInOut (board .G0 )
35
- reset_pin .direction = Direction .OUTPUT
36
- reset_pin .value = False
37
39
uart = busio .UART (board .TX , board .RX , baudrate = 9600 )
38
- pm25 = adafruit_pm25 .PM25_UART (uart , reset_pin )
40
+ pm25 = adafruit_pm25 .PM25_UART (uart )
39
41
40
42
# Connect to a BME280 sensor over I2C
41
43
i2c = busio .I2C (board .SCL , board .SDA )
@@ -80,6 +82,7 @@ def calculate_aqi(pm_sensor_reading):
80
82
aqi_cat = None
81
83
return aqi_val , aqi_cat
82
84
85
+
83
86
def sample_aq_sensor ():
84
87
"""Samples PM2.5 sensor
85
88
over a 2.3 second sample rate.
@@ -107,6 +110,7 @@ def sample_aq_sensor():
107
110
aq_samples .clear ()
108
111
return aq_reading
109
112
113
+
110
114
def read_bme280 (is_celsius = False ):
111
115
"""Returns temperature and humidity
112
116
from BME280 environmental sensor, as a tuple.
@@ -122,23 +126,19 @@ def read_bme280(is_celsius=False):
122
126
123
127
124
128
# Create an instance of the Adafruit IO HTTP client
125
- io = IO_HTTP (secrets [' aio_user' ], secrets [' aio_key' ], wifi )
129
+ io = IO_HTTP (secrets [" aio_user" ], secrets [" aio_key" ], wifi )
126
130
127
131
# Describes feeds used to hold Adafruit IO data
128
132
feed_aqi = io .get_feed ("air-quality-sensor.aqi" )
129
133
feed_aqi_category = io .get_feed ("air-quality-sensor.category" )
130
134
feed_humidity = io .get_feed ("air-quality-sensor.humidity" )
131
135
feed_temperature = io .get_feed ("air-quality-sensor.temperature" )
132
136
133
-
134
137
# Set up location metadata from secrets.py file
135
- location_metadata = (secrets ['latitude' ], secrets ['longitude' ], secrets ['elevation' ])
136
-
137
- io .send_data (feed_aqi ["key" ], 'test' , location_metadata )
138
+ location_metadata = (secrets ["latitude" ], secrets ["longitude" ], secrets ["elevation" ])
138
139
139
140
elapsed_minutes = 0
140
141
prv_mins = 0
141
- aqi_readings = 0.0
142
142
143
143
while True :
144
144
try :
@@ -155,20 +155,20 @@ def read_bme280(is_celsius=False):
155
155
continue
156
156
157
157
if cur_time .tm_min >= prv_mins :
158
- print ("%d min elapsed.." % elapsed_minutes )
158
+ print ("%d min elapsed.." % elapsed_minutes )
159
159
prv_mins = cur_time .tm_min
160
160
elapsed_minutes += 1
161
161
162
- if elapsed_minutes >= 1 :
162
+ if elapsed_minutes >= PUBLISH_INTERVAL :
163
163
print ("Sampling AQI..." )
164
164
aqi_reading = sample_aq_sensor ()
165
165
aqi , aqi_category = calculate_aqi (aqi_reading )
166
- print ("AQI: %d" % aqi )
167
- print ("Category: %s" % aqi_category )
166
+ print ("AQI: %d" % aqi )
167
+ print ("Category: %s" % aqi_category )
168
168
169
169
# temp and humidity
170
170
print ("Sampling environmental sensor..." )
171
- temperature , humidity = read_bme280 ()
171
+ temperature , humidity = read_bme280 (USE_CELSIUS )
172
172
print ("Temperature: %0.1f F" % temperature )
173
173
print ("Humidity: %0.1f %%" % humidity )
174
174
0 commit comments