本文适用于和我一样初识物联网业务开发与开发平台的读者朋友,让我们以我做的智能闹钟为例,一起来学习下基于腾讯的TencentOS tiny和IoT Explorer开发物联网小案例的步骤吧。
背景
我在7.27日参加了腾讯云IoT在滨海大厦举办的“物联网技术与应用”技术沙龙,这次沙龙针对腾讯云IoT全栈产品进行了介绍,包括物联网开发平台(IoT Explorer)、物联网操作系统(TencentOS tiny),恰逢这两个产品都在内测中,我就报名了本次“IoT迷你赛”内测活动,有幸成为TencentOS tiny 和 IoT Explorer的第一批体验用户,还领取了一套操作系统的定制开发板EVB_MX,可以拿来实践自己的物联网idea啦~
设计方案
物联网背后的意义是产品服务化,赋能传统产品去提供更多互联网和物联网新性能。比如一款物联网跑鞋,可以为消费者提供跑步数据分析的新服务,制造业厂商也可以了解产品使用情况,还可以同保险、医疗等行业协同带来更多商业价值。
而产品服务化就需要真正站在客户立场上思考,回顾自己这些年学生时代艰难的起床生涯,我决定为和我一样的睡不醒星人想想办法,结合物联网来扩展普通闹钟的功能和服务。值得一提的是,18年9月的时候小米在其新品发布会结束之际公布了一款小爱智能闹钟,它最大的亮点就是集成了小爱同学,但语音互动、娱乐广播等功能似乎偏离了闹钟叫醒的本质定位。
于是乎我想通过本次内测机会,实现一款能够深化叫醒功能的物联网智能闹钟,譬如通过灯光辅助叫醒、结合应用端(小程序)分析起床数据规律作息、通过打卡好友督促与商城奖励的方式激励用户养成早起习惯。我给这款闹钟命名为LightUp Recorder,让用户早起更轻松,让闹钟不再单单是一个工具型产品。实现方案框架与Demo功能分别如下:(功能详细描述见文末演示视频)
腾讯云IoT产品介绍
- TencentOS Tiny
腾讯面向物联网领域开发的实时操作系统,小体积,低功耗,IoT组件丰富,移植性好,调试便捷。由轻量级 RTOS 内核与多个物联网组件构成。详细操作系统架构介绍
- IoT Explorer
腾讯云物联网开发平台,提供便捷的开发工具与服务,助力更高效的完成设备接入,并提供应用开发及场景服务能力,帮助高效、低成本构建物联网应用。详细产品介绍
- 定制开发板
EVB_MX 是腾讯物联网团队联合南京厚德物联网有限公司设计的一款物联网评估板, 用于 TencentOS tiny 基础内核和 IoT 组件功能体验和评估。
准备工作
1、购买硬件模块
- 音频模块 JQ-8400FL
- 时钟模块 DS1302
- 温湿度传感器 DHT11
- 陀螺仪 MPU6050
- Wi-Fi模块 ESP8266 (开发板配套提供)
- 智慧路灯模块 E53_SC1(包含光敏传感器) (于腾讯云物联网合作伙伴南京厚德物联网购买)
2、申请产品内测权限
申请腾讯云物联网开发平台内测:腾讯云官网-产品-企业应用-物联网开发平台-立即申请。
开发实践
一、验证软硬件
1、编译操作系统代码
拿到操作系统源码和开发板后,将串口驱动,st-link驱动安装好之后,打开工程开始编译。
先找到工程文件:在board文件夹里选择开发硬件TencentOS_tiny_EVB_MX开发板,再选择文件夹KEIL,这里为了方便我选择了里面提供的建立好了数据模板的工程tencent_cloud_sdk_data_template,打开下图的keil工程,并编译这个模板工程。
编译结果出现了很多错误,提示文件找不到,查看头文件路径,发现头文件路径都添加了,发现是文件路径中出现了中文,关闭工程将文件路径中的中文改成英文,编译通过。
2、烧录:通过stlink下载程序到开发板
测试操作系统能否进行简单的任务创建,任务调度,栈空间分配等基本的RTOS操作。通过串口的简单打印就可以判断,新建测试线程如下图:
测试线程打印信息如下:
任务交替地运行,时间与设计的运行时间基本符合,这一步验证结束。
二、终端与物联网开发平台的互通性
(一)验证wifi模块
1、创建热点,在代码中修改wifi名称、密码。
2、通过串口助手测试wifi,串口提示wifi connected说明连接成功。
(二)终端代码适配
1、在物联网开发平台新建项目、产品和设备,创建与模板工程中对应的数据模板。
2、在终端代码中修改产品数据:产品ID、设备名称、设备密钥。
3、烧录调试终端代码,验证连通终端与物联网开发平台。
三、拓展数据模板
根据开发需求进行数据模板的增删工作。
1、增删平台设备的数据模板
2、增删终端设备的数据模板
修改的文件不变,初始化数据结构体。
修改数据接收处理,通过key标识来区分。
四、模块嵌入式开发
1、添加模块驱动文件将之前的模块的.c和.h文件添加到到Hardware文件夹下,加入工程,部分平台已经编写,自己添加的模块需要自己来适配。
2、本地模块的交互逻辑处理
创建每个模块的运行任务,处理本地的业务逻辑,给数据上报和下发任务提供程序接口。
示例:闹钟报时任务
备注:音频模块开发中语音合成部分使用腾讯云的语音合成TTS实现。
五、数据映射
这里开始实现数据的上报和下发逻辑,在平台数据发生改变时,下发的数据逻辑触发对应的开。同样是light_data_template_sample.c文件。
以数据下行为例,触发下行接口会更新数据模板结构体,通过判断结构体中的数据来实现下行用户数据逻辑。
上行逻辑类似 ,部分数据上报:
六、应用端开发
1、基于微信开发者工具的云平台进行开发。建立小程序功能页面如下:
2、建立云环境,在云环境中建表分别存储用户设置的闹钟和打卡时间。
3、熟悉物联网开发平台设备管理相关接口、数据查询相关接口。
4、小程序通过云函数与物联网开发平台连接。
(1)在小程序中设置API所需的四个参数:产品ID、设备名称、访问秘钥
(2)建立云函数query、control。query用于设备数据查询,control用于设备属性控制。
(3)通过终端npm局部安装Tencent Cloud SDK 3.0 for NodeJS;
(4)将云函数及其相关依赖上传并部署到云环境中。
(5)使用云函数获取设备数据。
(6)使用云函数控制设备属性。
在这里出现了错误,使用小程序云函数控制设备属性之后,物联网平台就无法获取设备影子,接收设备上传的数据了,具体原因未明。
debug过程:
- 在开发平台重建设备。设备与平台的连接没有问题,上下行运行正常。
- 通过平台提供的在线API,测试请求是否有误(如下图所示,设置闹钟时间及铃声,在线请求后,平台的数据改变,说明请求代码无误。)
在线API使用方法:
首先将SecretId、SecretKey、Region、ProductId、DeviceName以及Data填完整,Data的格式是对象。其次选择node.js,自动生成代码。最后点击在线调用的发送请求,得到相应结果。
5、通过以上查找错误的过程,将错误击中在云函数中,初步怀疑是云环境对请求API造成一些影响。于是不采用云函数,使用操作系统中与智能灯配套的微信小程序demo中的sdk。该sdk是根据官方的node.js的sdk进行修改做出的适配小程序的接口。
(1)获取设备属性:
(2)控制设备属性:
问题得到解决,用户可以通过小程序获取设备信息以及控制设备属性。
6、界面优化以及代码优化。
效果演示
视频时长5min
写在最后
作为物联网行业的初学者,通过对这款智能闹钟的设计与开发,我对基于物联网开发平台的开发流程,操作系统的任务调度都有了清晰的认识。虽然这是我第一次接触并使用物联网操作系统和物联网开发平台,但比赛周期中我在这两个环节花费的时间占比并没有很多,更多的时间是在实现业务逻辑,可见产品的易用性以及对开发效率的提升。TencentOS tiny的说明文档丰富清晰,给了我很大的帮助。而通过IoT Explorer可以快速接入设备,定义数据模板快速实现产品功能。另外比赛提供的开发板也很精美,又可以愉快地发朋友圈了。
很感谢能够参与到比赛中,虽然demo的功能并没有完美,但从硬件终端到应用端,第一次完整设计出自己的小产品还是非常有成就感,挑战很多收获也很多。过程中也会“煎熬”,比如WiFi不稳定设备有时会掉线需要重启,另外在使用小程序云函数控制设备属性之后,平台就无法获取设备影子,当时那几天我深深被串口输出一连串R然后报错的恐惧支配着,欢迎有知晓原因的大佬帮忙指点。