from machine import Pin
from time import sleep_ms
CAN_TXD_PIN = 5
CAN_RXD_PIN = 18
BIT_TIME_MS = 80
txd = Pin(CAN_TXD_PIN, Pin.OUT, value=1)
rxd = Pin(CAN_RXD_PIN, Pin.IN, Pin.PULL_UP)
def write_can_bit(bit):
# SN65HVD230 logic: TXD LOW = dominant, TXD HIGH = recessive.
txd.value(1 if bit else 0)
sleep_ms(BIT_TIME_MS)
print("TXD:", txd.value(), "RXD:", rxd.value())
def send_demo_frame():
bits = [
0, # SOF, dominant
1, 0, 1, 0, 0, 1, 1, 0,
1, 1, 1, 1, 1,
]
for bit in bits:
write_can_bit(bit)
txd.value(1)
sleep_ms(300)
print("ESP32 MicroPython SN65HVD230 demo")
print("GPIO5 -> TXD, GPIO18 <- RXD")
while True:
send_demo_frame()