本文适用于和我一样初识物联网业务开发与开发平台的读者朋友, 让我们以我做的智能闹钟为例, 一起来学习下基于腾讯的 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 功能分别如下:(功能详细描述见文末演示视频)
案例框架
智能闹钟 Demo 功能(详细描述见文末演示视频)
腾讯云 IoT 产品介绍
TencentOS Tiny
腾讯面向物联网领域开发的实时操作系统, 小体积, 低功耗, IoT 组件丰富, 移植性好, 调试便捷. 由轻量级 RTOS 内核与多个物联网组件构成. 详细操作系统架构介绍
腾讯云物联网操作系统内测源码目录
IoT Explorer
腾讯云物联网开发平台, 提供便捷的开发工具与服务, 助力更高效的完成设备接入, 并提供应用开发及场景服务能力, 帮助高效, 低成本构建物联网应用. 详细产品介绍
腾讯云 IoT 全栈产品矩阵(图源: 腾讯云 IoT 微信公众号)
腾讯云物联网开发平台产品架构
定制开发板
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 操作. 通过串口的简单打印就可以判断, 新建测试线程如下图:
测试线程打印信息如下:
任务交替地运行, 时间与设计的运行时间基本符合, 这一步验证结束.
二, 终端与物联网开发平台的互通性
(一)验证 Wi-Fi 模块
1, 创建热点, 在代码中修改 Wi-Fi 名称, 密码.
2, 通过串口助手测试 Wi-Fi, 串口提示 Wi-Fi 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 Node.JS;
(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 的功能并没有完美, 但从硬件终端到应用端, 第一次完整设计出自己的小产品还是非常有成就感, 挑战很多收获也很多. 过程中也会 "煎熬", 比如 Wi-Fi 不稳定设备有时会掉线需要重启, 另外在使用小程序云函数控制设备属性之后, 平台就无法获取设备影子, 当时那几天我深深被串口输出一连串 R 然后报错的恐惧支配着, 欢迎有知晓原因的大佬帮忙指点.
来源: https://www.qcloud.com/developer/article/1494880