Skip to content

Commit c2cbfe3

Browse files
authored
Merge pull request #2 from adafruit/master
merge from adafruit
2 parents 4d3d566 + 991931a commit c2cbfe3

File tree

6 files changed

+205
-13
lines changed

6 files changed

+205
-13
lines changed

Adafruit_IO_Air_Quality/code.py

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,11 @@
66
from adafruit_esp32spi import adafruit_esp32spi, adafruit_esp32spi_wifimanager
77
from adafruit_io.adafruit_io import IO_HTTP
88
from simpleio import map_range
9-
109
import adafruit_pm25
1110
import adafruit_bme280
1211

1312
### Configure Sensor ###
14-
# Return BME280 environmental sensor readings in degrees Celsius
13+
# Return environmental sensor readings in degrees Celsius
1514
USE_CELSIUS = False
1615
# Interval the sensor publishes to Adafruit IO, in minutes
1716
PUBLISH_INTERVAL = 10
@@ -36,12 +35,22 @@
3635
wifi = adafruit_esp32spi_wifimanager.ESPSPI_WiFiManager(esp, secrets, status_light)
3736

3837
# Connect to a PM2.5 sensor over UART
38+
reset_pin = None
3939
uart = busio.UART(board.TX, board.RX, baudrate=9600)
40-
pm25 = adafruit_pm25.PM25_UART(uart)
40+
pm25 = adafruit_pm25.PM25_UART(uart, reset_pin)
41+
42+
# Create i2c object
43+
i2c = busio.I2C(board.SCL, board.SDA, frequency=100000)
44+
45+
# Connect to a BME280 over I2C
46+
bme_sensor = adafruit_bme280.Adafruit_BME280_I2C(i2c)
47+
48+
# Uncomment below for PMSA003I Air Quality Breakout
49+
# pm25 = adafruit_pm25.PM25_I2C(i2c, reset_pin)
4150

42-
# Connect to a BME280 sensor over I2C
43-
i2c = busio.I2C(board.SCL, board.SDA)
44-
bme280 = adafruit_bme280.Adafruit_BME280_I2C(i2c)
51+
# Uncomment below for BME680
52+
# import adafruit_bme680
53+
# bme_sensor = adafruit_bme680.Adafruit_BME680_I2C(i2c)
4554

4655
### Sensor Functions ###
4756
def calculate_aqi(pm_sensor_reading):
@@ -111,18 +120,18 @@ def sample_aq_sensor():
111120
return aq_reading
112121

113122

114-
def read_bme280(is_celsius=False):
123+
def read_bme(is_celsius=False):
115124
"""Returns temperature and humidity
116-
from BME280 environmental sensor, as a tuple.
125+
from BME280/BME680 environmental sensor, as a tuple.
117126
118127
:param bool is_celsius: Returns temperature in degrees celsius
119128
if True, otherwise fahrenheit.
120129
"""
121-
humid = bme280.humidity
122-
temp = bme280.temperature
130+
humid = bme_sensor.humidity
131+
temp = bme_sensor.temperature
123132
if not is_celsius:
124133
temp = temp * 1.8 + 32
125-
return temperature, humid
134+
return temp, humid
126135

127136

128137
# Create an instance of the Adafruit IO HTTP client
@@ -168,7 +177,7 @@ def read_bme280(is_celsius=False):
168177

169178
# temp and humidity
170179
print("Sampling environmental sensor...")
171-
temperature, humidity = read_bme280(USE_CELSIUS)
180+
temperature, humidity = read_bme(USE_CELSIUS)
172181
print("Temperature: %0.1f F" % temperature)
173182
print("Humidity: %0.1f %%" % humidity)
174183

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import struct
2+
3+
import board
4+
import canio
5+
import digitalio
6+
7+
# If the CAN transceiver has a standby pin, bring it out of standby mode
8+
if hasattr(board, 'CAN_STANDBY'):
9+
standby = digitalio.DigitalInOut(board.CAN_STANDBY)
10+
standby.switch_to_output(False)
11+
12+
# If the CAN transceiver is powered by a boost converter, turn on its supply
13+
if hasattr(board, 'BOOST_ENABLE'):
14+
boost_enable = digitalio.DigitalInOut(board.BOOST_ENABLE)
15+
boost_enable.switch_to_output(True)
16+
17+
can = canio.CAN(rx=board.CAN_RX, tx=board.CAN_TX, baudrate=250_000, auto_restart=True)
18+
listener = can.listen(matches=[canio.Match(0x408)], timeout=.9)
19+
20+
old_bus_state = None
21+
old_count = -1
22+
23+
while True:
24+
bus_state = can.state
25+
if bus_state != old_bus_state:
26+
print(f"Bus state changed to {bus_state}")
27+
old_bus_state = bus_state
28+
29+
message = listener.receive()
30+
if message is None:
31+
print("No messsage received within timeout")
32+
continue
33+
34+
data = message.data
35+
if len(data) != 8:
36+
print(f"Unusual message length {len(data)}")
37+
continue
38+
39+
count, now_ms = struct.unpack("<II", data)
40+
gap = count - old_count
41+
old_count = count
42+
print(f"received message: id={message.id:x} count={count} now_ms={now_ms}")
43+
if gap != 1:
44+
print(f"gap: {gap}")
45+
46+
print("Sending ACK")
47+
can.send(canio.Message(id=0x409, data=struct.pack("<I", count)))

FeatherCAN_CircuitPython/listener.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import struct
2+
3+
import board
4+
import canio
5+
import digitalio
6+
7+
# If the CAN transceiver has a standby pin, bring it out of standby mode
8+
if hasattr(board, 'CAN_STANDBY'):
9+
standby = digitalio.DigitalInOut(board.CAN_STANDBY)
10+
standby.switch_to_output(False)
11+
12+
# If the CAN transceiver is powered by a boost converter, turn on its supply
13+
if hasattr(board, 'BOOST_ENABLE'):
14+
boost_enable = digitalio.DigitalInOut(board.BOOST_ENABLE)
15+
boost_enable.switch_to_output(True)
16+
17+
can = canio.CAN(rx=board.CAN_RX, tx=board.CAN_TX, baudrate=250_000, auto_restart=True)
18+
listener = can.listen(matches=[canio.Match(0x408)], timeout=.9)
19+
20+
old_bus_state = None
21+
old_count = -1
22+
23+
while True:
24+
bus_state = can.state
25+
if bus_state != old_bus_state:
26+
print(f"Bus state changed to {bus_state}")
27+
old_bus_state = bus_state
28+
29+
message = listener.receive()
30+
if message is None:
31+
print("No messsage received within timeout")
32+
continue
33+
34+
data = message.data
35+
if len(data) != 8:
36+
print(f"Unusual message length {len(data)}")
37+
continue
38+
39+
count, now_ms = struct.unpack("<II", data)
40+
gap = count - old_count
41+
old_count = count
42+
print(f"received message: count={count} now_ms={now_ms}")
43+
if gap != 1:
44+
print(f"gap: {gap}")
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import struct
2+
import time
3+
4+
import board
5+
import canio
6+
import digitalio
7+
8+
# If the CAN transceiver has a standby pin, bring it out of standby mode
9+
if hasattr(board, 'CAN_STANDBY'):
10+
standby = digitalio.DigitalInOut(board.CAN_STANDBY)
11+
standby.switch_to_output(False)
12+
13+
# If the CAN transceiver is powered by a boost converter, turn on its supply
14+
if hasattr(board, 'BOOST_ENABLE'):
15+
boost_enable = digitalio.DigitalInOut(board.BOOST_ENABLE)
16+
boost_enable.switch_to_output(True)
17+
18+
can = canio.CAN(rx=board.CAN_RX, tx=board.CAN_TX, baudrate=250_000, auto_restart=True)
19+
listener = can.listen(matches=[canio.Match(0x409)], timeout=.1)
20+
21+
old_bus_state = None
22+
count = 0
23+
24+
while True:
25+
bus_state = can.state
26+
if bus_state != old_bus_state:
27+
print(f"Bus state changed to {bus_state}")
28+
old_bus_state = bus_state
29+
30+
now_ms = (time.monotonic_ns() // 1_000_000) & 0xffffffff
31+
print(f"Sending message: count={count} now_ms={now_ms}")
32+
33+
message = canio.Message(id=0x408, data=struct.pack("<II", count, now_ms))
34+
while True:
35+
can.send(message)
36+
37+
message_in = listener.receive()
38+
if message_in is None:
39+
print("No ACK received within timeout")
40+
continue
41+
42+
data = message_in.data
43+
if len(data) != 4:
44+
print(f"Unusual message length {len(data)}")
45+
continue
46+
47+
ack_count = struct.unpack("<I", data)[0]
48+
if ack_count == count:
49+
print(f"Received ACK")
50+
break
51+
else:
52+
print(f"Received incorrect ACK: {ack_count} should be {count}")
53+
54+
time.sleep(.5)
55+
count += 1

FeatherCAN_CircuitPython/sender.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import struct
2+
import time
3+
4+
import board
5+
import canio
6+
import digitalio
7+
8+
# If the CAN transceiver has a standby pin, bring it out of standby mode
9+
if hasattr(board, 'CAN_STANDBY'):
10+
standby = digitalio.DigitalInOut(board.CAN_STANDBY)
11+
standby.switch_to_output(False)
12+
13+
# If the CAN transceiver is powered by a boost converter, turn on its supply
14+
if hasattr(board, 'BOOST_ENABLE'):
15+
boost_enable = digitalio.DigitalInOut(board.BOOST_ENABLE)
16+
boost_enable.switch_to_output(True)
17+
18+
can = canio.CAN(rx=board.CAN_RX, tx=board.CAN_TX, baudrate=250_000, auto_restart=True)
19+
20+
old_bus_state = None
21+
count = 0
22+
23+
while True:
24+
bus_state = can.state
25+
if bus_state != old_bus_state:
26+
print(f"Bus state changed to {bus_state}")
27+
old_bus_state = bus_state
28+
29+
now_ms = (time.monotonic_ns() // 1_000_000) & 0xffffffff
30+
print(f"Sending message: count={count} now_ms={now_ms}")
31+
32+
message = canio.Message(id=0x408, data=struct.pack("<II", count, now_ms))
33+
can.send(message)
34+
35+
time.sleep(.5)
36+
count += 1

PyRuler_Video_Panic/code.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212
from adafruit_hid.keyboard import Keyboard
1313
from adafruit_hid.keycode import Keycode
1414
from adafruit_hid.keyboard_layout_us import KeyboardLayoutUS
15-
kbd = Keyboard()
15+
import usb_hid
16+
kbd = Keyboard(usb_hid.devices)
1617
layout = KeyboardLayoutUS(kbd)
1718

1819
#print(dir(board), os.uname()) # Print a little about ourselves

0 commit comments

Comments
 (0)