惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
爱范儿
爱范儿
J
Java Code Geeks
L
LangChain Blog
V
V2EX
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
博客园 - Franky
Microsoft Azure Blog
Microsoft Azure Blog
Jina AI
Jina AI
Blog — PlanetScale
Blog — PlanetScale
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Cloudflare Blog
博客园 - 司徒正美
B
Blog
G
Google Developers Blog
Stack Overflow Blog
Stack Overflow Blog
罗磊的独立博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Apple Machine Learning Research
Apple Machine Learning Research
Engineering at Meta
Engineering at Meta
MyScale Blog
MyScale Blog
有赞技术团队
有赞技术团队
Hugging Face - Blog
Hugging Face - Blog

夜行人

回家路上 第一期的直播演示项目 震动检测器 正能量 在线参观CodeLab Neverland 发布 CodeLab Adapter 3.3.1 DynamicTable 之 纸糊方向盘 CodeLab DynamicTable: 一个可实施的技术方案 CodeLab Insight 发布 Alpha 版 情人节 Home Assistant 周报 && IoT 周报 (02) Joplin: 关注隐私的 Evernote 开源替代软件 浏览器的未来与 Web 传感器 Home Assistant 周报 && IoT 周报 (01) 百宝箱(01) 论自由 介绍 WebThings Home Assistant 周报 && iot 周报 (00) 百宝箱(00) 毛姆读书心得 传世之作 周末徒步 CodeLab Adapter ❤️ Jupyter/Python 航班 躲雨 夏令营途中 [译]思想--作为一种技术 The future of coding 美国之行 三门问题的程序模拟
MicroBlocks 编程案例: 创建哪吒扩展板库
种瓜 · 2022-01-25 · via 夜行人

文章目录

你无法用制造问题的思路解决问题

前言

英荔和恩孚联合举办的火星资源挑战赛,去年(月球资源挑战赛)全国有数百支队伍参加,赛事使用了哪吒扩展板来驱动小车, @Leeyve 和 @Jackson 希望基于 MicroBlocks 平台来开展赛事(替代 MakeCode 平台)。于是我这两天试着在 MicroBlocks 里接管哪吒扩展板以及小车使用到的其他传感器/执行器。

思路

哪吒扩展板来自恩孚公司, 恩孚的产品在海外很受欢迎(MicroBlocks 官方的例子有些就用了恩孚的扩展板)。我喜欢恩孚这家公司的开放作风,他们的产品文档开放又出色。之前我们在 CodeLab 有一些新的脑洞,恩孚的 CPO @song兄 都非常乐意提供支持。

哪吒扩展板相关的驱动代码,都在 Github 上: PlanetX_MicroPython/nezha.py

我打算将这些代码翻译到 MicroBlcoks,和MicroBlocks 编程案例: 创建 Sphero RVR 代码库的思路一样。

困境

结果遇到了困难。

比赛小车驱动的设备,基本都采用 I2C 通信。当前工作的实质是变着花样摆弄 I2C。将电机和舵机接入 MicroBlcoks 相当简单,翻译这部分 MicroPython 代码即可,只用了一会儿功夫, 第一次运行就成功了!

但接入颜色传感器花了我好几个小时!

颜色传感器 MicroPython 驱动 比较复杂,但也只是摆弄 I2C 而已,但与电机/舵机这类执行器不同,颜色传感器需要从 I2C 地址获取数据(不只是写入数据)。

驱动的代码量很大:

代码始终没有按照预期运行。我猜测错误的最大可能是大量 16 进制数造成的(诸如粗心导致的输入错误之类的),反复检查了 5-10 遍代码,始终没找到这方面的任何错误。

一筹莫展之下,我想了个主意,先缩小错误的范围,不想每次都检查一大堆的代码。 策略是对比 颜色传感器 MicroPython 驱动 和 MicroBlocks 的代码中间结果的差别,定位出最早的异常。

很快我将异常定位到了 _i2cread_color:

虽然定位到了错误区域,始终看不出哪儿出了问题。

你无法用于制造问题的思路解决问题。

我试着直接操控 register, 也没有搞定(我是 I2C 新手)。

无奈之下,我放弃了自己折腾。 准备看看 MicroBlocks 其他使用 I2C 的驱动是怎么写的。

我找到了一个其他型号的颜色传感器: TCS34725

MicroBlocks 平台强大的功能之一是允许用户深入到积木底下: 展开定义!通过不停地展开定义,我不断进入到更深层的地方。我终于弄懂了原因!

于是我修复了代码。

若不是 MicroBlocks 平台提供的强大支持,我不知要多久才能解决这个问题,或者根本解决不了。

演示

我们来看看使用 nezha 代码库驱动的 demo:

nezha 代码库还未完成,完成后我会提交到官方。有一些比赛会使用的设备没有接入,诸如 AI 摄像头和 4 路灰度传感器,但它们都采用 I2C 通信,复杂度也不如颜色传感器,问题应该不大。

尝鲜

愿意尝鲜的同学可以下载使用它: nezha.ubl

可以从这里加载自定义的代码库:

参考