这个夏天太热了,只能用他来保命,ESP32 + Python做一个检测紫外线设备

简介: 这个夏天太热了,只能用他来保命,ESP32 + Python做一个检测紫外线设备

来这里发现更多创意案例

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)


 

确保这个标识符和物联网产品的物模型中属性标识符是一样的,如下图所示:





 

下面是本案例重点代码段落讲解:


定义4个变量用来控制LED和蜂鸣器对应的GPIO

# LED灯和蜂鸣器状态

redledon = 0

greenledon = 0

blueledon = 0

buzzeron = 0

定义函数处理云端信息并控制GPIO的接口

# 设置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端应用程序的开发。




这部分的细节就不详细介绍了,开发者朋友们,自动来动手试试吧

————————————————

版权声明:本文为CSDN博主「HaaS技术社区」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/HaaSTech/article/details/126542229

相关实践学习
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
2月前
|
传感器 运维 前端开发
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
本文解析异常(anomaly)与新颖性(novelty)检测的本质差异,结合distfit库演示基于概率密度拟合的单变量无监督异常检测方法,涵盖全局、上下文与集体离群值识别,助力构建高可解释性模型。
329 10
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
|
9月前
|
运维 监控 算法
时间序列异常检测:MSET-SPRT组合方法的原理和Python代码实现
MSET-SPRT是一种结合多元状态估计技术(MSET)与序贯概率比检验(SPRT)的混合框架,专为高维度、强关联数据流的异常检测设计。MSET通过历史数据建模估计系统预期状态,SPRT基于统计推断判定偏差显著性,二者协同实现精准高效的异常识别。本文以Python为例,展示其在模拟数据中的应用,证明其在工业监控、设备健康管理及网络安全等领域的可靠性与有效性。
1034 13
时间序列异常检测:MSET-SPRT组合方法的原理和Python代码实现
|
5月前
|
监控 编译器 Python
如何利用Python杀进程并保持驻留后台检测
本教程介绍如何使用Python编写进程监控与杀进程脚本,结合psutil库实现后台驻留、定时检测并强制终止指定进程。内容涵盖基础杀进程、多进程处理、自动退出机制、管理员权限启动及图形界面设计,并提供将脚本打包为exe的方法,适用于需持续清理顽固进程的场景。
|
安全 网络安全 文件存储
思科设备巡检命令Python脚本大集合
【10月更文挑战第18天】
541 1
思科设备巡检命令Python脚本大集合
|
7月前
|
传感器 物联网 Linux
Python:蓝牙心率广播设备监测(BLE 心率监测器)技术解析与实现
本文探讨了如何使用 Python 脚本与支持蓝牙低功耗(BLE)心率广播的设备交互以获取实时心率数据。重点分析了 BLE 协议、GATT 服务模型,以及具体方法。此外,还讨论了华为手表等设备的兼容性问题。
1405 19
|
11月前
|
物联网 Python
请问:如何使用python对物联网平台上设备的属性进行更改?
为验证项目可行性,本实验利用阿里云物联网平台创建设备并定义电流、电压两个整型属性。通过Python与平台交互,实现对设备属性的控制,确保后续项目的顺利进行。此过程涵盖设备连接、数据传输及属性调控等功能。
|
机器学习/深度学习 TensorFlow 算法框架/工具
使用Python实现深度学习模型:智能质量检测与控制
使用Python实现深度学习模型:智能质量检测与控制 【10月更文挑战第8天】
857 62
使用Python实现深度学习模型:智能质量检测与控制
|
11月前
|
监控 网络安全 开发者
Python中的Paramiko与FTP文件夹及文件检测技巧
通过使用 Paramiko 和 FTP 库,开发者可以方便地检测远程服务器上的文件和文件夹是否存在。Paramiko 提供了通过 SSH 协议进行远程文件管理的能力,而 `ftplib` 则提供了通过 FTP 协议进行文件传输和管理的功能。通过理解和应用这些工具,您可以更加高效地管理和监控远程服务器上的文件系统。
394 20
|
10月前
|
监控 Java 计算机视觉
Python图像处理中的内存泄漏问题:原因、检测与解决方案
在Python图像处理中,内存泄漏是常见问题,尤其在处理大图像时。本文探讨了内存泄漏的原因(如大图像数据、循环引用、外部库使用等),并介绍了检测工具(如memory_profiler、objgraph、tracemalloc)和解决方法(如显式释放资源、避免循环引用、选择良好内存管理的库)。通过具体代码示例,帮助开发者有效应对内存泄漏挑战。
497 1
|
11月前
|
安全 Linux 网络安全
利用Python脚本自动备份网络设备配置
通过本文的介绍,我们了解了如何利用Python脚本自动备份网络设备配置。该脚本使用 `paramiko`库通过SSH连接到设备,获取并保存配置文件。通过定时任务调度,可以实现定期自动备份,确保网络设备配置的安全和可用。希望这些内容能够帮助你在实际工作中实现网络设备的自动化备份。
510 14

热门文章

最新文章

推荐镜像

更多