新闻详情

新闻详情

首页 / 资讯中心 / 详情

从0到1看懂一个Blockly显示扩展:1602LCD扩展blocksdef.js与Python代码生成源码剖析

发布时间:2026/9/25 2:07:54来源:尧图网络
从0到1看懂一个Blockly显示扩展:1602LCD扩展blocksdef.js与Python代码生成源码剖析
从0到1看懂一个Blockly显示扩展1602LCD扩展blocksdef.js与Python代码生成源码剖析【免费下载链接】lcd-1602-display源师兄扩展项目: 1602LCD | 由源师兄组织创建项目地址: https://gitcode.com/yuanshixiong/lcd-1602-displaylcd-1602-display是源师兄为 Oh-Code 提供的 1602LCD 字符屏显示扩展。本文以它的两个核心文件blocksdef.js与library/lcd1602.py为主线用源码剖析的方式讲清楚拖积木 → 生成 Python → 点亮屏幕的完整链路新手读完也能掌握 Blockly 显示扩展的运行原理。一、1602LCD显示扩展全景4个文件撑起3个积木这个项目非常轻整个扩展只靠 4 个文件完成文件职责blocksdef.js积木外观定义 Python 代码生成规则category.json左侧分类盘 LCD1602 分类内容及各输入框默认值config.json设备元数据设备名、扩展名称、描述library/lcd1602.py板端真正驱动屏幕的底层驱动3 个积木统一使用玫红色#d4237a见 blocksdef.js 第1行 的globalcolor全部是语句型积木上下可拼接对应 LCD1602 的三大操作初始化 I²C 地址、指定行列显示文本、清空屏幕。二、逐块看积木每个积木到底生成了什么初始化积木给 LCD1602 打开电源它只有一个输入框iic_addr默认0x27。它的生成器没有直接返回代码而是把驱动实例写进了pythonGenerator.definitions_这个文件级全局定义里blocksdef.js 第21行最终被提升到生成文件的最顶部from lcd1602 import LCD1602 _lcd LCD1602(int(0x27))积木本身则输出空代码——这正是它放一次、管全程的原因无论拖在程序哪个位置import 语句都只会在文件头出现一次。显示文本积木列、行、内容三参数3 个输入框列rol1~16、行row1~2、内容content默认Hello World。生成的代码是标准两连击先set_cursor定位再show输出。注意每个变量都被int()/str()包裹blocksdef.js 第56行——即使用户拖入的积木类型不合预期也能保证类型安全。清空屏幕积木零参数最直白无参数直接生成一行_lcd.clear()屏幕内容清空、光标回到左上角。刷新显示前用它清一次可避免新旧内容叠加。三、blocksdef.js源码剖析每个积木的双层结构通读 blocksdef.js 可以发现每个积木都由两层组成第一层外观Blockly.Blocks三步套路appendDummyInput().appendField(...)放置固定文案如 LCD1602 |appendValueInput(名称)创建可插积木的输入插槽iic_addr、rol、row、contentsetPreviousStatement(true)setNextStatement(true)声明为语句型上下可拼接第二层代码生成pythonGenerator.forBlock用valueToCode取出各输入插槽上积木对应的代码片段再拼接成最终 Python。其中最值得学习的是初始化积木的definitions_技巧blocksdef.js#L19-L25把import 实例化注册为全局定义、自身返回空串。好处有二——import 语句永远置顶且不重复即使用户误拖了两个初始化积木同键名覆盖也不会产生重复代码。四、底层驱动lcd1602.py一个字节如何到达屏幕lcd1602.py 是纯 MicroPython 驱动I²C 接口默认地址0x274 位模式核心就 4 个方法write_bytelcd1602.py#L29-L454 位模式下一个字节拆成高/低 4 位配合使能位0x04与背光位分 4 次 I²C 写入完成传输init_displaylcd1602.py#L47-L62标准初始化序列0x33→0x32→0x28→0x0C→0x06→0x014位模式、2行、显示开光标关、增量模式、清屏构造时自动调用一般无需手动再调set_cursorlcd1602.py#L69-L76光标地址 0x80 (列-1) 0x40×(行-1)第 2 行比第 1 行整体偏移 64 个字符位showlcd1602.py#L78-L84逐字符ord(char)写入每行最多 16 字符五、完整示例3个积木生成的最终Python按顺序拖放初始化(0x27) → 显示文本(1, 1, Hello World) → 清空屏幕生成的完整代码只有 5 行from lcd1602 import LCD1602 _lcd LCD1602(int(0x27)) _lcd.set_cursor(int(1), int(1)) _lcd.show(str(Hello World)) _lcd.clear()前两行来自初始化积木的definitions_注册自动提升到文件顶部后三行按积木顺序逐块生成——这就是 blocksdef.js 的全部魔法。六、新手排错速查黑屏/不亮先查 SDA/SCL 是否接反、供电是否为 3.3V/5V再核对 I²C 地址部分模块是0x3F改初始化积木的输入框即可显示乱码确认程序里放了初始化积木初始化序列由驱动自动完成不要重复手动初始化位置不对列/行均从 1 开始列 1~16、行 1~2超出范围的内容不显示内容残留刷新前先拼一个清空屏幕积木更多积木用法、接线表和 API 说明可参考项目 README.md。【免费下载链接】lcd-1602-display源师兄扩展项目: 1602LCD | 由源师兄组织创建项目地址: https://gitcode.com/yuanshixiong/lcd-1602-display创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

OpenCV 4.8.0与MinGW编译实战:从CMake配置到Qt集成完全指南 2026/9/25 2:48:38

OpenCV 4.8.0与MinGW编译实战:从CMake配置到Qt集成完全指南

简介:从源代码构建OpenCV是许多Windows开发者避开ABI兼容陷阱的通用思路。MSVC与MinGW采用不同的C运行时和链接库格式,官方预编译包无法直接在GCC工具链下使用。通过CMake生成MinGW Makefiles工程,可以控制模块选择、关闭非必要加速项&#x…

阅读更多 →
astron-agent 控制台前端架构指南:基于 Vite + React 18 的 AI Agent 平台工程实践 2026/9/25 2:48:38

astron-agent 控制台前端架构指南:基于 Vite + React 18 的 AI Agent 平台工程实践

人工智能AI AgentAgent 编排RPA后端前端企业应用 【免费下载链接】astron-agent Enterprise-grade, commercial-friendly agentic workflow platform for building next-generation SuperAgents. 项目地址: https://gitcode.com/gh_mirrors/as/astron-agent 点击查看…

阅读更多 →
Ceph RGW SigV4 签名验证缺陷(CVE-2026-54330):预签名 PUT URL 的 x-amz-* 头注入与权限提升深度剖析 2026/9/25 2:48:38

Ceph RGW SigV4 签名验证缺陷(CVE-2026-54330):预签名 PUT URL 的 x-amz-* 头注入与权限提升深度剖析

存储分布式文件系统对象存储后端高可用 【免费下载链接】ceph Ceph is a distributed object, block, and file storage platform 项目地址: https://gitcode.com/gh_mirrors/ce/ceph 点击查看 免费下载 本篇文章基于 Ceph 官方安全公告 doc/security/CVE-2026-54…

阅读更多 →
从Dify到Continue:AI原生应用API编排与跨系统对接实战解析 2026/9/25 2:48:38

从Dify到Continue:AI原生应用API编排与跨系统对接实战解析

把一整套RAG检索、模型调度、工具调用串成一个可复现的接口,这是这两年我做得最多的“杂活”。涉及的方案从自研状态机,到字节的Coze、阿里的百炼、开源的Dify,走了一圈,慢慢摸清了AI原生应用在API编排这条路上的很多暗坑。前两天…

阅读更多 →
OpenClaw 学习系列之七:Gateway 深度解析——WebSocket 长连接与 Session Key 路由的 config.toml 骨架 2026/9/25 2:48:25

OpenClaw 学习系列之七:Gateway 深度解析——WebSocket 长连接与 Session Key 路由的 config.toml 骨架

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

阅读更多 →
EasyWeChat 6.x 开放平台第三方平台实战示例:从推送事件接收、预授权到代公众号/小程序调用 2026/9/25 2:48:19

EasyWeChat 6.x 开放平台第三方平台实战示例:从推送事件接收、预授权到代公众号/小程序调用

后端即时通讯 【免费下载链接】easywechat 📦 一个 PHP 微信 SDK 项目地址: https://gitcode.com/gh_mirrors/ea/easywechat 点击查看 免费下载 本篇基于 EasyWeChat 6.x(PHP 微信 SDK)的开放平台第三方平台模块,围绕…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉