RPI Pico W与ESP8266串口通信报错:MicroPython UART实例化异常
RPI Pico W与ESP8266串口通信问题解决及替代方案
错误原因分析
你遇到的两个报错都是因为MicroPython中UART类的参数使用方式错误:
- ValueError: expecting a Pin:新版本MicroPython要求
tx和rx参数必须传入Pin对象,不能直接传整数引脚号,这是第一段代码的问题。 - TypeError: can't convert Pin to int:UART构造函数的位置参数顺序并非
(uart_id, baudrate, tx, rx),第三个位置参数实际是bits(数据位),直接传入Pin对象会被当成该参数,导致类型不匹配,必须用关键字参数指定tx和rx。
正确的UART实例化代码
先确认RPI Pico W的UART引脚对应:
- UART0:TX=GP0,RX=GP1
- UART1:TX=GP4,RX=GP5
注意交叉连接:Pico的TX接ESP8266的RX,Pico的RX接ESP8266的TX,然后用以下代码初始化:
from machine import UART, Pin # 初始化UART0,波特率9600 uart = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1)) # 或者初始化UART1 # uart = UART(1, baudrate=9600, tx=Pin(4), rx=Pin(5))
基础通信测试代码
初始化完成后,可通过以下代码测试发送和接收:
# 发送数据到ESP8266 uart.write("Hello ESP8266!\n") # 读取ESP8266发来的数据 if uart.any(): received_data = uart.read().decode('utf-8') print("收到数据:", received_data)
替代通信方案
如果UART问题仍无法解决,可利用两块板子的WiFi功能实现无线通信,比串口更灵活:
1. TCP/IP Socket通信
让Pico W和ESP8266连接到同一WiFi网络,一方作为服务器,另一方作为客户端建立连接传输数据。
示例(Pico W作为客户端):
import network import socket # 连接WiFi wlan = network.WLAN(network.STA_IF) wlan.active(True) wlan.connect("你的WiFi名称", "WiFi密码") # 等待连接成功 while not wlan.isconnected(): pass # 连接ESP8266的TCP服务器 s = socket.socket() s.connect(("ESP8266的IP地址", 1234)) # 发送数据 s.send(b"Hello from Pico W!") # 接收数据 data = s.recv(1024) print("收到:", data.decode()) s.close()
2. MQTT通信
使用MQTT协议通过公共或私有MQTT broker实现消息传递,适合多设备场景,可借助MicroPython的umqtt.simple库实现。
内容的提问来源于stack exchange,提问作者unlucky_chap
相关产品推荐
相关产品推荐

