ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

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

从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),仅供参考
返回列表