MicroPython在Wemos D1 ESP8266上报错TypeError: can't convert Pin to int
问题分析与解决
核心错误原因
ESP8266的MicroPython实现中,ADC类的构造函数只接受整数类型的引脚编号,而非Pin对象。你代码里传入Pin(4, Pin.IN)这类Pin实例,直接触发了TypeError: can't convert Pin to int错误。
另外还有个关键硬件限制:ESP8266只有一个ADC通道,对应Wemos D1上的A0引脚(MicroPython中引脚编号为0)。你代码里用的D4(GPIO2)、D5(GPIO14)都不是ADC引脚,就算修复类型错误,也无法读取有效模拟值。
修正后的代码
如果只是测试单通道ADC功能,修正后的代码如下:
from machine import ADC from time import sleep_ms # 初始化ADC,使用ESP8266唯一的ADC引脚(对应Wemos D1的A0) adc = ADC(0) # 设置衰减,支持0-3.3V范围输入 adc.atten(ADC.ATTN_11DB) while True: val = adc.read() print('Current ADC value: {}'.format(val)) sleep_ms(300)
额外说明
- 若确实需要双路模拟输入,要么改用原生支持多ADC通道的ESP32,要么外接如PCF8591这类I2C接口的ADC扩展芯片。
- Wemos D1的引脚映射需注意:板上
A0对应ESP8266的GPIO17,在MicroPython中初始化ADC时直接传整数0即可,无需使用Pin对象。
内容的提问来源于stack exchange,提问作者xpchemist
相关产品推荐
相关产品推荐

