放假多日了,没再到学校去;每个学期都有累屁了的感觉,天天脑袋上戴个帽子。所有的小传感器们都放在了学校,手边只有一个还没有组装的51小车上面的HC-SR04超声波传感器,而MicroBlocks恰好自带了HC-SR04的传感器Libraries库,正好试试。调入HC-SR04之后会发现,就一个Block,按照Block上标记的trigger和echo引脚接上指定的引脚就行了。默认的是2和4,这两个数字本质上相当于自定义函数参数的默认值,一会儿能看到原理。 图1 MicroBlocks内置的HC-SR04库 我们把2和4改一下,接Wemos D1 R32的IO14和IO27。实际Wemos D1 R32的引脚为了与Arduino UNO长的一样,它们被安排在原来UNO板的Digital数字引脚的区域那里,但是使用的时候,我们不能用D7、D6来引用它,也不能7、6或其它数字来引用,只能老老实实用IO上的标记。 图2 Wemos D1 R32管脚分布 之后把HC-SR04的VCC接到5V,GND对着GND。拖拽几个Blocks。Wait 50个milliseconds的目的,是为了减少一些毛毛刺刺的数据噪声。 图3 MicroBlocks编写的ESP32下超声测距程序 打开数据表格,运行,到HC-SR04的两只大眼睛前面摆几下手,记录下来曲线一条。 图4 MicroBlocks记录的超声测距数据曲线 现在回头看一下图3里MicroBlocks得到的HC-SR04程序,它没有传统Arduino里面的pinMode指定引脚状态的语句。再与Mixly的HC-SR04程序比较一下,则要显得复杂一些。 图5 Mixly创建的HC-SR04测距程序 如果在Mixly窗口里展开代码窗口,就可以看到Mixly虽然只给摆放了一行Block,但它在背后已经默默做了很多Arduino下的代码工作,代码窗口里面我们不但看到了熟悉的pinMode,还看到了puseIn函数。 图6 Mixly的Arduino代码窗口 那么MicroBlocks为我们默默做了什么呢?我们到HC-SR04提供的Block上面去右键,看到show blocks definition…,点开它,窗口砰的一声展开来一大堆Block,HC-SR04的驱动原理一下子展示出来了。(仿照MicroBlocks内置的驱动库,是不是就可以模仿着写自己的驱动库了呢?) 图7 MicroBlocks内置的HC-SR04驱动库 define提示我们前面用过的驱动库的Block块,就是这儿的一个函数,如果有第二个define,那就有第2个Block了。然后是默认参数,注释。这个define里面包含的set read pin显然就是Mixly和Arduino的pinMode的动作了。它们不是没做。做了,使用者感觉不到。再向后面,就会看到Arduino的pulseIn函数重新实现的过程,是通过两个时间戳计算的,所以它当然会在适用于各种各样的板子时,还能适用于ESP32板子的开发,因为它的小块块儿们都是用最底层的函数实现的。而这些最底层的函数由谁来支持呢?大概就是那个支持各种各样板子的“固件”——虚拟机。我们在update firewire的时候,ESP32的固件被MicroBlocks重新烧写,这个新固件支持的函数就是最底层的,用它们拓展出来的库,作用于新的板子,就满足一次编写,到处运行了。再挖下去,写到ESP32里面的固件在哪里?应该是在MicroBlock自身的执行程序里面,这很容易测试:①断网,更新固件,仍然能够更新成功;②MicroBlocks除了一个exe可执行程序再什么也没有了。 图8 HC-SR04驱动库内幕 被MicroBlocks更新过固件后的ESP32一下子到了夏天,它们仿佛再不承认自己是蝙蝠蛾的后代,它们的脑门上因为长着小草而无所不能。 后面的事情,是有闲的时候,学习一下内置库们(毕竟硬着头皮去改写ADS1115和INA219驱动库我还没那个能力哈 |
|
来自: 新用户5228KeDY > 《待分类》