来这里发现更多创意案例
HaaS开发框架HaaS积木方案,赋能生态开发者,让您快速找到自己需要的解决方案,硬件主板与外设,以及各种应用组件。https://haas.iot.aliyun.com/solution/
下图是本案例除硬件连线外的3步导学,每个步骤中实现的功能请参考图中的说明。
1、简介
1.1、背景
?? 紫外线是阳光光线中的一部分。适当紫外线强度的照射有助于人体合成维生素D,然而,过量的紫外线暴晒,会对人体造成损害,诱发皮肤疾病。
?? 本案例的紫外线检测系统可以实时检测紫外线光强度, 并在紫外线强度过高时提醒作出相应的防护。
?? 紫外线的强度等级分为0-15级别,通常,夜间的紫外线指数为0,热带、高原地区、晴天时的紫外线指数为15。按照对人体的影响,在紫外线强度等级的基础上,有以下划分:
- 紫外线强度为0、1、2时,表示紫外线量最小,这个量对人体基本上没有影响
- 紫外线强度为3或4时,表示紫外线量是比较低的,对人体的影响也是比较小的
- 紫外线强度为5和6时,表示紫外线量是中等强度,对人体皮肤也有中等强度的伤害影响
- 紫外线强度为7、8、9时,表示有较强的紫外线照射强度,这时,对人体的影响就比较大,需要采取相应的防护措施
- 紫外线强度大于10时,表示紫外线照射量非常强,对人体有最大的影响,必须采取防护措施
?? 本案例通过紫外线传感器测量环境紫外线强度,并根据不同的紫外线强度点亮不同颜色的LED灯或者打开蜂鸣器:
- 紫外线强度低于或等于4点亮绿灯
- 紫外线强度在5和6之间点亮蓝灯
- 紫外线强度在7和9之间点亮红灯
- 紫外线强度大于9开蜂鸣器
1.2、准备
?? 本案例需要如下硬件:
- ESP32开发板一台
- 紫外线传感器一个
- RGB三色LED灯一个
- 杜邦线若干
- Micro-USB数据线一条
- 蜂鸣器一个
?? 硬件连线图如下图所示:
?
2、物联网平台开发
?? 对于第一次使用物联网平台的读者,需要开通实例以使用物联网平台的功能。这里可以使用免费的公共实例进行开发。
?? 在物联网平台中,左上角选择“华东2-上海”,点击“公共实例”,即可开通。
?
开通物联网平台功能之后,需要完成下面的4个步骤完成云端设备的设定:
- 创建云端产品
- 创建产品属性(物模型)
- 创建云端设备(获取三元组)
- 多设备场景联动设定
2.1、创建云端产品
?? 点击上图中的“公共实例”,即可进入控制台进行产品创建。然后,点击创建产品按钮,如下图所示。
?
?? 在新建产品设定页面按照下图所示,设定“产品名称”,选择自定义品类,节点类型选择“直连设备”,联网方式选择“Wi-Fi”,数据格式选择“ICA标准数据格式”,检验类型和认证方式选择默认设定即可。还可以根据开发者自己的需求在“产品描述”页面添加针对此产品的描述。
?
选择之后,点击“确认”按钮,即可完成产品创建。返回“产品”页面之后可以看到产品类表中会出现刚刚创建的“紫外线检测系统”的产品,如下图所示。
?
2.2、创建产品属性(物模型)
?? 点击上图中的“查看”按钮,即可看到产品信息,Topic列表,功能定义,数据解析等跟产品相关功能的设定。点开“功能定义”标签页,可以看到设备物模型定义。
?? 标识符是设备端上报设备属性状态的消息中需要使用的标识符,并且只有在设备上报的属性内容符合“数据定义”中的数据取值范围的时候才会被物联网平台记录,否则会被物联网平台认定为非法属性而过滤掉。
??? 本节我们选择直接新建方式来创建此产品需要的物模型信息,点击上图中的”编辑草稿“按钮。然后如下图再点击“添加自定义功能”。
?
?? 如下图添加一个“红色LED”的功能。其中标识符为redledSwith, 0表示LED灯关闭,1表示LED灯开启。
?
用同样的方式分别添加“蓝色LED”、“绿色LED”、“蜂鸣器” 和 “紫外线强度”功能,标识符分别为 blueSwitch, greeSwitch,buzzer 和 uvlevel
蓝色LED:
?
绿色LED:
?
蜂鸣器:
?
紫外线强度:
?添加完属性之后,点击左下角的“发布上线”按钮 ,根据系统提示进行确认即可,如下图所示:
?
?产品及其物模型创建完成后就可以创建这个产品的设备了。 ?
2.3、创建云端设备(获取三元组)
?? 在产品列表页面中,点击“管理设备”,就会进到设备管理页面。
?
?? 在“设备”页面点击“添加设备”按钮,如下图所示。
?
?? 在“添加设备”页面中设定“deviceName”,这里开发者可以自己填入自己想设定的设备名称,也可以不填任何内容让系统自动生成设备名称,如下图所示。
?
?? 设备添加完成后,点击“前往查看”按钮,就可以看到此设备端详细信息了。
?? 设备信息中有两个信息需要和设备端开发相匹配:
- 三元组
- 物模型属性信息
?
获取设备三元组
?? 如上图所示,点击“查看”按钮,就可以看到设备的三元组信息,三元组是物联网设备端和物联网云端设备相关联的唯一标识符,在设备端连接云端的时候会使用三元组信息和云端进行鉴权,鉴权通过之后云端会认为设备已激活并上线。
查看设备属性信息
?? 设备详情信息页中的“物模型数据”标签页中可以看到设备的所有属性信息、设备时间上报情况及设备服务调用情况,如下图所示。待物联网设备按照设备属性对应的标识符上报设备属性的时候,本图片中的“紫外线强度“,”蜂鸣器“等属性值就会显示设备最新的属性信息。
创建产品和设备的过程是按照面向对象的思想进行设计的,其中创建产品可以看成是新建一个类,其中的物模型则是类的对象,创建设备则是进行类的实例化。
?
3、设备端开发
3.1、开发环境
?? 在进行下一步之前请确保ESP32开发环境已经搭建完毕。详情请参考esp32开发环境的说明。
3.2、创建解决方案
?? 如下图所示,在Haas Studio中创建项目。先选择左侧的“开发板型号”再从右侧的案例中选择“紫外线检测系统”案例点击“立即创建”即可。
?然后对main.py里边的内容后需要完成以下三处代码修改。
Python脚本的详细说明请参考脚本内嵌的文字版注释
修改路由器名称及密码 ?? 修改main.py中wifiSsid和wifiPassword的值为读者实际要连接的路由器的名称及密码(请注意名称和密码都需要放在""符号中间)。
# Wi-Fi SSID和Password设置
wifiSsid = "请填写您的路由器名称"
wifiPassword = "请填写您的路由器密码"
?? 修改完成之后get_wifi_status函数中的wlan.connect(wifiSsid, wifiPassword)语句就会连接读者自己设定的路由器。
修改设备端三元组
?? 修改main.py中productKey、deviceName和deviceSecret的值为读者创建的物联网设备的三元组信息,如下图所示:
# 三元组信息
productKey = "产品密钥"
deviceName = "设备名称"
deviceSecret = "设备密钥"
- 修改设备端上报温湿度信息所用标识符
?? main.py中下面的代码实现的是上传紫外线强度值到云端的功能。其中uvlevel便是紫外线强度上报时所用的标识符。
# 上传紫外线等级信息到物联网平台
def upload_uvlevel():
global device
while True:
data = get_uvlevel() # 读取紫外线等级
# 生成上报到物联网平台的属性值字串
prop = ujson.dumps({
'uvlevel': data
})
print('uploading data: ', prop)
upload_data = {'params': prop}
# 上传紫外线等级值到物联网平台
device.postProps(upload_data)
utime.sleep(2)
?? 确保这个标识符和物联网产品的物模型中属性标识符是一样的,如下图所示:
?
?? 下面是本案例重点代码段落讲解:
# LED灯和蜂鸣器状态
redledon = 0
greenledon = 0
blueledon = 0
buzzeron = 0
# 设置props 事件接收函数(当云平台向设备下发属性时)
def on_props(request):
global redledon, greenledon, blueledon, buzzeron, redleddev, blueleddev, greenleddev, buzzerdev
payload = ujson.loads(request['params'])
if "redledSwith" in payload.keys():
redledon = payload["redledSwith"]
if (redledon):
print("点亮红色LED")
if "blueledSwitch" in payload.keys():
blueledon = payload["blueledSwitch"]
if (blueledon):
print("点亮蓝色LED")
if "greenledSwitch" in payload.keys():
greenledon = payload["greenledSwitch"]
if (greenledon):
print("点亮绿色LED")
if "buzzer" in payload.keys():
buzzeron = payload["buzzer"]
if (buzzeron):
print("打开蜂鸣器")
redleddev.write(redledon) # 控制红灯开关
blueleddev.write(blueledon) # 控制蓝灯开关
greenleddev.write(greenledon) # 控制绿灯开关
buzzerdev.write(buzzeron) # 控制蜂鸣器
# 要将更改后的状态同步上报到云平台
prop = ujson.dumps({
'redledSwith': redledon,
'blueledSwitch': blueledon,
'greenledSwitch': greenledon,
'buzzer': buzzeron,
})
upload_data = {'params': prop}
# 上报LED和蜂鸣器属性到云端
device.postProps(upload_data)
4、运行结果
4.1、设备端
?? 推送此脚本到ESP32之后,运行此脚本,ESP32串口会周期性的打印如下日志,其中:
- “物联网平台连接成功”代表成功连接到物联网平台。
- “uploading data: {"uvlevel": 0}” 代表在向云平台上传紫外线强度等级(uvlevel),等级值为0。
==== python file check /data/pyamp/main.py ====
==== python execute from /data/pyamp/main.py ====
uv inited!
LED inited!
buzzer inited!
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
('192.168.43.45', '255.255.255.0', '192.168.43.1', '192.168.43.1')
establish tcp connection with server(host='gv4cPr38bfE.iot-as-mqtt.cn-shanghai.aliyuncs.com', port=[443])
sleep for 1 s
sleep for 1 s
tcp_connect: can only connect from state CLOSED
success to establish tcp, fd=54
物联网平台连接成功
sleep for 2s
uploading data: {"uvlevel": 0}
uploading data: {"uvlevel": 0}
uploading data: {"uvlevel": 0}
uploading data: {"uvlevel": 0}
uploading data: {"uvlevel": 0}
uploading data: {"uvlevel": 0}
uploading data: {"uvlevel": 0}
uploading data: {"uvlevel": 0}
4.2、物联网平台端设备信息查看
?? 物联网设备的系统启动成功并连接到物联网平台之后,物联网平台上对应的设备状态会从“未激活”状态变为“上线”,在物模型数据标签页上会显示设备上报到物联网平台的属性值。
?? 此时如果开发板紫外线强度发生变化,物联网平台的物模型数据会更新为设备上报的最新的属性值。
?
4.3、物联网平台控制LED灯和蜂鸣器
?? 物联网设备上线之后,可以通过”监控运维“中的"在线调试"功能进行调试,详细操作步骤见下图:
?? 此产品的物模型属性中,"紫外线强度"设置的是只读,也就是说智能从设备端读取,不支持设置此状态到设备端,所以点开"紫外线强度"后面的”调试“之后,里边只有获取的选项。三个LED和蜂鸣器设置的是可读可写,所以点开”红色LED“后面的”调试“之后,里边有”获取“、”设置”和“设置期望值”三个选项。 这里可以选择打开"绿色lED"之后点击“设置”进行绿色LED功能的调试。
?
?此时查看设备端绿色LED是否已经打开,打开成功则代表控制成功。
5、紫外线强度监控系统物联网应用开发
?? 下图是一个典型的物联网应用程序开发的流程图,接下来本节就按照这个流程介绍如何完成紫外线监控系统web端应用程序的开发。
这部分的细节就不详细介绍了,开发者朋友们,自动来动手试试吧。?
|