本站改版新增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.0093870162963867 seconds