前言
偶然的机会接触到阿里云的HaaS Python物联网开发框架,几天的使用下来发现使用起来开发速度非常快,数据采集,上云,应用开发一气呵成。即使对硬件不熟悉的程序员也可以快速地完成物联网全流程的开发,通过复现我之前做的小项目 基于MQTT应用层协议的物联网家庭温湿度监测系统 并记录全过程,作为学习HaaS的学习笔记。
本系列文章主要实现三个任务
- 采用HaaS Python 框架实现硬件设备端温湿度检测及数据上云
- 采用阿里云IOT studio开发移动端应用程序,实现用手机可以查看硬件设备端数据
- 将移动端应用程序迁移至手机小程序,实现小程序查看数据
对比采用HaaS和不采用HaaS开发的区别
HaaS
- 阿里云官方提供硬件固件,猜测固件封装了操作系统,文件系统以及python解释器。开发者编写python脚本上传至硬件即可运行代码,不用编译
- 固件自带网络,设备驱动和MQTT等网络协议,不用自己移植,后期方便加入AI应用,真正实现端云一体开发
- 云端和自己开发的无差别都采用阿里云物联网平台。但HaaS采用阿里云推出的IOT studio来完成Web应用或小程序应用的开发,无需自己再搭建服务器,打通了整个物联网数据的全生命周期管理。
- IOT studio类似于之前我使用的nodered,应用界面和数据逻辑都可以通过图形化拖拽的方式建立,加快了应用速度
HaaS整体框图如下
不采用HaaS开发
- 硬件设备端采用C语言,需要自己移植MQTT等协议和底层驱动,开发周期较长,而且需要开发者对硬件有一定了解
- 需要自己搭建应用服务器,这里我采用了阿里云服务器ECS,运行nodered实现web应用。搭建服务器过程繁琐,且不能和阿里云物联网一些AI和云计算等服务做整合,比较简单粗暴
下面是自己之前不采用HaaS开发的整体框图
相关链接
HaaS EDU,对HaaS有较全面的资料文档,方便小白入门
https://gitee.com/haasedu/haasedu
HaaS 主页
https://haas.iot.aliyun.com/haasv2
硬件准备
- nodemcu esp32s 开发板一个
- SHT3X-DIS温湿度传感器一个
- RGB三色LED灯一个
- 杜邦线若干
- Micro-USB数据线一条
硬件连接如下图
实物图如下
软件准备
本文基于HaaS EDU中的示例项目 花卉养殖系统 在进行进一步开发之前,首先要根据官网教程配置好如下软件环境
正文
在读取硬件设备端的数据之前,需要配置云端的数据模型,以便和硬件设备端的数据对应,这样云端接收到硬件设备端的数据就知道这些数据对应着什么样的信息。
云端数据配置
云端数据配置分为以下三步
1.创建云端产品
2.创建产品属性(物模型)
3.创建云端设备(获取三元组)
云端的数据结构可以用面向对象的思想来类比
- 云端产品就是一个类
- 产品属性(物模型)是类的属性,一个类的所有对象都有这些属性
- 云端设备等同于类的对象,是类的一个具体实现
比如人是一个类,属于云端产品;人的年龄身高是类的属性,属于物模型;你,是一个具体的人,是人类的具体对象,属于云端设备。
创建云端产品
进入阿里云物联网控制台,并开通公共实例
https://iot.console.aliyun.com/
点击创建产品
输入产品名称,选择自定义品类,WIFI直连设备,其他保持默认
创建产品属性(物模型)
点击定义物模型
点击编辑草稿
添加自定义功能
这里添加两个功能,温度和湿度,配置如下
添加完成后点击发布上线,然后在产品界面点击发布才能使当前物模型更改生效,每次更改物模型后都要这么操作
创建云端设备(获取三元组)
首先点击添加设备
基于 温湿度检测设备 这个产品添加一个设备
设备生成成功后可以查看设备的三元组,云端设备也就对应着一个实际的物理设备。设备三元组可以唯一确定一个物理设备,三元组要留好,待会要用
硬件设备端开发
打开安装好 haas插件的 vscode,在快速开始界面选择创建项目
创建好项目后,找到HaaS官方花卉养殖系统的 代码仓库,将其中的代码复制到自己的项目中去
最终如下图所示
在main.py中将设备三元组信息改成刚刚创建的云端设备的三元组信息,并修改wifi名称和密码
点击部署运行,通过串口可以看到已经可以读取到温湿度信息
在阿里云控制台,也可以看到温湿度数据如下
进阶实验
前面实现了温湿度数据检测及上云,实现了硬件设备向云端发送数据,下面要实现云端向硬件设备发送数据,实现云端对硬件设备的控制。
下面要把RGB三色灯用起来,通过云端控制三色灯的亮灭。
云端物模型更改
首先在产品界面-功能定义-点击编辑草稿,编辑物模型
添加三个物模型属性,对应RGB三个颜色的灯
下面是红灯的物模型属性定义
三色灯属性定义完成后图所示,点击发布上线,完成物模型的更改
硬件设备端代码更改
将board.json中代码用下面的代码覆盖,增加了RGB灯的GPIO设置
<