On line 22, change the RX and TX pin definitions to board.RX and board.TX :
can = canio.CAN(rx=board.RX, tx=board.TX, baudrate=250_000, auto_restart=True)
Then, upload the code to one of the QT Py ESP32-S2's.
# SPDX-FileCopyrightText: 2020 Jeff Epler for Adafruit Industries
#
# SPDX-License-Identifier: MIT
import struct
import time
import board
import canio
import digitalio
# If the CAN transceiver has a standby pin, bring it out of standby mode
if hasattr(board, 'CAN_STANDBY'):
standby = digitalio.DigitalInOut(board.CAN_STANDBY)
standby.switch_to_output(False)
# If the CAN transceiver is powered by a boost converter, turn on its supply
if hasattr(board, 'BOOST_ENABLE'):
boost_enable = digitalio.DigitalInOut(board.BOOST_ENABLE)
boost_enable.switch_to_output(True)
# Use this line if your board has dedicated CAN pins. (Feather M4 CAN and Feather
STM32F405)
can = canio.CAN(rx=board.CAN_RX, tx=board.CAN_TX, baudrate=250_000,
auto_restart=True)
# On ESP32S2 most pins can be used for CAN. Uncomment the following line to use
IO5 and IO6
#can = canio.CAN(rx=board.IO6, tx=board.IO5, baudrate=250_000, auto_restart=True)
old_bus_state = None
count = 0
while True:
bus_state = can.state
if bus_state != old_bus_state:
print(f"Bus state changed to {bus_state}")
old_bus_state = bus_state
On line 22, change the RX and TX pin definitions to board.RX and board.TX :
can = canio.CAN(rx=board.RX, tx=board.TX, baudrate=250_000, auto_restart=True)
Then, upload the code to the remaining QT Py ESP32-S2.
# SPDX-FileCopyrightText: 2020 Jeff Epler for Adafruit Industries
#
# SPDX-License-Identifier: MIT
import struct
import board
import canio
import digitalio
# If the CAN transceiver has a standby pin, bring it out of standby mode
if hasattr(board, 'CAN_STANDBY'):
standby = digitalio.DigitalInOut(board.CAN_STANDBY)
standby.switch_to_output(False)
# If the CAN transceiver is powered by a boost converter, turn on its supply
if hasattr(board, 'BOOST_ENABLE'):
boost_enable = digitalio.DigitalInOut(board.BOOST_ENABLE)
boost_enable.switch_to_output(True)
# Use this line if your board has dedicated CAN pins. (Feather M4 CAN and Feather
STM32F405)
can = canio.CAN(rx=board.CAN_RX, tx=board.CAN_TX, baudrate=250_000,
auto_restart=True)
# On ESP32S2 most pins can be used for CAN. Uncomment the following line to use
IO5 and IO6
#can = canio.CAN(rx=board.IO6, tx=board.IO5, baudrate=250_000, auto_restart=True)
listener = can.listen(matches=[canio.Match(0x408)], timeout=.9)
old_bus_state = None
old_count = -1
while True:
bus_state = can.state
if bus_state != old_bus_state:
print(f"Bus state changed to {bus_state}")
old_bus_state = bus_state
message = listener.receive()
if message is None:
print("No messsage received within timeout")
continue
data = message.data
if len(data) != 8:
print(f"Unusual message length {len(data)}")
continue