本站改版新增arduino频道

Micropython
Arduino

ESP32C3双串口和WIFI与电脑双向通讯实验


from machine import UART, Pin
import time
import sys

def setup():
# UART1配置:
uart1 = UART(1, baudrate=9600, tx=Pin(0), rx=Pin(1), timeout=100)
led = Pin(12, Pin.OUT, value=0)
return uart1, led

def read_complete_message(uart, timeout=100):
"""读取完整数据(带超时)"""
start_time = time.ticks_ms()
buffer = bytearray()

while time.ticks_diff(time.ticks_ms(), start_time) < timeout:
if uart.any():
buffer.extend(uart.read(1)) # 逐字节读取

# 检测换行符结束
if buffer[-1] == ord('\n'):
return bytes(buffer)

return bytes(buffer) if buffer else None

def main():
uart1, led = setup()
print("\n====== 增强版串口测试 ======")
print("已改进以下功能:")
print("1. 完整消息接收")
print("2. 超时机制")
print("3. 数据分包处理\n")

try:
while True:
# 读取完整信息(等待换行符)
received_data = read_complete_message(uart1)

if received_data:
led.value(1) # 接收灯亮

# print原始数据(16进制和ASCII格式)
print("[原始数据] ", received_data)
print("[HEX] ", ' '.join(['%02X' % b for b in received_data]))

try:
decoded_str = received_data.decode('utf-8').strip()
print("[文本内容] ", decoded_str)

# 回传(原样返回+增强回显)
uart1.write(received_data)
response = f"[ESP32响应] 收到完整消息: {decoded_str}\r\n"
uart1.write(response.encode())
print("[操作] 已处理完整消息")

except UnicodeError:
print("[注意] 非文本数据,仅回传原始格式")
uart1.write(received_data)

led.value(0)
print("-" * 40)

except KeyboardInterrupt:
print("\n测试终止")
finally:
uart1.deinit()
led.value(0)

if __name__ == '__main__':
main()

来源:https://www.bilibili.com/video/BV17eo4Y9Eqm/?spm_id_from=333.337.search-card.all.click&vd_source=3dd6847839eec0b92cbf9223e827b36b


推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 ESP56.com All Rights Reserved
晋ICP备14006235号-22 晋公网安备14108102001165号

执行时间: 0.0095357894897461 seconds