HaaS506传感器数据上云和继电器控制¶
1. 前言¶
本实验将向大家介绍如何使用Python语言在HaaS 506上实现读取传感信息,上报到阿里云物联网平台,并实现云端下发控制继电器
2. 开发环境¶
- 硬件环境:
HaaS 506开发板 Usb转uart模块,Hy转杜邦线4pin 6pin线材,购买链接:https://item.szlcsc.com/2794903.html
继电器,购买链接:https://item.taobao.com/item.htm?spm=a1z09.2.0.0.17d92e8d3T5rbF&id=596058726555&_u=5msb3vr09cb
空气传感器,购买链接:https://item.szlcsc.com/2794903.html
- 软件环境:
HaaS 506固件,下载链接:https://hli.aliyuncs.com/o/config/haas506/haas506.zip
HaaS 506固件烧录方式,烧录方式链接:https://g.alicdn.com/HaaSAI/PythonDoc/quickstart/quickstart_haas506.html#i
Vs code版本应大于1.57,下载链接o:https://code.visualstudio.com/
HaaS studio Vs code插件,安装方法:https://blog.csdn.net/HaaSTech/article/details/118997742
HaaS 506快速开始,查看链接:https://blog.csdn.net/HaaSTech/article/details/119379840
HaaS 506 Python api手册,查看链接:https://g.alicdn.com/HaaSAI/PythonDoc/library/index.html
- 接线方法
空气传感器连接4pin HY线材对接HaaS506 开发板TTL接口(J8)。 注意事项:空气传感器接收接HaaS506开发板发送(TX),空气传感器发送接HaaS506开发板接收(RX),空气传感器地接HaaS506开发板GND,空气传感器VCC接HaaS506开发板3.3V
将6pin HY线材插入SPI接口(J9)。 注意事项:继电器VCC接 HaaS 506开发板3.3V,继电器Gnd接HaaS506开发板GND,继电器In1接HaaS506开发板MOSI。HaaS506开发板CS接HaaS506开发板GND。
3. 涉及知识点¶
- uart通讯原理
A串口全称叫做串行接口,通常也叫做 COM 接口,串行接口指的是数 据一个一个的顺序传输,通信线路简单。使用两条线即可实现双向通信,一条用于发送,一条用于接收。串口通信距离远,但是速度相对会低,串口是一种很常用的工业接口。
- 空气传感器,TB600B
TB600B 系列 SMELL异味检测模组汇集了诸多来自德国的高精度检测技术,以及德国团队的设计理念,核心传感器采用全球电化学领域体积最小的德国 EC Sense 固态聚合物传感器。可以替代我们的鼻子夫精准嗅出气体浓度,实现精准监测。UART数字式信号输出,省去了客户对传感器应用的了解,以及校准的繁琐工作。应用领域:家居装修材料释放异味检测、养殖场环境恶臭检测、空气新鲜测量评估、办公楼宇及公共空间异味检测、污水恶臭,垃圾恶臭检测、厕所环境异味检测、口腔异味检测、汽车装饰材料异味检测、纺织品异味检测。
- 阿里云物联网平台
阿里云物联网平台为设备提供安全可靠的连接通信能力,向下连接海量设备,支撑设备数据采集上云;向上提供云端API,服务端通过调用云端API将指令下发至设备端,实现远程控制。
4. 代码实现¶

由于本案例中涉及到硬件端口的配置,因此需要修改默认的board.json .修改后的json 文件中内容如下:
{
"version": "1.0.0",
"io": {
"ADC0": {
"type": "ADC",
"port": 0,
"sampling": 12000000
},
"pca9544": {
"type": "I2C",
"port": 1,
"addrWidth": 8,
"freq": 100000,
"mode": "master",
"devAddr": 112
},
"qma8981": {
"type": "I2C",
"port": 1,
"addrWidth": 7,
"freq": 400000,
"mode": "master",
"devAddr": 18
},
"GPIO23": {
"type": "GPIO",
"port": 23,
"dir": "irq",
"pull": "pullup",
"intMode": "rising"
},
"led1": {
"type": "GPIO",
"port": 0,
"dir": "output",
"pull": "pullup"
},
"pump": {
"type": "GPIO",
"port": 16,
"dir": "output",
"pull": "pullup"
},
"cloud_flg": {
"type": "GPIO",
"port": 7,
"dir": "output",
"pull": "pullup"
},
"liq_level": {
"type": "GPIO",
"port": 15,
"dir": "input",
"pull": "pullup"
},
"SPI0": {
"type": "SPI",
"port": 0,
"mode": "master",
"freq": 2000000
},
"serial1":{
"type":"UART",
"port":0,
"dataWidth":8,
"baudRate":9600,
"stopBits":1,
"flowControl":"disable",
"parity":"none"
},
"serial2":{
"type":"UART",
"port":1,
"dataWidth":8,
"baudRate":115200,
"stopBits":1,
"flowControl":"disable",
"parity":"none"
},
"serial3":{
"type":"UART",
"port":2,
"dataWidth":8,
"baudRate":115200,
"stopBits":1,
"flowControl":"disable",
"parity":"none"
}
},
"debugLevel": "DEBUG",
"repl":"disable"
}
5. 阿里云物模型¶
以下是阿里云物模型的json配置文件
{
"schema": "https://iotx-tsl.oss-ap-southeast-1.aliyuncs.com/schema.json",
"profile": {
"version": "1.0",
"productKey": "a1iJzDtH0Hy"
},
"properties": [
{
"identifier": "ver",
"name": "设备版本",
"accessMode": "r",
"required": false,
"dataType": {
"type": "text",
"specs": {
"length": "64"
}
}
},
{
"identifier": "liq_mdcn_re",
"name": "液位",
"accessMode": "r",
"required": false,
"dataType": {
"type": "bool",
"specs": {
"0": "低",
"1": "高"
}
}
},
{
"identifier": "gasval",
"name": "气体值",
"accessMode": "r",
"required": false,
"dataType": {
"type": "int",
"specs": {
"min": "0",
"max": "1000",
"step": "1"
}
}
},
{
"identifier": "gasalarm",
"name": "气体告警状态",
"accessMode": "r",
"required": false,
"dataType": {
"type": "bool",
"specs": {
"0": "无告警",
"1": "告警"
}
}
},
{
"identifier": "powerstate",
"name": "下行控制",
"accessMode": "rw",
"required": false,
"dataType": {
"type": "bool",
"specs": {
"0": "关",
"1": "开"
}
}
},
{
"identifier": "gasstr",
"name": "气体浓度阈值",
"accessMode": "rw",
"required": false,
"dataType": {
"type": "float",
"specs": {
"min": "0.00",
"max": "100.00",
"unit": "mg/L",
"unitName": "毫克每升",
"step": "0.01"
}
}
},
{
"identifier": "t1",
"name": "t1",
"accessMode": "rw",
"required": false,
"dataType": {
"type": "int",
"specs": {
"min": "30",
"max": "600",
"step": "1"
}
}
}
],
"events": [
{
"identifier": "post",
"name": "post",
"type": "info",
"required": true,
"desc": "属性上报",
"method": "thing.event.property.post",
"outputData": [
{
"identifier": "ver",
"name": "设备版本",
"dataType": {
"type": "text",
"specs": {
"length": "64"
}
}
},
{
"identifier": "liq_mdcn_re",
"name": "液位",
"dataType": {
"type": "bool",
"specs": {
"0": "低",
"1": "高"
}
}
},
{
"identifier": "gasval",
"name": "气体值",
"dataType": {
"type": "int",
"specs": {
"min": "0",
"max": "1000",
"step": "1"
}
}
},
{
"identifier": "gasalarm",
"name": "气体告警状态",
"dataType": {
"type": "bool",
"specs": {
"0": "无告警",
"1": "告警"
}
}
},
{
"identifier": "powerstate",
"name": "下行控制",
"dataType": {
"type": "bool",
"specs": {
"0": "关",
"1": "开"
}
}
},
{
"identifier": "gasstr",
"name": "气体浓度阈值",
"dataType": {
"type": "float",
"specs": {
"min": "0.00",
"max": "100.00",
"unit": "mg/L",
"unitName": "毫克每升",
"step": "0.01"
}
}
},
{
"identifier": "t1",
"name": "t1",
"dataType": {
"type": "int",
"specs": {
"min": "30",
"max": "600",
"step": "1"
}
}
}
]
}
],
"services": [
{
"identifier": "set",
"name": "set",
"required": true,
"callType": "async",
"desc": "属性设置",
"method": "thing.service.property.set",
"inputData": [
{
"identifier": "powerstate",
"name": "下行控制",
"dataType": {
"type": "bool",
"specs": {
"0": "关",
"1": "开"
}
}
},
{
"identifier": "gasstr",
"name": "气体浓度阈值",
"dataType": {
"type": "float",
"specs": {
"min": "0.00",
"max": "100.00",
"unit": "mg/L",
"unitName": "毫克每升",
"step": "0.01"
}
}
},
{
"identifier": "t1",
"name": "t1",
"dataType": {
"type": "int",
"specs": {
"min": "30",
"max": "600",
"step": "1"
}
}
}
],
"outputData": []
},
{
"identifier": "get",
"name": "get",
"required": true,
"callType": "async",
"desc": "属性获取",
"method": "thing.service.property.get",
"inputData": [
"ver",
"liq_mdcn_re",
"gasval",
"gasalarm",
"powerstate",
"gasstr",
"t1"
],
"outputData": [
{
"identifier": "ver",
"name": "设备版本",
"dataType": {
"type": "text",
"specs": {
"length": "64"
}
}
},
{
"identifier": "liq_mdcn_re",
"name": "液位",
"dataType": {
"type": "bool",
"specs": {
"0": "低",
"1": "高"
}
}
},
{
"identifier": "gasval",
"name": "气体值",
"dataType": {
"type": "int",
"specs": {
"min": "0",
"max": "1000",
"step": "1"
}
}
},
{
"identifier": "gasalarm",
"name": "气体告警状态",
"dataType": {
"type": "bool",
"specs": {
"0": "无告警",
"1": "告警"
}
}
},
{
"identifier": "powerstate",
"name": "下行控制",
"dataType": {
"type": "bool",
"specs": {
"0": "关",
"1": "开"
}
}
},
{
"identifier": "gasstr",
"name": "气体浓度阈值",
"dataType": {
"type": "float",
"specs": {
"min": "0.00",
"max": "100.00",
"unit": "mg/L",
"unitName": "毫克每升",
"step": "0.01"
}
}
},
{
"identifier": "t1",
"name": "t1",
"dataType": {
"type": "int",
"specs": {
"min": "30",
"max": "600",
"step": "1"
}
}
}
]
}
]
}
6. 测试验证¶
6.1 阿里云物联网产品创建¶
6.2 创建IOT Studio移动端应用¶
- 6.2.1 创建阿里云物联网产品
在公共实例中,根据项目需求创建产品:
![]()
注意: 1. 在选择联网方式时,请选择蜂窝(2G / 3G / 4G / 5G)。
创建设备时建议使用模块镭雕上的15-17位IMEI号作为设备DeviceName,后期产品可以使用模块唯一识别号IMEI进行动态注册。
![]()
导入物模型数据
![]()
![]()
导入完成后如下所示:
![]()
![]()
添加设备
![]()
![]()
选择刚创建好的设备,点击查看设备物模型(此处为案例演示设备,显示的为测试数据,需自行上报数据)
![]()
- 6.2.2 创建移动端应用
A. 打开Iot Studio开发界面 产品和设备创建完成后,在控制台选择增值服务,进入Iot Studio开发界面。
![]()
B. 新建移动端应用 如下图所示,新建一个移动端的应用(此处的项目为事先创建好的,如有所需 也可以新建项目)。新建移动端应用。
![]()
C. 创建移动端应用 点击确定以后会自动进入创建好的移动端应用中,选择创建空白页面。
![]()
完成创建后进入正式页面编辑界面。
![]()
D. 选择组件 在组件中选择想要的基础组件,将拖拽至页面中,进行相应的布局设置。(本案例中只用到折线图和开关控制组件)
![]()
E. 组件配置 选择好对应的组件后,还需要对其进行数据源的配置。
点击组件,在右侧样式中选择配置数据源
![]()
数据源配置选择
![]()
选择关联产品,关联刚刚创建的产品HaaS506
![]()
选择关联设备
![]()
![]()
5. 控制开关组件数据源配置 返回移动端开发界面,刷新列表即可进入选择界面。
![]()
设置完成后,可以看到右侧样式栏显示开关数据已配置数据源,即为配置完成。 6. 折线图组件数据源配置 折线图组件需要创建一个SQL分析的API接口。
Iot Studio控制台中选择数据任务,新建一个SQL分析,如下图所示:
![]()
![]()
进入数据分析界面,配置数据源。
![]()
如下图所示,选择设备名称和气体值,并点击生成SQL查询语句:
![]()
SQL语句生成后,点击运行即可查询所选数据内容,分别点击配置、 测试以及发布。如下图所示:
![]()
点击配置后,设置对应的参数类型:
点击测试,测试数据是否正常,显示测试成功,即可点击发布。
![]()
发布后就可以返回移动端应用开发界面。
![]()
返回开发界面后点击折线图,在右侧样式中将刚发布的API接口作为折线图的数据源,如下图所示:
![]()
进入折线图配置界面,将所需维度拖拽至横纵轴,完成配置。
![]()
配置完成后,如下图所示,可以保存、预览以及发布
![]()
点击预览后会生成一个预览二维码,手机扫描二维码进行预览控制操作。
![]()
6.3 开发验证¶
- 准备硬件:
请参考上述准备 硬件环境。
HaaS506 连接usb typeC 到pc,此时在pc端会生成8组usb serail port
其中port5即Unisoc Usb Serial Port 5对应的COM口为板子日志输出以及python命令行交互口
HaaS506 使用HY转杜邦线4pin线材连接uart1 即板子丝印J8 TTL接口,杜邦线连接usb转uart模块,请参考上述接线方式。
- 软件准备:
HaaS506最新固件,一般拿到开发板,厂家烧录最新的固件,无需重新烧录。下载地址以及烧录方式: HaaS 506
VScode(大于1.57),HaaS studio VScode插件。
代码实现保存为main.py,board.json(HaaS506硬件驱动配置文件)
新建python轻应用工程`HaaS506IDE开发 <https://blog.csdn.net/HaaSTech/article/details/119379840>`_
将示例文件main.py以及硬件驱动配置文件board.json,一起放置到创建haas轻应用时的工作区路径下solution/test_demo(test_demo为项目名字)下,按照步骤4文档进行烧录验证。
扫描iot studio 预览二维码进行预览以及控制操作。