You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 00:31:05