在上篇文章 物联网、开源硬件与开源社区 里,提到我自己对物联网感兴趣的原因,以及从开源社区里收获的东西。

本文准备对物联网领域里有趣的开源项目做个梳理。

如果你对某个技术领域感兴趣,带着关键词去Github里淘金通常是个不错的主意:

如果逐个介绍这些高赞的项目,够写一个系列的书了。我挑选我自己熟悉的,且觉得很有潜力的项目来做些介绍。

本文的目标之一是,希望让开发者看到, 通过组合这些项目,能构建出自己的物联网产品。

没图说个xx


先来画个草图,展示一个典型用户在使用物联网产品时的逻辑图。

图很简略,来自10000英里高空的视角,省去了大多细枝末节的东西。

通信逻辑


我们来用文字描述一下图中场景: 用户通过客户端(用户代理)连接到云端(通常云端运行着一个MQTT服务器), 来自客户端的指令通过MQTT协议,经由云端下发给物联网设备,设备的状态信息也可以通过MQTT反馈给客户端。

看图说话


接下来说说在图中不同环节中,有哪些有趣的开源项目能为我们所用。

服务器


图中那朵云比较大,我们以此为起点。

你可能要争辩说:

没有云 那只不过是别人的电脑。

道理我也懂,我们暂且假装服务商不偷数据,尽管目前没有任何技术能够保证这点。好在硬件加密目前进展不错,指不定我们哪天就能真的安全使用别人的电脑了。

说回正题,为了让客户端与设备建立双向通信,物联网行业一般使用MQTT协议。当然也有许多公司将这协议随便改改,起个新名字什么的,就举着自主研发的旗号去拿投资。

目前为止我们没有必要深究MQTT协议,可以把MQTT看作一个通信管道,能够在客户端与设备之间传递信息。

MQTT消息会流经一个服务器,服务器上运行着MQTT服务,更专业的术语叫MQTT Broker,我们暂时把它想象做消息中转站即可。

听起来这东西在物联网中占据中心地位呢,所有消息都流经它。怎么搭建一个MQTT Broker呢,目前有很多开源项目能帮你做到这点:

  • emqx : erlang

  • mosca : javascript

  • mosquitto: C/Python

  • hbmqtt: Python

我目前正在使用emqx和hbmqtt, emqx性能很高,配置高的单台服务器就能支持百万连接。集群的话,可以处理千万级连接。

emqx自带web管理面板,这是我目前正在运行的节点:

当然,除了大量的开源项目可以用作基础设施,许多云服务商,也开始提供此类基础服务。本月21号准备去北京参加阿里云十年再出发技术峰会,其中物联网专场就会提到他们目前在这块提供的云服务。

Client(Proxy)


说完了服务端,来说说Client(用户代理)。

如果站在MQTT服务器的视角,我们会看到User Client和device都是MQTT客户端。

我们先谈论用户接触的客户端(用户代理), 设备端稍后来说。

今天,用户一般通过手机APP和智能音箱与物联网设备交互。

假设用户采用手机APP来控制设备,开源社区有那些项目能帮到我们构建这些APP呢?

blynk非常值得关注。

Blynk是一个与硬件无关的物联网平台,具有可定制的移动应用程序、私有云、规则引擎和设备管理分析仪表盘。

在blynk平台中,通过可视化拖拽,你就能创建一个可发布到google play或app store的应用。

blynk是全球最流行的物联网平台之一,如果考虑开发者数量,可能没有之一。

blynk开源了若干项目, 开源地址在 github.com/blynkkk,如果担心自己的数据安全,可以搭建自己的server。

blynk帮助你快速构建易用的客户端,它默认支持400多款硬件,其中很多是开源硬件,所有的硬件驱动,blynk都开源出来了!

blynk是个综合项目,它远不止帮你构建物联网客户端。

如果你希望客户端APP更加可控,你可以选择自己构建APP UI,只使用MQTT client库,这样所有事情都在你控制之中。社区里有大量MQTT client开源项目:

  • MQTT-Client-Framework: iOS, macOS, tvOS native ObjectiveC MQTT Client Framework

  • paho.mqtt.android

  • MQTT.js

device(物联网设备)


最后我们来说说图中最下边的部分: 物联网设备。

无论是MQTT Broker还是Client(用户代理), 都是为了与device通信,device是用户实际使用的东西。典型的device有智能智能灯、智能插座这类东西。

值得注意的是,在现实中并不是每个设备都联网。目前的行业惯例是,这些设备先接入物联网网关, 实际上收发MQTT消息的是物联网网关。

各个设备与网关之间可能通过ZigBee或者bluetooth通信。目前bluetooth5已经登场,我相信网关与设备之间通信的未来是bluetooth5,新旧技术交接的时候,也是大量机会存在的时候。 关于bluetooth5的优势,有时间单独写一篇文章。

device是一个硬件,上边运行着程序。当然有大量的开源项目在这个领域出现。

我们来聊聊围绕device的开源硬件和开源软件。

由于device上要运行程序,所以它上边通常跑着一个实时操作系统,程序则运行在这个系统之上,有大量开源的实时操作系统,如:

  • RIOT:RIOT - The friendly OS for IoT

  • FreeRTOS: FreeRTOS的设计小巧且简易,整个核心代码只有3到4个C文件

  • rt-thread: 小而美的物联网操作系统

device上也可以不跑操作系统。诸如直接运行着micropython, micropython是我很喜欢的项目,利用这个项目,我们可以直接使用Python为硬件编程。如此一来,既能快速构建原型,性能和稳定性又完全足够用于生产环境。当然啦,如果你更喜欢lisp,可以使用ulisp, 如果你更喜欢JavaScript,可以使用espruino。所有这些是开源项目。

micropython支持众多类型的板子,大多数都完全开源,社区里有现成的MQTT库供你使用。你可以选择任意一个板子构建你的产品。如果你构建的的物联网产品服务于教育,micropython社区有个对教育友好的分支:circuitpython。

device一般需要与网关协作。对于构建原型来说,树莓派是非常理想的网关。事实上国外有大量项目将其用于生产实际,用于工业或农业领域。

再往底层说,我们可能关心device上采用什么芯片,我比较喜欢两个系列的芯片:

  • esp32/esp8266

  • nrf51/nrf52

esp32芯片自带蓝牙和wifi,价格低廉,支持micropython。

nrf52系列的芯片支持bluetooth5!micropython社区正在对其进行兼容。

这个系列芯片对bluetooth5的支持如下:

我目前在使用nrf52840,它支持的协议包括:

  • Bluetooth 5

  • Bluetooth mesh

  • Thread

  • Zigbee

  • 802.15.4

  • ANT

  • 2.4 GHz

nrf52系列的芯片由北欧半导体公司生产,这家公司对开发者极为友好,开源了大量的工具和项目,开发者可以将其用作脚手架,快速构建产品。

颜值即正义


一个功能强大却不够好看的物联网产品,怕是要遭人嫌弃的。如果直接裸露开发板,恐怕只能卖给黑客或朋克了。可恶的是,这两类人群还最不爱买现成的东西。你拿着一个裸露的产品到他们面前,一个典型的黑客,可能只愿意买其中的一根杜邦线,因为他目前只缺这一根线。

要忽悠投资,或者卖给c端用户。让你的设备变得好看一点通常是必要的,3D打印个漂亮的外壳可能是个不错的注意。

即便在3D打印领域,开源社区依然为你做了大量的事。3D打印发展之所以如此迅速,是因为这个领域的核心技术多是开源的,感兴趣的朋友可以看看3D打印的历史。

其次,社区里有大量用户以知识共享协议开源了他们设计的3D模型,你可以在thingiverse之类的网站上找到大量可用的3D模型,用做产品外观。

诸如你想要用树莓派制作一个游戏机,有大量有趣的3D模型:

如果你希望用乐高风格的积木来作为产品外观,开源社区同样有解决方案(不存在专利风险): PELA-parametric-blocks

感兴趣的方向


说说我目前感兴趣的几个方向。

边缘计算


AI和IoT的结合有很多想象空间,这是现在很多硬件产品发布会的焦点所在。

连续爆出的隐私问题,让人们对基于云端的AI表示担忧。隐私话题我们不多讨论,感兴趣的用户hacker news上有大量实锤案例。

边缘计算将数据的处理,由网络中心节点,移往网络逻辑上的边缘节点来处理。如此一来,我们可以享受AI带来的便利,也能避免隐私泄漏的风险。

当前已经有很多优秀项目致力于此。

树莓派社区有个用于边缘计算的深度学习开源项目: BerryNet,来自日本的Connect People and Things项目也很有意思。

数据可视化


如何将传感器采集的数据可视化,是个很有趣的话题,这也是提升用户价值的地方。

thingsboard、node-red以及blynk.io都做了大量优秀的工作。

截取一些thingsboard的数据面板

智能能源:

智能农业:

车队追踪:

允许用户使用积木来自定义图表:

隐私优先的智能家居


Bozhidar Bozhanov在Why I Don’t Have a Smart Home一文中,吐槽了智能家居的现状。

我赞同他对隐私的担忧。有很多项目在考虑隐私优先的智能家居,home-assistant是这个领域的的佼佼者,它完全开源,部署在本地,为你带来便利的同时,也避免了隐私风险。

Bozhidar Bozhanov在文中给出了一个非常有意思的建议,他认为办公室自动化可能是比家庭自动化有价值的方向。

当你希望将空间自动化,又不想活在一群人的监控视野下,home-assistant通常都是理想的选择。

万物积木化


万物积木化是我一直感兴趣的话题,在物联网方向,积木依然可以做很多事。围绕这个话题,我此前写过一篇文章: 积木化编程与智能家居

node-red是个IBM贡献的一个有趣开源项目,方便你用积木轻松玩转物联网。

CodeLab在万物积木化这块也做了很多工作: codelab-adapter

垂直行业应用


智能农业和智能工业是非常有趣的两个领域。

目前有国外大量物联网项目在探索这两个方向, blynk.io中有很多案例。

前几天索尼分享了他们如何使用树莓派这块廉价开源硬件将工厂效率提高30%以上: How Sony Sped Up A Factory With These Tiny, $35 Computers

screenly是一个基于树莓派的开源数字标牌解决方案,数字标牌市场预计到2020年将增长到219.2亿美元。我有写过一篇文章讨论这个话题: Screenly--用树莓派让任何屏幕变为可编程的数字标牌。

参考


  • awesome-mqtt

  • Why I Don’t Have a Smart Home

  • io.adafruit.com

  • Why you should use a relational database instead of NoSQL for your IoT application

  • How Sony Sped Up A Factory With These Tiny, $35 Computers

  • Connect People and Things

  • screenly

  • home-assistant

  • node-serialport

  • freeboard

  • cylon: JavaScript framework for robotics, drones, and the Internet of Things (IoT)

  • RIOT:RIOT - The friendly OS for IoT

  • rt-thread

  • 实时操作系统

  • zigbee2mqtt

  • BerryNet

  • Sonoff-Tasmota

  • node-red

  • thingsboard

  • Dumbass Home 2.0

  • blynk-server

  • balena-io

物联网相关开源项目整理相关推荐

  1. GitHub 优秀的 Android 开源项目 淘宝技术牛p博客整理开发中最常用的GitHub上 优秀的 Android 开源项目整理(精品)...

    原文地址为http://www.trinea.cn/android/android-open-source-projects-view/,作者Trinea 主要介绍那些不错个性化的View,包括Lis ...

  2. asp.net mvc相关开源项目推荐

    原文地址为: asp.net mvc相关开源项目推荐 asp.net mvc ctp版本发布不到一个月时间,在社区出现了丛多的优秀开源项目,社区的活跃性非常高哦,前一段时间园子里也引发了MVC和Web ...

  3. 【radar】毫米波雷达相关开源项目代码汇总(工具箱、仿真、2D毫米波检测、融合、4D毫米波检测、分割、SLAM、跟踪)(6)

    [radar]毫米波雷达相关开源项目代码汇总(工具箱.仿真.2D毫米波检测.融合.4D毫米波检测.分割.SLAM.跟踪)(6) Toolbox pymmw https://github.com/m6c ...

  4. PHP7 JIT 相关开源项目(JPHP)

    PHP 7.1 是否达到了最佳性能? 鸟哥惠新宸答:不能说最,别看 PHP 7.1 现在这么快,但相比其它语言,在某些场景下,还是有差距的.这跟它天然的像动态.符号表.间接引用等特性有很大关系.PHP ...

  5. 开源作者在行动:疫情防控相关开源项目推荐

    开源作者在行动:疫情防控相关开源项目推荐: https://blog.gitee.com/2020/02/03/ncov-open-source-project/

  6. go开源项目整理-新手篇_一周的前5篇文章:您正在从事什么开源项目?

    go开源项目整理-新手篇 每周,我都会汇总这些数字并听取嗡嗡声,以在2014年10月6日至10日这周为您带来上周在Opensource.com上的最佳开源新闻和故事. 一周前五篇文章 #5. Mood ...

  7. 关键词提取自动摘要相关开源项目,自动化seo

    关键词提取自动摘要相关开源项目 GitHub - hankcs/HanLP: 自然语言处理 中文分词 词性标注 命名实体识别 依存句法分析 关键词提取 自动摘要 短语提取 拼音 简繁转换 https: ...

  8. 不明觉厉!Gitee大神们的算法/数学相关开源项目推荐

    现在的大厂面试,算法似乎已经成为了必考项目.当大家的业务水平相近,谁的数学与算法基础更好,谁可能就会获得更好的机会.Gitee 上也有一些数学算法的大牛,今天就为大家分享他们的开源项目,希望能给正在学 ...

  9. IMU相关资料(github上所有有用的开源项目整理)

    IMU相关资料 1 标定相关 1.1 资料收集 有关于IMU的标定. 此外,IMU的标定在github中也有介绍,并且有matlab代码,CSDN.从这个帖子出发,又看到IMU模块的姿态校正,具体代码 ...

最新文章

  1. Pytorch: 命名实体识别: BertForTokenClassification/pytorch-crf
  2. UC伯克利给四足机器人加Buff:瞬间适应各种真实地形,抹了油的地面也能hold住...
  3. 文本分类入门(二)文本分类的方法
  4. LightOJ 1422 Halloween Costumes
  5. jmeter集合点使用方法:Synchronizing Timer
  6. 微信小程序scroll-view去掉滚动条
  7. 【Elasticsearch】elasticsearch 段 segment 段合并
  8. 我在一家通信公司上班
  9. [转载] json.dumps()和json.dump()的用法和区别
  10. 二十年后我发明了保姆机器人作文_我想发明保姆机器人作文500字
  11. paip.获取当前实际北京时间API
  12. c 和易语言如何传字节集,易语言字节集参数传递详解
  13. C语言递归函数 计算学生年龄
  14. ffmpeg mov 转 mp4
  15. 教育培训机构管理系统软件如何查看优惠券记录?
  16. 原生JS灵魂之问(中),看看你是否熟悉JavaScript?
  17. JSP+ssm计算机毕业设计居民小区安全巡检系统服务端设计65261【源码、数据库、LW、部署】
  18. 18650锂电池镍带镀镍钢片(连接带)怎么拆,怎么容易焊锡
  19. 初出茅庐,请“专业”赐教!
  20. C语言:打印二元一次方程的根

热门文章

  1. 编程这么久, printf 知多少(二)
  2. “遯世无闷”与“人不知不愠”
  3. toFixed精度不准问题
  4. 电磁波、带宽、数字调变技术简介
  5. 学习ExplosionField之粒子破碎效果
  6. MFC基础,MFC自绘控件学习总结.-- 转
  7. Mac/Linux安装人脸识别常用库(tensorflow、pytorch、dlib、face_recognition、opencv、CMake、gcc/g++)————所有环境一次性配置好
  8. linux的一些学习笔记
  9. android更新后名称不变,Android 10这个新名字虽然无聊 但改名却是正确之举
  10. Mac与iPhone屏幕录制