English →
12 种 cube · 每种一个案例
2026-09-07 · 每一条都从真驱动源码里读出来的,不是我编的
2026-09-19 更新:各 cube 的真机状态按 cube 线现状改过(cube_总览.html 09-15 ·
电机板页 09-17 · cam_固件升级与五块板.html 09-16)
依据:你微信发来的那批 MicroPython 驱动(10 份)+ 从板子上直接捞下来的 3 份
(MPU6050_buzzer.py 等,压缩包里没有)+ 使用注解.pdf。
板子实测:MicroPython v1.26.1 / ESP32_GENERIC。
状态怎么读(09-19 起按 cube 线口径):真板已打通 = Blockly 生成的代码在真板上跑过、有实测;
在自己的板上跑通 = 在专用板 / 专用固件上跑通,还没接进 Blockly 导出;
桩 = 原版程序在,没量过、没收编。
读的(蓝)
测距distance · HC-SR04
IN
状态真板已打通
70.1cm 处连读 5 次 = 70.1 / 70.0 / 70.1 / 69.6 / 70.1,离散 0.5cm(±0.7%)。
09-09 隔着 WiFi 再量:20 次 20 次有效,中位 260.39cm,离散 0.10%;换到空引脚 8 次全超时(阴性对照)。
同一段积木只改阈值:300cm → 蜂鸣器响,10cm → 不响
怎么读TRIG 发 10µs 脉冲 → 量 ECHO 高电平宽度
→ 距离 = 脉宽 × 0.034 ÷ 2(cm)
量程驱动里写死 2 ≤ d ≤ 400 cm,超出返回 None。
★ 使用注解写的是 2–600cm,和代码不一致 —— 以代码为准
案例:近了就停并报警 —— 小于 6cm(驱动默认阈值)蜂鸣器响、OLED 显示距离。
这就是你照片里正在跑的那台。
温湿度temp · DHT11
IN
状态桩 原版程序在(DHT11.py),没量过、没收编
怎么读单总线,MicroPython 内置 dht 模块:
measure() → temperature() ℃ / humidity() %
脾气每秒最多采一次,快了读不到。握手心里或哈气数值会涨
案例:温度超过 30℃ 就转风扇(马达),低于 28℃ 停 —— 留 2℃ 死区防抖。
姿态tilt · MPU6050
IN
状态桩 原版程序在(MPU6050_buzzer.py / MPU6050_num_graph.py),没量过、没收编。
★ 这份驱动压缩包里没有,是我从板子上捞下来的
怎么读I2C 地址 0x68。加速度 ÷16384 = g,
陀螺 ÷131 = °/s,俯仰/滚转由 atan2 算出
阈值驱动默认:角度超 20° 或运动超 5 就报警
案例:翻倒就停 —— 俯仰或滚转超过 20°,立刻把所有马达松开并报警。
这条同时是安全功能。
水位water · 模拟量
IN
状态桩 原版程序在(water_sensor.py),没量过、没收编
怎么读ADC 12 位。1500(空气中)→ 4000(全浸)
线性映射成 0–100%
脾气★ 使用注解原话:入水要慢,否则数值快速波动;
从水里拿出来时上面会沾水,所以数值下降很慢 —— 这是它自己的迟滞,不是坏了
案例:没水就叫 —— 低于 10%(驱动默认)蜂鸣器响。
声音sound · 麦克风
IN
状态桩 原版程序在(audio_view.py / 麦克风.py),没量过、没收编
怎么读ADC 连采 10 次取平均(total // 10)压噪声
脾气使用注解:离近点或声音大点;最有效的是直接用手指轻叩
案例:拍一下手就往前走,再拍一下就停。
磁开关reed · 干簧管
IN
状态桩 原版程序在(reed_switch_buzzer.py),没量过、没收编
怎么读GPIO 内部上拉。0 = 闭合(有磁场)、
1 = 断开(没磁场)
★ 是反的,最容易写错的一种
案例:门/盖子一打开就报警 —— 磁铁离开,读到 1,蜂鸣器响。
摄像头cam
IN
状态在自己的板上跑通
★ ESP32-CAM 是另一套固件、另一块板,不会和这里的程序跑在一起。
直播上屏已通(经电脑中转,4.5 FPS),卡在供电,还不能常驻
板子09-16:五块 ESP32-CAM 里四块已刷 MicroPython v1.27 + mpy_cam;
两块完全可用、两块摄像头模块坏、一块还没刷
案例:单独一块 CAM 板,图像走 WiFi、经电脑中转传出来。还没接进 Blockly 导出。
写的(红)
马达motor · tacho_motor
OUT
状态在自己的板上跑通
单独的电机板(ESP32 + DRV8833,C 模块,带编码器)。两块电机板都跑 tacho_c_v6.3_joint:
空载定位实测停点平均 0.1 计数、最大 0.17°。只有空载数据,还没接进 Blockly 导出
占脚每路 4 个 GPIO,4 路共 16 个
★ 我一开始以为它不占通用 GPIO,错了 —— 会和传感器抢脚
安全★ 3 号口的 GPIO14 上电那一瞬是高电平,插着的电机会抽一下或转一小段,
软件盖不住。解法是 GPIO14 到地加 10kΩ 下拉电阻;改好之前,会伤东西的关节别接 3 号口
案例:前进 / 转向 / 到点停。
蜂鸣器buzzer
OUT
状态真板已打通
09-09 实测:GPIO25 PWM,1200Hz 和 1800Hz、duty 512 都出声;积木只改阈值,响 / 不响跟着变
怎么写无源蜂鸣器,PWM 控频率。给高电平不响,必须 PWM。
★ 使用注解:不建议长时间使用
案例:任何一个"超了"都用它出声 —— 距离近了、水没了、翻倒了。
音乐tone
OUT
状态桩 原版程序在(buzzer.py),没量过、没收编。
★ 和蜂鸣器是同一个器件,一块板上只能有一个(器件本身已随蜂鸣器 cube 在真板上响过,放曲子这段程序没验)
怎么写按音符频率给 PWM:
Do=262 Re=294 Mi=330 Fa=349 Sol=392 La=440 Si=494
案例:任务做完了放一段《小星星》(驱动里自带这首)。
三色灯rgb
OUT
状态桩 原版程序在(RGB.py),没量过、没收编。
★ 插着超声波时别用它:两者都要 GPIO13,两个输出顶牛
怎么写三路 PWM。给 0–255,内部 ×4 变成 duty 0–1023。
共阴/共阳两种接法驱动里都支持(RGB_TYPE 一行切)
案例:距离越近越红 —— 把测距读数直接映射到红色分量,
不用报警声也能看出远近。
屏screen · SSD1306
OUT
状态真板已打通
09-09 实测:I2C(1) SCL=27 SDA=14 @400kHz,扫到 0x3C,画字成功
怎么写I2C,128×64 单色。
★ 所有要显示的 cube 共用这一条 I2C 总线 —— 这是合法共用,不是冲突
案例:把当前读数直接显示出来 —— 调试时最有用的一个 cube。
一句实话(09-19 更新):12 种里 3 种从 Blockly 一路打通到真板(测距、蜂鸣器、屏),
2 种在各自的板上跑通(摄像头、电机,还没接进 Blockly 导出),7 种是桩 —— 原版程序在,没量过、没收编。
别把有程序当成能用。
★ 「插上即用」不成立:原版 12 个程序里有 5 个脚(25/32/12/13/34)分给了不同器件。
仿真里随便放;真板上要按列出的引脚接线。
接下来一种一种补:每种上板量几次、配阴性对照,记下量程/离散/脾气,量过才算数,攒成一张出厂参数表。现在 3/12。
真板已打通
在自己的板上跑通
桩