本站改版新增arduino频道
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