从程序员的角度,来拆解物联网系统中的开发工作
文章目录
- **物联网系统**
- **设备端的开发**
- 1. 不需要网关的设备
- 2. 需要网关的设备
- 3. WiFi 类设备
- **物联网平台开发**
- **业务应用开发**
推荐一篇好文:从程序员的角度,来拆解物联网系统中的开发工作
可以结合我之前的一篇文章来看,文章链接:2022年学习方向
物联网系统
设备端的开发
- 不需要网关的设备
- 需要网关的设备
- WiFi类设备
物联网平台开发
业务应用开发
物联网的概念已经被炒了好多年了,奇怪的是:市场中对这个概念的反应总是不愠不火。
随着5G 的迅速普及,不知道是否能够再次把这个领域带火起来。
但是不管怎样,很多大学已经把物联网这个专业给坐实了。
前几天,一位大一的小伙伴私信我:进入物联网专业已经快一年时间了,却不知道以后出去干什么?
这篇文章,我们就从开发者的角度,来简单看一下物联网这个领域使用了哪些技术栈、有哪些开发工作。
物联网系统
这张图从开发者的角度,展示了一个物联网系统中的各种角色,包括它们之间的通信。
如果从软件开发岗位的角度来对这几个模块进行划分的话,这个系统中主要包括:
- 前端、后端开发:负责物联网平台和业务应用的开发;
- 嵌入式软件:主要是设备端的开发,这部分根据使用的不同技术(或者说硬件模块),又可以分为很多不同的子领域;
- 移动端开发:Android APP, iOS APP, H5 小程序,还有目前的鸿蒙系统APP。
设备端的开发
这里描述的设备,还是属于比较狭隘的范畴,仅仅包含了具有通信功能的物理硬件实体。
如果从广义的物联网来看,任何物品,只要能够接入网络,都可以称之为设备,或者称之为 thing。
比如:把一件衣服附上一个电子标签,也是物联网的一个小分子。
我们这里,仍旧以传统意义上的设备来讲解,比如:智慧路灯,智能手表,智能家居里的门磁、报警器等等。
对设备端的开发进行分类的话,从通信方式这个角度来进行划分比较清晰。
一个设备要想接入到网络,肯定需要通信功能,包括:有线通信,无线通信。
在一些传统行业,或者对通信质量要求比较高的场景下,部署有线网络还是比较常见的,例如一些工业场景中。
对于一些民用领域,大部分还是以无线通信为主。
1. 不需要网关的设备
这一类设备,利用 2G/3G/4G 基站来进行数据的传输,产品的形态是:
也就是 单片机+通信模块的方式。
通信模块包括:GPRS 模块、4G 模块、NB-IoT 等等。
在开发这一类产品的时候,单片机负责产品的功能部分;通信模块负责通信部分。
单片机与通信模块之间,在硬件上通过 UART 口通信居多,在协议上可以通过 AT
指令,或者其他的一些专有协议。
近几年,在传统的消费类电子产品上,添加一个通信模块,让产品达到连网的功能,还是比较流行的。
这一类的产品的软件开发工作,与一般的单片机开发并无两样。无非是增加了一些通过网络来上报数据,或者从网络接收控制指令。
只要熟悉所使用的通信协议即可。
上面的这种产品形态,需要对硬件进行重新设计,比较适合从零开始的产品开发。
那么对于那些已有的产品,如果想连接到物联网平台上,但是又不想重新设计,又该怎么办呢?
有需求就有供给!
比如:一些扫地机、吸尘器的厂商,由于找不到其他可以创新、突破的点,于是就开始内卷,纷纷加上连网的功能。
他们直接在产品中,添加一个 ESP8266
或者 ESP32
模组,就立刻升级成一个智能产品,多么高大上。当然了, 价格也同样高大上起来了!
ESP8266
或者 ESP32
与一般的通信模组有一点不一样:它是一个完整的单片机,只不过它们的主要用途就是专门用来解决通信问题,而不是一般的功能控制。
2. 需要网关的设备
如果提到智能家居,可能大部分的人会想到一个词语 ZigBee
,这是一个局域网的无线通信协议,大概在 2005
年左右就开始在智能家居中崭露头角了。
与 ZigBee
类似的无线通信协议还有:ZWave
、RF433
、BLE
等等。
它们的作用都是类似的:都是为了让多个设备能够组网,节点之间以多跳的方式传输数据,达到通信的目的。
这些数据最终会汇总到一个叫做网关的设备,然后与云端的服务器进行通信。
这一类产品的开发,包括:网关开发 和 设备开发这两种。
网关的开发稍微复杂一些。从功能上来说,网关需要实现:
- 设备的管理(与物联网平台的设备管理不是一个概念);
- 规则引擎(在断网的状态下实现场景联动等功能);
- 通信协议转换(把物理网平台的通信协议转成设备私有协议);
有些网关中,还会集成不同的无线通信协议模块,比如:把 ZigBee
、BLE
、红外
等功能,集成在一个网关中,这样的话,不同通信方式的设备就可以在一个系统中共存了。
此时,网关就要做更多的工作:
- 上行链路(连接到云平台):需要做到协议的统一,也就是说云平台才不关系下面到底是什么样的无线通信技术,云平台只会以统一的数据格式来表示每个设备;
- 下行链路(连接到设备):协议转换,把云平台发来的统一的数据格式,转换成不同的无线通信协议特有的数据格式;
设备的开发工作就相对纯粹一点了,它只需要处理某一种无线协议即可。
这一类设备的开发,一般都是使用相应的通信模组,底层的协议栈都是提供好的。
开发者需要做的工作主要就是熟悉应用层的通信协议,完成指令的解析和数据上报工作。
3. WiFi 类设备
这一类产品最常见的就是各种品牌的网络摄像头(IPCamera),比如:小米、360、萤石等等。
摄像头如果作为一个单品来使用,只要把家中的 WiFi
SSID 和 密码配置到摄像头中,就可以使用官方的 APP
来远程查看实时画面了。
如果把摄像头集成在一个智能家居的系统中,就需要二次开发。
摄像头厂家一般都会提供 SDK
,作为开发者需要做的事情就是:调用 SDK
中的 API
函数,获取实时画面、发送指令控制摄像头云台转动。
这里有一个底层的技术很有意思:P2P 网络穿透。
我们买来一个网络摄像机,是不可能有一个独立的 IP
地址的。也就是说:其他设备(手机)是没办法通过 IP:PORT 的编程方式,直接连接到摄像头的。
但是为了实时画面的传输质量,为了减轻服务器的转发压力,手机最好可以直接与摄像头建立 TCP
通信。
此时,P2P
网络穿透给这种需求提供了可能。
在早期的时候,深圳有大批的摄像头厂商使用的都是 TUTK
这家公司的 P2P
网络穿透服务。
在 P2P Master
(就是一台服务器)的协助下,实现移动端与摄像头之间的网络穿透,直接建立 TCP
连接。
物联网平台开发
物联网平台,作为连接业务应用和设备的中间层,屏蔽了各种复杂的设备接口,实现设备的快速接入。
目前,做的比较大的就是那么几家巨头:亚马逊的 AWS 平台,阿里云、腾讯、华为的物联网平台。
以上这几家的物联网平台,仅仅是他们的云平台中的一个组成部分。
它们的目标就是提供一个通用的通信标准和 SDK
,快速的接入各种硬件设备,通过设备接入数量、通信数据的流量,以及提供各种业务层的服务来赚钱。
另外,还有一些下一梯队的公司,开发了自己的、专门针对物联网领域的平台。由于知名度不高,只能以合作开发项目的形式来吸引硬件设备的接入。
从开发的角度来看,物联网平台的开发技术栈主要是后台开发。由于这部分技术栈我不太熟悉,就不去深入讨论了。
物联网平台最宝贵的就是数据,如何利用这些数据,这就是业务应用的事情了。
业务应用开发
所谓的业务应用,简单来说,就是通过调用物联网平台提供的 API
,实现设备管理、数据上报、命令下发等业务场景。
设备管理是在设备接入基础上,提供了更丰富完备的设备管理能力,简化海量设备管理复杂性,提升管理效率。
从物联网平台的设备和数据中,可以衍生出各种不同的业务应用场景,这就要根据实际的系统功能来进行按需开发了。
比如:智慧城市、智慧照明、智慧工业、车联网等行业应用。
涉及到的技术栈是:前端和后端开发。
从程序员的角度,来拆解物联网系统中的开发工作相关推荐
- 国内“孩子青春期”图书中的iPhone:正写书的程序员爸爸点评《拆解青春期女孩的小心事》
我是一个程序员.9岁男孩的爸爸.曾经译过一本300页的软件开发技术书的译者.正在写自己的书的作者.参加了7年英语演讲俱乐部(国际演讲会,www.toastmasters.org)的中.英文演讲爱好者, ...
- 从程序员的角度深入理解MySQL
前言 作为一名工作了4年的程序猿,今天我将站在程序员的角度以MySQL为例探索数据库的奥秘! 数据库基本原理 第一,数据库的组成:存储 + 实例 不必多说,数据当然需要存储:存储了还不够,显然需要提供 ...
- 从一个程序员的角度看——微信小应用
前言: 最近初步了解了一下微信小应用,APP端的同事也非常感兴趣,于是在公司内部做了一个小小的分享,分享的过程中有很多讨论内容,大家也是非常感兴趣和有自己的看法,当时"混乱"的场面 ...
- 从程序员的角度分析微信小程序
从程序员的角度分析微信小程序 我赶快在书架上拿出三年前买的书,把上面的土擦干净,压压惊. 作为一个并不是资深的程序员. 从程序员的角度分析一下微信小程序,欢迎指点. 首先 ...
- 从Java程序员的角度理解加密的那些事
前言 在我们日常的程序开发中,或多或少会遇到一些加密/解密的场景,比如在一些接口调用的过程中,我们(Client)不仅仅需要传递给接口服务(Server)必要的业务参数,还得提供Signature(数 ...
- 从程序员的角度分析微信小程序(编程语言:用到什么学什么)
从程序员的角度分析微信小程序(编程语言:用到什么学什么) 一.总结 一句话总结:微信小程序原理就是用JS调用底层native组件,和React Native非常类似.(需要时,用到时再学) 1.选择语 ...
- Blender基础:从程序员的角度理解顶点组(Vertex Group)和权重(Weight)
本文基于Blender 2.8正式版 参考官方文档Vertex Group 从程序员的角度看,一个**顶点组(Vertex Group)**实际上就是一个容器,容器中是顶点的引用(弱引用),一个模型可 ...
- 从程序员的角度看人类通信史
有没有一种可能:人类将来能用意念进行通信? 大家好,我是可乐. 相信大家看过的一些玄幻小说,都有这样一种场景:两个修仙人物相隔千里,都能通过意念传音进行沟通. 这比当前人类最快的通信方式都要快,不知道 ...
- java购买电视_以程序员的角度怎么购买一台「性价比高的电视」
前俩天有小伙伴在我的文章下留言,说能否把 [国内电视机都介绍一下],今天我已在TV端开发多年的程序员的角度.谈谈已程序员的角度如何购买一台性价比高的电视. 国内大的电视机品牌介绍 长虹 -- 成立于1 ...
最新文章
- RHEL5 install
- python中math.ceil是什么意思_python中的数字取整(ceil,floor,round)概念和用法
- ZZmsvcprt.lib(MSVCP90.dll) : error LNK2005:已经在libcpmtd.lib(xmutex.obj) 中定义
- sql中varchar(n),nvarchar(n) 长度性能及所占空间分析
- PHP文本处理 中文汉字字符串 转换为数组
- js里面如何才能让成员方法去调用类中其他成员
- 风口再起:数据中心建设
- 直播回顾 | 数据驱动实践的三大运营场景讲解
- 什么是区块链?真能改变货币和商业?终于有人讲明白了
- Android 系统(161)---N/O版本上图库打开一张图片,图片从模糊到清晰的时间太长
- 设计Whats App
- .net framework3.5新特性1:Lambda表达式
- 一个草根站长的创业故事之选择
- 详解animate.css动画插件用法
- 自然语言处理——基于预训练模型的方法——第4章 自然语言处理中的神经网络基础
- 通过Linux+SNMP+zabbix的实验理解SNMP协议
- 1466:Girls and Boys:优美的拆散早恋学生?
- 计算机电子表格证怎么样,初学者在电脑上如何制作电子表格
- android英语阅读识别库,基于Android的大学英语阅读学习平台研究
- 蛇形字符串、驼峰字符串转换
热门文章
- Java : 对象不再使用时,为什么要赋值为 null ? 侵删
- 反射_构造方法_成员方法_成员变量
- js时间戳转换为日期字符串
- Lan Goodfellow 《DEEP LEARNING》学习笔记 --第四章
- MP503空气质量气体传感器介绍
- 一个PostgreSql cli的工具
- 王道计算机网络课代表 - 考研计算机 第四章 网络层 究极精华总结笔记
- mysql 存储过程 队列_mysql使用存储过程函数实现批量插入
- (202103更新)海康威视网络摄像头sdk python版 (报错排查) 移动物体检测 多通道海康威视网洛摄像头后台检测 海康威视网络摄像头Python SDK
- 高恪新路由三硬盘_新路由3刷高恪教程