这里聊聊扫地机的 IOT 开发
以下内容为本人的著作,如需要转载,请声明原文链接微信公众号「englyf」https://www.cnblogs.com/englyf/p/16663833.html
消费者使用扫地机通常的方式是通过手机APP去遥控它,比如启动清扫,划定清扫区域,设置预约清扫任务,还有启动回充等等。这些功能的实现,都依赖于扫地机的网络接入。业内把这个网络称呼为物联网,目前的接入方式其实都依赖现有的网络基础设施,比如在公网搭建各种 IOT 云服务,方便于终端客户的扫地机设备和手机APP互联互通。
为了实现互联互通,需要和 IOT 云服务对接,这其中包含了两部分的开发任务。其一是,机器端的接入开发任务,一般是用无线 wifi 技术连接家庭用的路由器进而访问公网的 IOT 云服务。其二是,配置云平台后台相关产品的设置。其三是,手机APP端的接入开发任务,通过云服务商的授权API,APP访问和更新机器上传到云服务器的数据缓存,进而和扫地机的用户互动。

说说机器端的联网开发
扫地机既然要访问 IOT 云服务,就必须具有联网的能力,比如通过上面提到的无线 wifi 技术。那么扫地机使用这个无线 wifi 技术是不是就像电脑用网卡上网一样呢?答案是,肯定的。扫地机属于嵌入式设备,使用无线 wifi 技术一般通过在主板上外接 wifi 模块来实现。
由于嵌入式设备的使用场景有着很大的差异,比如设备除了需要访问专门的 IOT 云服务,有的方案商还会提供一些特殊的内置服务进而需要设备能访问其它的网络服务(比如让设备贴心地播放天气预报,那么就需要能访问天气预报服务以获取天气数据。除了这个小功能,你的想象力还惦记着什么呢?欢迎留言!)。
另外,如果生产商对嵌入式设备的成本很敏感,那么在硬件投入上还是省着点吧,毕竟功能的多少还是以硬件为基础的。除了必要的云服务(与APP互联互通的 IOT 云服务)之外,其它功能也不作硬性要求了,那么联网的硬件是不是可以作出一些牺牲,比如专门面向特定的 IOT 云服务,甚至于只接入某个云服务商。
基于目前的使用需求,wifi 模块,可以分为普通 wifi 模组和嵌入式 wifi 模组。

普通 wifi 模组的特点是不内置 wifi 协议和驱动,一般通过 USB 或者 SDIO 等接口和设备主控芯片连接。设备的主控芯片需要支持 wifi 协议栈和驱动,性能要求比较高,通常选择通用性 CPU,因而业务开发更灵活,方便于拓展丰富的应用领域。这种配置,你的想象力可大可小,千万别辜负了。
嵌入式 wifi 模组的特点就是内置了 WiFi 协议和驱动,一般通过专用协议串口等接口和设备主控芯片连接。设备的主控芯片,性能要求不高,通常选择 MCU,便于降成本,但是业务场景相对受限。这种配置下,你的设备能访问什么服务,完全看 wifi 模块提供商的配置。
并不是所有 IOT 云服务商都支持上面的两种 wifi 模组,只有部分 IOT 云服务商会同时支持。理论上所有的 IOT 云服务商都支持普通的 wifi 模组连接,而提供了嵌入式 wifi 模块的服务商,已知的有涂鸦和华为 HI-LINK 等。
说说云平台的后台配置
开发扫地机设备端的联网任务,除了硬件上的投入之外,还需要做一些和云平台后台有关的事情。
目前国内主流的 IOT 云服务商有涂鸦智能云、阿里生活物联网、亚马逊 AWS、华为 HI-LINK 等。这其中接入门槛最低的要数涂鸦智能云吧,因为它不仅提供了廉价的云服务,还有现成的公共APP,所以终端机器运营商如果考虑成本的因素还可以免去开发自己APP,就算初次开发APP也能使用云服务商提供的 SDK(开发套件)快速推出成品APP。
要声明的是每个云服务商的具体开发流程和有关术语会有差异,可以翻照具体的云平台提供的开发文档指引。
这里介绍一下通用的流程:
1. 选择 IOT 云服务平台
可以针对自己的需求选择最合适的云服务供应商,如果你自己是有扫地机设备开发团队的,但是APP开发的投入想省掉,那就选涂鸦吧,上文已介绍原因。如果你没有扫地机设备开发团队,扫地机的开发任务是交给方案商去做的话,建议选择阿里生活物联网,这个平台的互联网基因大家都是知道的,开发调试会非常方便(作为曾经在某个方案商呆过,这是真心话。题外话:有没有人喜欢玩真心话大冒险?)。除了开发的因素,还要考虑成本价格,一般收费的原则是按照单个接入设备一次性收费。
是的,还有很多平台可以选择,各位老板自己喜欢吧。
2. 注册开发者账号
登录 IOT 云服务平台的网站,用公司的名义注册个主体账号。如果你需要授权该账号的权限给开发人员或者方案商,可以查看一下该平台是否支持产品开发的权限授权。
3. 创建产品
各平台都提供了创建产品的模板,选择一个类型和扫地机业务类似或者匹配的模板。这一步会自动生成一个 product_id,后边有提到。
4. 配置功能
IOT 云平台配置功能都是通过 物模型 清单来实现。为了直观说明,下面展示涂鸦平台的一个扫地机物模型例子给大家看看:
| DP ID | 功能点名称 | 标识符 | 数据传输类型 | 数据类型 | 功能点属性 |
|---|---|---|---|---|---|
| 1 | 电源开关 | power | 可下发可上报(rw) | bool | |
| 2 | 清扫开关 | switch_go | 可下发可上报(rw) | bool | |
| 3 | 清扫模式 | mode | 可下发可上报(rw) | enum | 枚举值: standby, random, smart, wall_follow, mop, spiral, left_spiral, right_spiral, right_bow, left_bow, partial_bow, chargego |
| 5 | 工作状态 | status | 只上报(ro) | enum | 枚举值: standby, smart_clean, wall_clean, spot_clean, mop_clean, goto_charge, charging, charge_done, paused, cleaning, sleep |
| 13 | 寻找机器 | seek | 可下发可上报(rw) | bool | |
| 101 | 清扫 | clean_switch | 可下发可上报(rw) | bool | |
| 102 | 暂停 | pause_switch | 可下发可上报(rw) | bool | |
| 103 | 回充 | charge_switch | 可下发可上报(rw) | bool | |
| 104 | 清扫模式: | clean_mode | 可下发可上报(rw) | enum | 枚举值: smart, pose, zone, backcharge, curpointing, selectroom, null |
| 105 | 当前状态: | robot_state | 可下发可上报(rw) | enum | 枚举值: idle, pointing, areaing, totaling, sweep, mop, fault, pause, chargring, tocharge, fullcharge, remotectl, dormant, curpointing, selectroom, chargingwash, dusting, selfclean |
| 106 | 剩余电量 | battery | 可下发可上报(rw) | value | "数值范围: 0-100, 间距: 1, 倍数: 0, 单位: %" |
| 107 | 清扫时间 | cur_clean_time | 可下发可上报(rw) | value | "数值范围: 0-2147483647, 间距: 1, 倍数: 0, 单位: 秒" |
| 108 | 清扫面积 | cur_clean_area | 可下发可上报(rw) | value | "数值范围: 0-2147483647, 间距: 1, 倍数: 0, 单位: " |
| 109 | 吸力 | fan_mode | 可下发可上报(rw) | enum | 枚举值: quiet, auto, strong, max |
| 110 | 水量设置 | water_mode | 可下发可上报(rw) | enum | 枚举值: low, mid, high |
可以看到首先需要建立一个 DP 点(对应着一个功能),然后命名功能点对应的名称,并且有对应的功能标识符,定义可读可写的数据传输类型(对于云端而言),定义当前功能的数据类型,以及具体的枚举值或者数值范围等。
5. 购买联网许可
扫地机在联网时,需要凭证云平台提供的 liscense 才可以顺利使用该平台的信息交互服务。用账号登录平台就可以申购对应设备数量的 liscense,然后在生产的时候把 liscense 烧录进机器。用户把扫地机带回家里后,在使用APP成功控制机器之前,需要按照使用说明书的指引触发扫地机进入配网模式,然后按照APP的配网流程把机器绑定到云平台。机器能否成功绑定,首先是扫地机需要通过蓝牙或者wifi的AP热点模式直连手机从APP获取到家庭的路由器 wifi 名和密码,然后通过家庭网络把机器内部存下来的 liscense 发给云平台校验并获取授权通过。
在开发阶段,一般平台会提供一定数量的免费 liscense 用于调试设备,需要在平台上面申请。这个 liscense 在有的平台也会称呼为三元组,一般包含有代表产品的 product_id,代表设备唯一识别码的 UUID 或者 MAC,和代表设备授权的键值 author_key。product_id 在前面的创建产品时就已生成,后边的两项信息只会在购买 liscense 成功后才可以看到。
6. 调试功能
有的云平台为了方便开发者调试设备功能点,提供了比较详细的调试功能,比如设备在线状态,实时查看平台针对设备收发的数据日志等。
7. 发布产品
关于产品的各项准备工作完成后,需要让该产品在云端进入发布状态,这样该产品下的设备才能被云平台提供数据处理服务。
8. 上传 OTA 升级包和多语言包
产品上市后,是有极大可能需要在客户手中更新机器固件的,比如大量客户发现了机器工作异常。这样就需要通过云服务给设备远程更新固件,一般通过在APP页面预置升级按钮,当用户点击 升级 按钮后,云平台就会把提前上传到后台的固件升级包下发给机器,机器接收完整升级包后自动执行后续所有操作,这个过程就是 OTA(over the air update)。
有些产品提供多语言的功能,只要用户在APP页面点击切换对应的语言包,云平台就会把提前上传到后台的对应语言包下发给机器,机器接收完整语言包后自动执行后续所有操作。
关于APP端的开发这里略过。。。
好了,简单介绍到这里,下次见。
这里聊聊扫地机的 IOT 开发的更多相关文章
- Windows 10 IoT Serials 1 - 针对Minnow Board MAX的Windows 10 IoT开发环境搭建
目前,微软针对Windows IoT计划支持的硬件包括树莓派2,Minnow Board MAX 和Galileo (Gen 1和Gen 2).其中,Galileo (Gen 1和Gen 2)运行的是 ...
- 【Windows10 IoT开发系列】API 移植工具
原文:[Windows10 IoT开发系列]API 移植工具 Windows 10 IoT Core 中是否提供你的当前 Win32 应用程序或库所依赖的 API? 如果不提供,是否存在可使用的等效 ...
- 【Windows10 IoT开发系列】PowerShell的相关配置
原文:[Windows10 IoT开发系列]PowerShell的相关配置 可使用 Windows PowerShell 远程配置和管理任何 Windows 10 IoT 核心版设备.PowerShe ...
- 【Windows10 IoT开发系列】Powershell命令行实用程序
原文:[Windows10 IoT开发系列]Powershell命令行实用程序 更新帐户密码: 强烈建议你更新默认的管理员帐户密码.若要更新帐户密码,你可以发出以下命令: net user Admin ...
- 【Windows10 IoT开发系列】“Hello,World!”指导
原文:[Windows10 IoT开发系列]"Hello,World!"指导 本文主要是介绍使用C#来开发一个可以运行在Raspberry Pi2上的一个基本项目. 1.在启动V ...
- 【Windows10 IoT开发系列】配置篇
原文:[Windows10 IoT开发系列]配置篇 Windows10 For IoT是Windows 10家族的一个新星,其针对不同平台拥有不同的版本.而其最重要的一个版本是运行在Raspberry ...
- 小熊派IoT开发板系列教程正式发布——免费学习
[摘要] 小熊派开源社区针对小熊派IoT开发板首次规划了小熊派未来的系列教程.从基础到进阶的设计,可适应具有不同基础的开发者,通过该系列教程的学习,开发者能够轻松掌握IoT产品的开发.该系列教程包括单 ...
- IoT开发精英实战营招募啦!速来报名!
具有了向上的力量,才能一眼望到山外的大地,蜿蜒的长河,人类精神的进步. --罗曼·罗兰<爱与死的搏斗> 七月流火,八月未央,九月授衣.说是长长长长的夏天,眨眼间,也早过了立秋而迎来处暑.距 ...
- HC大会,华为联合合作伙伴发布一站式物联网IoT开发工具小熊派BearPi
传统的物联网产品开发步骤复杂,涉及硬件开发.软件开发.云端开发等众多流程.而且产品的开发周期长.开发成本高.产品稳定性不佳.维护成本高.而物联网设备本身市场竞争激烈,价格低,设备更新迭代快,所以在保证 ...
随机推荐
- Windows下maven配置环境变量
右键 "计算机",选择 "属性",之后点击 "高级系统设置",点击"环境变量",来设置环境变量,有以下系统变量需要配置: ...
- vue封装原生的可预览裁剪上传图片插件H5,PC端都可以使用
思路:1.先做出一个上传的图片的上传区 <!-- 上传区 --> <label for="fileUp"> <div class="upBo ...
- Spring学习笔记(4)Spring 事件原理及其应用
在 JDK 中已经提供相应的自定义事件发布功能的基础类: java.util.EventObject类 :自定义事件类型 java.util.EventListener接口:事件的监听器 首先了解几个 ...
- 攻防世界MISC—进阶区21-30
21.easycap 得到一个pcap文件,协议分级统计,发现都是TCP协议 直接追踪tcp流,得到FLAG 22.reverseMe 得到一张镜面翻转的flag,放入PS中,图像-图像旋转-水平翻转 ...
- 如何快速体验OneOS
随便逛了逛 之前有简单了解过OneOS,今天逛了下OneOS专区,发现官方终于也在宣传方面发力了啊,很多文章都非常专业,也有开发者在专区里面提问题了.也发现,部分开发者倒在了第一步,如何编译下载运行O ...
- OptaPlanner 发展方向与问题
最近一段时间,因为忙于[易排(EasyPlan)规划平台]的设计与开发工作,平台的一些功能设计,需要对OptaPlanner的各种特性作更深入的研究与应用.慢慢发现,OptaPlanner进入8. ...
- 丽泽普及2022交流赛day20 1/4社论
目录 T1 正方形 T2 玩蛇 T3 嗷呜 T4 开车 T1 正方形 略 T2 玩蛇 略 T3 嗷呜 (插一个删一个?) 找出相同的,丢掉循环节 . 感觉非常离谱,,, 正确性存疑 正确性问 SoyT ...
- Javaweb03-servlet&filter
1.什么是servlet 第一个servlet应用程序,实现servlet接口 定义:凡是实现了servlet api接口(或者继承servlet api接口的实现类)的类就是servlet应用程序: ...
- 编译器工程师眼中的好代码:Loop Interchange
摘要:本文将以Loop Interchange的场景为例,讲述在编写代码时可以拿到更优性能的书写方式. 本文分享自华为云社区<编译器工程师眼中的好代码(1):Loop Interchange&g ...
- 二位数组——扩展:冒泡排序、Arrays类
1.冒泡排序 速记口诀(升序) n个数字来排队:两两相比小靠前:外层循环n-1:内层循环n-i-1. 示例:定义一个数组,用冒泡排序将数组进行升序排序 关键代码: 输出结果: 2.Arrays 类 ...