如何从零开发MicroPython扩展积木?旋转电位器(rotary-potentiometer)blocksdef.js实现全解
如何从零开发MicroPython扩展积木旋转电位器rotary-potentiometerblocksdef.js实现全解【免费下载链接】CupCode_EC11旋转编码器模块此扩展适配于采用EC11的旋转编码器不支持按键。项目地址: https://gitcode.com/yuanshixiong/rotary-potentiometer想搞清楚一个blocksdef.js文件是怎么在 MicroPython 平台里长出四块 EC11 旋转编码器积木的吗本文以开源项目rotary-potentiometer源师兄 / CupCode_EC11旋转编码器模块为例从零讲透 MicroPython 扩展积木开发的完整流程config.json 定义扩展信息、category.json 注册积木分类、blocksdef.js 完成积木外观 Python 代码生成两大核心全程面向新手尽量不堆代码。 1. 先认识项目一个扩展积木由 4 个文件组成项目结构非常轻量每个文件各司其职文件角色一句话说明config.json扩展名片设备归属、扩展名称、功能描述category.json积木分类清单声明 4 个积木及每个数值端口的默认值blocksdef.js核心积木外观定义 MicroPython 代码生成library/ec11.py底层驱动GPIO 双相读取、严格消抖、加速计数只想直接使用扩展的话接线表和积木用法见 README.md本文聚焦开发侧——这些积木是怎么搭出来的。️ 2. 第 1 步config.json——给扩展办一张名片config.json 只有 3 个关键字段平台加载扩展时逐一读取Device扩展归属的设备家族本项目为源师兄扩展Name积木工具栏里显示的分类名这里是EC11旋转编码器Description一句话功能描述展示在扩展详情页。 注意Name要与 category.json 中name字段对应分类名就是积木调色板的入口。️ 3. 第 2 步category.json——积木分类的清单category.json 用三层信息声明这个分类里有什么统一配色colour: #f4b400是整个分类的主题色blocksdef.js 顶部的globalcolor与它保持一致同一扩展的积木观感统一积木列表contents按顺序登记 4 个kind: BLOCK条目——初始化、重置计数、获取值、获取方向每个条目的type如ohcode_extend_ec11_init与 blocksdef.js 中的积木名一一对应默认值shadow为数值端口预置灰色数字积木如初始化积木的最小值0、最大值255、步长1。 新增积木时只需在contents里加一条BLOCK条目type名保持与 blocksdef.js 一致即可。⚙️ 4. 第 3 步核心blocksdef.js——一份外观 一份代码生成整个 blocksdef.js 只有约 100 行每个积木都出现两次套路完全一致Blockly.Blocks[积木名]定义积木的样子——文字、下拉框、输入端口、是语句型还是输出型pythonGenerator.forBlock[积木名]定义积木的行为——拼积木点运行后生成哪一行 MicroPython 代码。4.1 积木的外观定义init() 函数的 4 个动作以初始化积木为例见 blocksdef.js#L3-L33init只做 4 件事文本 下拉框appendDummyInput()单行排布文字两个FieldDropdown生成A连接到 / B连接到下拉选项P0~P16取值即引脚号数值输入端口appendValueInput(min_val)等创建最小值、最大值、步长 3 个端口category.json 里的灰色默认值就嵌在这里拼图形态setPreviousStatement(true)setNextStatement(true)让积木能插进程序流、上下可拼接成为语句型积木配色与提示setColour统一颜色setTooltip写悬停提示。4.2 积木的代码生成pythonGenerator 做的 3 件事代码生成函数见初始化积木 blocksdef.js#L36-L49做 3 件事getFieldValue(CLK_PIN)取下拉框选中的 A/B 引脚号valueToCode(block, min_val, ...)取插上的数值积木没插时回退到默认值0/255/1拼接并返回目标代码pot EC11(int(0), int(1), int(0), int(255), int(1))。这里藏着一个巧妙技巧from EC11 import EC11被写进pythonGenerator.definitions_——这是代码生成器的全局导入区无论程序里放多少个初始化积木import 语句都只在生成代码顶部出现一次不会重复。↑ 语句型积木重置计数为代码生成函数只返回一行pot.set_value(...)设置值会被驱动自动限制在最小/最大值之间4.3 输出型积木获取值 / 获取方向如何嵌入其他积木获取值、获取方向积木是输出型——init里用setOutput(true)代替上下拼接见 blocksdef.js#L72-L100让积木像变量一样插进显示、比较等积木中它们的代码生成函数返回[代码, 优先级]数组获取值int(pot.value())优先级ORDER_ATOMIC原子值嵌入表达式时不会多套括号获取方向pot.direction()顺时针返回1、逆时针返回-1、无新旋转返回0。 5. 积木背后的驱动力ec11.py 驱动的关键设计积木只负责界面 生成代码真正干活的是 library/ec11.py 里的EC11类几个亮点值得借鉴双相 GPIO 判向CLKA 相、DTB 相两路数字引脚内部上拉输入靠两相信号差判定旋转方向严格消抖CLK 下降沿后 5 次采样取多数 连续 3 次同向才确认从根源上解决偶发反向读数实现见 ec11.py#L87-L135加速计数连续快速旋转时步长自动增大最高 10 倍猛拧旋钮也不丢步后台线程独立线程每 10ms 轮询一次主程序随时读取、不阻塞这是积木化外设驱动的标准姿势。❓ 6. 新手常见问题方向反了 / 数值卡边界 / 如何新增积木Q1旋转方向与预期相反A/B 两相接反所致——交换 CLK/DT 接线或初始化驱动时设reverseTrue。Q2数值卡在最大值/最小值不动当前值被初始化积木设定的量程钳位了调大最大值即可。Q3「获取方向」一直是 0方向是一次性消费的每次旋转事件返回一次即复位需要持续判断请在旋转后立即读取。Q4想给扩展新增第 5 个积木怎么办复制外观 4 步 代码生成 1 函数的模板改积木名和生成的代码再在 category.json 的contents里加一条BLOCK条目完成。Q5旋钮上的按键SW能用吗本扩展不支持 EC11 按键功能SW 引脚悬空即可按键请使用其他积木。↑ 输出型方向积木返回 1 / -1 / 0可用于顺逆时针分别执行不同逻辑如调参、翻页✅ 7. 总结3 个文件的扩展积木开发模板开发一个 MicroPython 扩展积木本质就是填好 3 个文件config.json 是名片、category.json 是分类清单、blocksdef.js 是每个积木一份外观 一份代码生成再配一个底层 MicroPython 驱动本项目为 library/ec11.py。以 EC11 旋转编码器扩展 rotary-potentiometer 为模板你就能快速搭建出自己的传感器积木完整使用文档见 README.md。【免费下载链接】CupCode_EC11旋转编码器模块此扩展适配于采用EC11的旋转编码器不支持按键。项目地址: https://gitcode.com/yuanshixiong/rotary-potentiometer创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

LeetCode 3315 构造最小位运算数组:位运算规律与公式推导

LeetCode 3315 构造最小位运算数组:位运算规律与公式推导

LeetCode 3315 构造最小位运算数组 II,名字很长,内容很短:给你一个 target 数组,让你造一个 ans 数组,使得每个下标 i 都满足ans[i] | (ans[i] 1) target[i],凑不出来的就填 -1。我最初看到题名里的 “II…

2026/9/25 2:54:27 阅读更多 →
IronClaw Reborn 轻量 Agent Loop 契约:父循环的决策权与执行权是如何分离的

IronClaw Reborn 轻量 Agent Loop 契约:父循环的决策权与执行权是如何分离的

人工智能AI 应用交互助手AI Agent 【免费下载链接】ironclaw IronClaw is an Agent OS focused on privacy, security and extensibility 项目地址: https://gitcode.com/gh_mirrors/iro/ironclaw 点击查看 免费下载 本文围绕 IronClaw Reborn 的轻量 Agent Loop 参…

2026/9/25 2:54:27 阅读更多 →
从 AsyncStorage 平滑迁移到 react-native-mmkv:完整迁移脚本与实战指南

从 AsyncStorage 平滑迁移到 react-native-mmkv:完整迁移脚本与实战指南

【免费下载链接】react-native-mmkv ⚡️ The fastest key/value storage for React Native. ~30x faster than AsyncStorage! 项目地址: https://gitcode.com/gh_mirrors/re/react-native-mmkv 点击查看 免费下载 本文基于 react-native-mmkv 官方迁移指南&#x…

2026/9/25 2:53:27 阅读更多 →

最新新闻

ESP32-S3麦克风阵列实战:波束成形与回声消除全解析

ESP32-S3麦克风阵列实战:波束成形与回声消除全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 5:18:06 阅读更多 →
WPS Office CVE-2024-7262:路径解析缺陷导致沙箱逃逸与远程代码执行

WPS Office CVE-2024-7262:路径解析缺陷导致沙箱逃逸与远程代码执行

1. 这不是“普通漏洞”,是WPS Office里一条能绕过所有沙箱的隐秘通道如果你最近在安全圈听到“CVE-2024-7262”这个编号,大概率是在红队演练复盘会上、甲方安全评估报告里,或者某位同事深夜发来的截图——一个看似普通的WPS文档,双…

2026/9/25 5:18:06 阅读更多 →
cube-ui Input 输入框组件完整指南:v-model 双向绑定、清空按钮与密码眼睛实战解析

cube-ui Input 输入框组件完整指南:v-model 双向绑定、清空按钮与密码眼睛实战解析

前端UI组件移动开发 【免费下载链接】cube-ui :large_orange_diamond: A fantastic mobile ui lib implement by Vue 项目地址: https://gitcode.com/gh_mirrors/cu/cube-ui 点击查看 免费下载 导读 本文基于 cube-ui 官方中文文档 input.md 并结合仓库源码&#…

2026/9/25 5:18:05 阅读更多 →
Eclipse Mosquitto 1.0.1 版本解析:Windows 服务 log_dest 默认值与 Python on_log() 回调修复的源码级解读

Eclipse Mosquitto 1.0.1 版本解析:Windows 服务 log_dest 默认值与 Python on_log() 回调修复的源码级解读

物联网消息队列后端网络/通信 【免费下载链接】mosquitto Eclipse Mosquitto - An open source MQTT broker 项目地址: https://gitcode.com/gh_mirrors/mo/mosquitto 点击查看 免费下载 Mosquitto 1.0.1 是 2012 年 8 月 15 日发布的纯缺陷修复版本,紧…

2026/9/25 5:18:05 阅读更多 →
CDR话单聚合数据导入MySQL:imei与cell_info全解析

CDR话单聚合数据导入MySQL:imei与cell_info全解析

简介:面向需要进行基站掉话率分析的数据处理技术人员,这份压缩包提供从原始通话话单中统计掉线率最高前10基站的完整数据与SQL方案,适用于Hive/MySQL环境下的话务数据清洗、统计与网络质量评估。资源共2个文件,包括一份CSV原始数据…

2026/9/25 5:18:05 阅读更多 →
node-sass 内置 libsass 构建指南:通过 autotools 构建并安装系统级共享库

node-sass 内置 libsass 构建指南:通过 autotools 构建并安装系统级共享库

前端构建工具 【免费下载链接】node-sass :rainbow: Node.js bindings to libsass 项目地址: https://gitcode.com/gh_mirrors/no/node-sass 点击查看 免费下载 本文基于 node-sass 仓库内置的 libsass 文档 build-shared-library.md 展开,讲解如何把 n…

2026/9/25 5:17:05 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →