前言

上文, 火星资源挑战赛使用了 AI 摄像头: AILens

于是我打算将其接入 MicroBlocks。

思路

AILens 相关的 MicroPython 驱动代码,都在 Github 上: PlanetX_MicroPython/AILens.py

我试着将这些代码翻译到 MicroBlcoks,和之前的几篇文章思路一样。


在 MicroBlocks 里的编程,十分愉快。 由于已经熟悉了对 I2C 设备编程,轻车熟路 ,完成 AILens 的驱动可能不到 1 小时。

我已经将驱动提交给了官方

演示

尝鲜

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

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

编写代码库(library)的技巧

在 MicroBlocks 里编写代码库非常简单。

初始化

在 MicroBlocks 里,我们只能将自定义积木导出为代码库(library), 所以「当启动时积木」不会被到导出代码库里。

这带来一个问题,一些需要初始化的代码怎么办呢? 这类代码往往有个特征: 只需要初始化一次。类似 Python class 里的 __init__ 函数。

初始化的技巧是通用的,技巧如下:

(ps: 图中初始化代码做了简化处理)

setup 自定义积木,一般配合一个变量使用:initialized, 通过这个变量来记忆是否是第一次操作(一开始变量是 0)。 值得之一的是 setup 幂等函数。 这样你可以把setup 放到任何地方(确保其他代码运行之前先运行setup),不必担心多次掉用它。

这些技巧我也是通过「显示积木定义」学来的 : )

下拉框

AILens 代码库里,switch mode 积木使用了下拉框

目前无法在 IDE 里添加下拉框类型的输入。我是直接修改文本代码做到的(通过学习其他 library 的代码)。

但我不喜欢在文本里编程,我的做法是,在 MicroBlocks图形环境里,大体完成自定义积木后

再在文本环境里微调:

(与 Scratch 插件里的做法类似)

相信未来图形IDE里就会添加这个支持。

参考