Skip to content

第 7 章:machine 库速览——硬件代码字典

本章能看懂什么

  • Pin:控制引脚通断电 / 读取引脚状态
  • PWM:控制亮度、速度
  • ADC:读取传感器数值
  • time.sleep():让程序等待

machine 是 MicroPython 控制硬件的核心库。Mind+ 生成的硬件代码,几乎都来自这一章的四个工具。 不用背,遇到看不懂的代码回来查就行。

Pin:数字输出(控制通断电)

积木"LED 输出 高电平"对应的代码:

python
from machine import Pin      # 从 machine 工具箱里拿出 Pin 工具
import time                  # 拿出 time(时间)工具

led = Pin(0, Pin.OUT)        # 告诉 Pico:我要用 GP0 引脚,它是"输出"模式
                             # (注意:0 是 GP 编号,不是物理针脚号)

led.value(1)                 # 输出高电平 → 通电 → LED 亮
time.sleep(1)                # 等 1 秒
led.value(0)                 # 输出低电平 → 断电 → LED 灭
led.toggle()                 # 反转:亮变灭、灭变亮

在 Mind+ 实际生成的代码里,引脚变量名常写成 pin_25 这种样式,数值还可能是 HIGH / LOW——意思和 1 / 0 完全一样。

Pin:数字输入(读取传感器)

读取一个引脚有没有电(比如循迹探头):

python
from machine import Pin

sensor = Pin(10, Pin.IN)     # GP10 设为"输入"模式(只听不说)

state = sensor.value()       # 读到 1(有电)或 0(没电)
print(state)                 # 把读数显示出来

PWM:控制亮度和速度

第一册讲过:PWM 通过调节"通电时间占比"(占空比)来控制亮度/速度。代码里这样写:

python
from machine import Pin, PWM

pwm = PWM(Pin(0))            # 在 GP0 上开启 PWM
pwm.freq(1000)               # 频率 1000Hz:每秒闪 1000 次,人眼看不出闪
pwm.duty_u16(32768)          # 占空比 50%(范围 0~65535)

duty_u16 用 0~65535 表示灭到最亮:0 全灭,65535 最亮,32768 半亮。

第一册 Mind+ 积木里 PWM 值是 0~255,换算关系:duty_u16 = 积木里的值 × 257

ADC:读取连续变化的数值

有些传感器(如火焰传感器的 A 口)输出的不是"有电/没电",而是连续变化的电压。ADC 把电压变成数字:

python
from machine import ADC, Pin

adc = ADC(Pin(26))           # GP26 是 ADC0(只有 GP26~GP28 能读模拟量)

value = adc.read_u16()       # 读数 0~65535,对应 0~3.3V 电压
print(value)

time.sleep():让程序等一等

python
import time

time.sleep(1)                # 等 1 秒
time.sleep_ms(500)           # 等 500 毫秒(0.5 秒)
time.sleep_us(10)            # 等 10 微秒(超声波测距触发要用)

常见坑

  • 引脚号一律用 GP 编号Pin(0) 是 GP0,不是物理针脚 1
  • Pin.OUT 的引脚不要去读,Pin.IN 的引脚不要去写
  • duty_u16 最大值是 65535,不是 255 也不是 100

想一想

  1. PinPWMADC 分别对应传感器的哪类信号?(控制通断 / 控制强弱 / 读取数值)

    💡 查看答案
    • Pin控制通断(输出高/低电平,比如开灯关灯),也能读取"通/断"类的数字信号(比如循迹探头)
    • PWM控制强弱(亮度、转速、舵机角度)
    • ADC读取连续变化的数值(比如火焰传感器的模拟电压)
  2. 看到 pwm.duty_u16(16384),这盏灯大概是多亮?(提示:16384 大约是 65535 的几分之几?)

    💡 查看答案

    16384 大约是 65535 的 1/4,所以这盏灯大约是 25% 的亮度——明显偏暗,但能看见亮。

不积跬步,无以至千里;万里之行,始于当下。