前言

物联网开源硬件的兴趣由来已久。

大学时期,我和@老杨都不能接受黑格尔存在即合理这个信条, 我们热衷于改进日常看到的不合理事物。

黑格尔是我最厌恶的哲学家之一, 我喜欢伯特兰·罗素西方哲学史中对他的攻击,罗素评价黑格尔晦涩又庞大的体系时说到:

逻辑越糟糕,由它得出的结论越有趣。

和老杨经常一起出去骑车闲逛,有时周末去,有时翘课去,一路上除了聊大卫·休谟维特根斯坦,也时常就骑车途中所见事物,展开头脑风暴。这些事物是合理的吗?是否可以重新发明出更好的?骑车归来,找个自习室画些草图,展示头脑中的改进模型。

我们经常在同个地方卡壳。当我们试图改进周围事物时,时常需要获得外部世界的物理参数,如声响、光照强度、倾斜角、温湿度之类的东西,我们希望创造的设备能够根据这些数值自动执行某种逻辑。一开始,觉得是自己对机械结构还不够熟悉,无法利用凸轮、杠杆等机械装置设计出精巧的结构,来执行循环功能或者计时功能。书上那些精巧的机械结构让人望而怯步,理解它们的原理并不难,但要根据构想的逻辑功能设计出拥有这些逻辑功能的机械结构,似乎强烈需要某种灵感,这可遇不可求。

我喜欢漫无目的在图书馆闲逛,随手拿起手边的书,不管它属于哪个分类。偶然发现存在一种叫单片机的东西,它可以连接传感器, 获取物理世界的参数,同时可以通过编程控制电机之类的设备,来对现实施以影响。如此一来大脑中的逻辑构造,就能不经过机械结构直接运行在现实世界中了!

我和老杨在图书馆读了些单片机的书,尽管热情高涨,也极尽耐心,还是觉得无聊透顶,这些教材成功浇灭了我们所有的热情。说单片机的书无聊透顶有些不公平,毕竟大多数的教材,都无聊透顶,除了堆砌公式和知识,就不干别的了。当一个平庸的教材编撰者门槛真够低的,需要的无非是ctrl-c + ctrl-v,我相信是严格意义上的ctrl-c + ctrl-v,不是程序员平时调侃自己说的那种复制粘贴。

我在世界观上,现在是个乐观主义者,不同于柏拉图。我相信随着岁月的流逝,世界整体上是在进步,而不是如柏拉图所设想的在逐步堕落。但当我每次去图书馆翻开教材,我有时又觉得柏拉图是对的。

偶然接触到物联网这个词, 觉得正是我和@老杨一直期待的东西,如果能将设备联网,不仅能解决单个设备的控制问题,还能让它们协同工作!

大学开始混迹开源社区,在社区里,遇到了敬佩的开发者、感兴趣的方向,对编程的热爱,也大多来自开源社区的经历。当我对一个新的领域感兴趣时,首先想到的常常是从开源社区中找学习资料。毕业之后,没有从事开源硬件、物联网相关的工作,但依然喜欢做些没什么卵用的小发明。也一直在关注开源硬件、物联网这块的东西。

特别值得一提的时,近年由于少儿编程的发展,硬件编程生态有个巨大改进,树莓派micro:bit的出现,除了方便孩子们创造,也让那些热爱创造、童心还在、却没有接受科班硬件教育的成年人,能轻松得去改造周围的事物。

从micro:bit说起

micro:bit由BBC(英国广播电视公司)出品,它是个微型电脑,初衷是服务于青少年编程教育。风靡全球。

这个小板子,集成了非常多的元件: 蓝牙,加速度计,磁力计,三个按钮,LED点阵以及GPIO(一些针脚,可以用来连接其他传感器)。

为它编程容易极了。即便你没有任何编程经验,几分钟之内通过拖拖拽拽,就可以使用积木来制作运行于现实世界的硬件项目! makecode 是你理想的起步伴侣。

如果你已经有Python基础,也可以使用Python来为它编程: python editor

micro:bit是开源硬件,从硬件电路到软件代码全部都是公开的,有大量的开源项目基于micro:bit,全球用户形成了社区,社区里有非常丰富的教程项目,供入门者学习。

大学时,我和@老杨一直期待的就是micro:bit这类事物,可惜它珊珊来迟,大然能为周末增加多少乐趣啊。

树莓派

开源社区里有大量项目展示人们都用micro:bit做出了什么好玩的东西,创造者中的大多数之前并没有编程经验。

如果你想做的事情稍微复杂些,诸如根据天气自动提醒出门的人记得带伞。你可能需要连接网络,当你想做更多的事,树莓派可能是下一步的理想选择。

树莓派只有巴掌大小,但它是一台严格意义上的电脑,事实是,它比你的笔记本或手机可强大、灵活多了。今天的消费级计算设备(手机、iPad、笔记本电脑)被设计成一种黑箱,这当然是一种精心的设计。如“下一件大事"是一个房间中描述的:

我们已经忘记了计算机最突出的部分:它们的可塑性。我们已经默许,将创造虚拟世界的权利,让渡给那些 能够花费巨资去雇佣足够多的软件工程师的人们。那些击中我们眼睛的光子来自完全可替代像素,但对于我们大多数人来说,这些像素似乎都是用石头雕刻般不可修改。
智能手机应用程序就像从前的厨房用具一样,是一种经过精心设计的单一用途工具,只有极少的可定制性和互操作性。它们有数百万行怪异的代码,只有一大批程序员才能驯服。 一旦人们付了钱,孩子们就会得到神奇的长方形,这些长方形像真正的魔法一样难以理解。

树莓派试图给予计算机可塑性,这就是沃兹尼亚克这类黑客喜欢它的原因,当乔布斯试图削减苹果电脑的可塑性时,沃兹尼亚克表现出黑客的底线:

通常我是个很好说话的人,但这一次我告诉他,‘你要是只想要两个扩展槽的话,就自己去做一台吧。像我这样的人最终总是会想出点儿东西来加到电脑上的‘

今天的沃兹尼亚克恐怕看不上自己早年参与创造的苹果产品。

micro:bit一样,树莓派也是开源的。也有GPIO,还记得GPIO吗?就是一些针脚,可以把树莓派和你新买的传感器接在一起。

你可以用树莓派做一个机器人、一个灵魂照相机、一个物联网网关、一个飞行器…所有这些,社区里都有人做出来。

树莓派在全球有数千万用户,和microbit一样,树莓有也有一个伟大的社区。你不必拿着一本教科书从电路图读起。加入开源社区与大家一起玩,不懂就提问,社区的用户都友好极了。他们是你和蔼的玩伴和热心的老师。

物联网

某天你用树莓派或其他开源硬件捣鼓了一个小发明: 树莓派守护者,原理说来简单: 树莓派上接了一个超声波传感器, 你将它置于门后,当你偷偷在房间里看冰与火之歌看得起劲时,房门突然被推开了,超声波传感器感应到门被推开,树莓派立即给你的电脑发送一个信号,你的电脑屏幕即刻切换到代码大全这本书的第432页。

这东西不只你自己用得开心,经常欺负你的胖虎也很喜欢它,于是他威胁你赶快再做一个;你喜欢的静香也很喜欢它,于是她请求你帮忙做一个。

当你周六熬夜做好了一款新的树莓派守护者,周日一早去敲静香的门。

你在门外盼望着它被顺利运行,静香开心又感激,跑出门跟你喜极相拥也说不定,人在开心的情况下能做出什么事,谁说得准呢? 想想你都有点脸红了。

你等呀等,时间慢得像星期五下午的最后一节课。

静香出门向你跑来,你正准备伸出双臂,静香说: “我要怎么将它连wifi呢?你只说要联网,没说怎么连,和小米网关一样的操作吗?好厉害哦,你的app叫什么名字呢?我这就去下载!”

你忘了考虑这点,你平时都是用ssh登陆树莓派,然后用vim编辑器给树莓派配置网络。你没有写app,你有点结巴:“这个…这个…我下学期完善后再给你送来!”

你发现做一个普通用户能方便使用的东西,要做的事还挺多,一个能工作的原型是不够的。它得易用。

你在做一个物联网产品。

物联网(Internet of Things)

物联网(Internet of Things)英文名非常直观: 联网的物体。

将物体联网后能做的事情太多了: 智能家居、可穿戴设备、智能物流、智能农业…它被认为是下个十年。

如果你做的是类似树莓派守护者这种面向C端用户的产品,你得解决的技术问题还挺多的。我在一辆树莓派可编程小车的问题有做过描述。

如果你打算从头开始解决这些问题,我敢打赌静香都嫁人了,你事情都还没做完一半。

好在有开源社区,你需要的东西应有尽有。

需要一个MQTT服务器(MQTT Broker)是吧?emqx拿去,源码都公开,文档也全面,这东西开箱就能处理百万设备的连接。

不了解MQTT是什么?简单来说MQTT之于物联网正如HTTP之于互联网。说的你更懵了?没事,社区里阐述能力比我强的人多着呢。

需要一个手机客户端?blynk了解一下,它能帮你快速构建一个可以发布的APP。拖一个按钮,拖一个颜色选择框,拖一个统计图表工具,看起来是不是很像Apple健康应用了?有海量开发者在用它生产自己的物联网产品的APP。

你听闻静香有个远方表妹在学编程,她也想制作好玩的东西?CodeLab构建的积木化编程环境支持在积木中玩转物联网了。如果她的能力再强些,codelab-adapter甚至内置了一个开源插件供她在学校里运行整个MQTT服务器。

什么?你觉得这是我在打广告,听起来不是很可信,没事开源社区里没有强迫,你可以让静香她表妹试试node-redPhysical Etoys之类开源项目,它们都很有趣。私底下说,我觉得她最终还是会喜欢我们做的东西的,走着瞧。

参考