machine 是 MicroPython 的“硬件大管家”。
它把芯片上的 GPIO、定时器、ADC、PWM、I²C、SPI、UART 等全部封装成 Python 对象,写完脚本直接控制引脚电平、读取传感器、驱动电机——无需寄存器、无需 C 语言。
一、常用子模块速览
(全部在 machine 下,无需额外安装)只需import或者import as即可使用
二、引脚编号规则
Pin(2) Pin(25) 就是板载 LED 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)