如何修复 ESP32 MicroPython 'ValueError: pin can only be input'

问题:

你正在尝试使用 MicroPython 初始化 ESP32 引脚

micropython_pin_example.py
import machine
machine.Pin(34, machine.Pin.OUT)

但你看到类似这样的错误消息

micropython_pin_error_output.txt
>>> machine.Pin(34, machine.Pin.OUT)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: pin can only be input

解决方案

在 ESP32 上,编号 >= 34 的引脚是仅输入引脚!

如果你需要输出功能,需要使用 < 34 的其他引脚!

供参考,请参见相关的 MicroPython 源代码部分

micropython_machine_pin.c
// 配置模式
if (args[ARG_mode].u_obj != mp_const_none) {
    mp_int_t pin_io_mode = mp_obj_get_int(args[ARG_mode].u_obj);
    if (self->id >= 34 && (pin_io_mode & GPIO_MODE_DEF_OUTPUT)) {
        mp_raise_ValueError("pin can only be input");
    } else {
        gpio_set_direction(self->id, pin_io_mode);
    }
}

Check out similar posts by category: Embedded, MicroPython, Python