machine

machine 是 MicroPython 的“硬件大管家”。
它把芯片上的 GPIO、定时器、ADC、PWM、I²C、SPI、UART 等全部封装成 Python 对象,写完脚本直接控制引脚电平、读取传感器、驱动电机——无需寄存器、无需 C 语言。

一、常用子模块速览
(全部在 machine 下,无需额外安装)只需import或者import as即可使用

1. Pin —— 通用输入/输出

2. PWM —— 脉冲宽度调制(舵机、LED 亮度)

3. ADC —— 模数转换(读电位器、电池电压)

4. UART —— 串口(连 GPS、蓝牙模块)

5. I2C —— 两线总线(连 LCD1602、OLED)

6. SPI —— 高速四线总线(连屏幕、Flash)

7. Timer —— 硬件定时器(精准中断)

8. RTC —— 实时时钟(掉电记忆)

9. WDT —— 看门狗(死机自动重启)

10. Reset —— 软件复位

二、引脚编号规则

  • ESP32/ESP8266:用 GPIO 号,例如 Pin(2)
  • RP2040(Pico):用 GPIO 号,例如 Pin(25) 就是板载 LED
  • STM32:可以用 Pin('PA0') 或 Pin(0, Pin.A0)

三、最小可运行示例(Pico 板载 LED 闪烁)

# ============ 接线 ============
# 板载 LED 已经连在 GPIO25 上,不用外接线;Pico W 板写 Pin('LED')
# =============================
from machine import Pin
import time

led = Pin(25, Pin.OUT)      # 25 号脚设为输出
while True:
    led.toggle()            # 电平翻转
    time.sleep_ms(500)      # 暂停 500 ms

四、典型用法速查表

# ============ 接线 ============
# 速查用:下面每个片段各自独立,用到哪个复制哪段,引脚按注释接
# =============================
from machine import Pin, PWM, ADC, UART, I2C, SPI, Timer

# 1. GPIO 输出
pin = Pin(15, Pin.OUT)      # 15 号脚输出
pin.on()                    # 写 1
pin.off()                   # 写 0
pin.toggle()                # 翻转

# 2. GPIO 输入 + 上拉
btn = Pin(14, Pin.IN, Pin.PULL_UP)
print(btn.value())          # 读到 0 表示按键按下

# 3. PWM —— 1 kHz 占空比 50 %
pwm = PWM(Pin(13))
pwm.freq(1000)              # 1 kHz
pwm.duty_u16(32768)         # 50 % (32768/65535)

# 4. ADC —— 12 位精度读电位器
adc = ADC(Pin(26))          # GP26 即 ADC0
val = adc.read_u16()        # 0-65535
print(val)

# 5. UART —— 115200 8N1
uart = UART(0, baudrate=115200, tx=Pin(0), rx=Pin(1))
uart.write('hello\n')       # 发字符串
if uart.any():              # 收到数据?
    print(uart.read())      # 读全部

# 6. I2C —— 400 kHz
i2c = I2C(0, scl=Pin(9), sda=Pin(8), freq=400000)
print(i2c.scan())           # 扫描从机地址列表

# 7. 硬件定时器(周期 1 s,重复)
def tick(t):
    print('tick')

tim = Timer(mode=Timer.PERIODIC, period=1000, callback=tick)