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

2023-05-16

来这里发现更多创意案例

HaaS开发框架HaaS积木方案,赋能生态开发者,让您快速找到自己需要的解决方案,硬件主板与外设,以及各种应用组件。https://haas.iot.aliyun.com/solution/

下图是本案例除硬件连线外的3步导学,每个步骤中实现的功能请参考图中的说明。

1、简介

1.1、背景

  
紫外线是阳光光线中的一部分。适当紫外线强度的照射有助于人体合成维生素D,然而,过量的紫外线暴晒,会对人体造成损害,诱发皮肤疾病。

  
本案例的紫外线检测系统可以实时检测紫外线光强度, 并在紫外线强度过高时提醒作出相应的防护。

  
紫外线的强度等级分为0-15级别,通常,夜间的紫外线指数为0,热带、高原地区、晴天时的紫外线指数为15。按照对人体的影响,在紫外线强度等级的基础上,有以下划分:

  1. 紫外线强度为0、1、2时,表示紫外线量最小,这个量对人体基本上没有影响
  2. 紫外线强度为3或4时,表示紫外线量是比较低的,对人体的影响也是比较小的
  3. 紫外线强度为5和6时,表示紫外线量是中等强度,对人体皮肤也有中等强度的伤害影响
  4. 紫外线强度为7、8、9时,表示有较强的紫外线照射强度,这时,对人体的影响就比较大,需要采取相应的防护措施
  5. 紫外线强度大于10时,表示紫外线照射量非常强,对人体有最大的影响,必须采取防护措施

  
本案例通过紫外线传感器测量环境紫外线强度,并根据不同的紫外线强度点亮不同颜色的LED灯或者打开蜂鸣器:

  • 紫外线强度低于或等于4点亮绿灯
  • 紫外线强度在5和6之间点亮蓝灯
  • 紫外线强度在7和9之间点亮红灯
  • 紫外线强度大于9开蜂鸣器

1.2、准备

  
本案例需要如下硬件:

  • ESP32开发板一台
  • 紫外线传感器一个
  • RGB三色LED灯一个
  • 杜邦线若干
  • Micro-USB数据线一条
  • 蜂鸣器一个

  
硬件连线图如下图所示:

 

2、物联网平台开发

  
对于第一次使用物联网平台的读者,需要开通实例以使用物联网平台的功能。这里可以使用免费的公共实例进行开发。

  
在物联网平台中,左上角选择“华东2-上海”,点击“公共实例”,即可开通。

 

开通物联网平台功能之后,需要完成下面的4个步骤完成云端设备的设定:

  1. 创建云端产品
  2. 创建产品属性(物模型)
  3. 创建云端设备(获取三元组)
  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”,这里开发者可以自己填入自己想设定的设备名称,也可以不填任何内容让系统自动生成设备名称,如下图所示。

 

  
设备添加完成后,点击“前往查看”按钮,就可以看到此设备端详细信息了。

  
设备信息中有两个信息需要和设备端开发相匹配:

  1. 三元组
  2. 物模型属性信息

 

获取设备三元组

  
如上图所示,点击“查看”按钮,就可以看到设备的三元组信息,三元组是物联网设备端和物联网云端设备相关联的唯一标识符,在设备端连接云端的时候会使用三元组信息和云端进行鉴权,鉴权通过之后云端会认为设备已激活并上线。

查看设备属性信息

  
设备详情信息页中的“物模型数据”标签页中可以看到设备的所有属性信息、设备时间上报情况及设备服务调用情况,如下图所示。待物联网设备按照设备属性对应的标识符上报设备属性的时候,本图片中的“紫外线强度“,”蜂鸣器“等属性值就会显示设备最新的属性信息。

创建产品和设备的过程是按照面向对象的思想进行设计的,其中创建产品可以看成是新建一个类,其中的物模型则是类的对象,创建设备则是进行类的实例化。

 

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 = "设备密钥"
  1. 修改设备端上报温湿度信息所用标识符

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 物联网碎片化的一些思考

    不看这几篇好文 xff0c 就别说自己了解物联网 提到物联网遇到的挑战 xff0c 都会谈到物联网碎片化 造成物联网碎片化的原因主要包括以下两个 xff1a 从 物 的大小角度 xff1a 有的 物 很大 xff0c 如一些边缘网关智能设备
  • 开源硬件的前世今生

    不看这几篇好文 xff0c 就别说自己了解物联网 1 序言 在互联网爆发式增长了几十年的今天 xff0c 越来越多的末端硬件设备已经具备连接网络的能力 xff0c 业态也越来越丰富 xff0c 这就是今天所说的物联网 作为一个08年就开始玩
  • 为什么物联网领域使用Rust的项目越来越多?

    不看这几篇好文 xff0c 就别说自己了解物联网 1 概述 Rust是由 Mozilla 员工Graydon Hoare于2006年作为个人项目而创造 xff0c Mozilla于2009年开始赞助该项目 2012年 xff0c 第一个Ru
  • 华为、阿里、小米都在用的全屋智能技术

    不看这几篇好文 xff0c 就别说自己了解物联网 引言 随着物联网技术以及5G技术的高速发展 xff0c 家电 安防 家居等相关领域大厂相继入局 xff0c 曾经不敢想象的联动场景开始走进我们的生活 xff0c 10年前 xff0c 你或许
  • JAVA 正则表达式 (超详细)

    新网站上线 欢迎大家 网站交易中心 在这里你可以购买或者出售你的网站 网站信息发布中心 在这里有各种交易信息的发布 同时提供 一些软件的免费使用 xff08 附有源码 xff09 网站博客系统 这里你可以注册自己的博客 一个账户无限量博客
  • 下一个智能硬件爆品是什么?

    不看这几篇好文 xff0c 就别说自己了解物联网 1 智能硬件迅猛发展 谈到智能硬件 xff0c 业界较认可的定义是 xff1a 智能硬件是继智能手机之后的一个科技概念 xff0c 通过软硬件结合的方式 xff0c 对传统设备进行改造 xf
  • 物联网教育现状和前景

    不看这几篇好文 xff0c 就别说自己了解物联网 1 物联网行业现状 1 1 高速发展的物联网行业 物联网 xff08 The Internet of Things xff0c 简称IoT xff09 是指通过各种传感器技术 射频识别技术
  • 一文看懂蓝牙在物联网中的应用场景

    不看这几篇好文 xff0c 就别说自己了解物联网 简介 蓝牙作为一项发明于上世纪的近距离无线通信技术 xff0c 在手机 xff0c 电脑领域已经有了充分地基础 xff0c 那么这项技术在物联网领域又会有哪些应用场景呢 xff1f 蓝牙技术
  • 物联网设备连接的下一个引爆点:4G Cat.1

    不看这几篇好文 xff0c 就别说自己了解物联网 一 背景 物联网从概念兴起至今已经过了好几些年了 何为物联网 xff0c 首先要定义何为 物 xff08 Things xff09 xff0c 笔者理解所有具备连接能力的设备都可以是物 xf
  • 物联网云端一体人工智能方案的探索

    不看这几篇好文 xff0c 就别说自己了解物联网 1 高速发展的人工智能 说到人工智能 xff0c 大家并不陌生 xff0c 无论是围棋大战中战胜顶尖段位人类围棋手的Alpha Go xff0c 还是弹跳自如的波士顿机器狗 而无数的科幻电影
  • 带你走进多媒体世界:视频文件是怎么播放出来的

    不看这几篇好文 xff0c 就别说自己了解物联网 1 前言 多媒体是什么 xff1f 维基百科的解释是 xff1a 多媒体 xff08 Multimedia xff09 xff0c 在电脑应用系统中 xff0c 组合两种或两种以上媒体的一种
  • 从语音交互历史浅看它是否会是物联网行业的一个爆点?

    不看这几篇好文 xff0c 就别说自己了解物联网 背景 近几年得益于人工智能在语音领域的突破 xff0c 语音AI已经趋于成熟 xff0c 尤其在智能音箱领域 xff0c 智能音箱又带来了IoT应用到智能家居 本文主要讨论从语音交互历史看它
  • 物联网之IP Camera解决方案简介

    不看这几篇好文 xff0c 就别说自己了解物联网 前言 IP Camera 即网络摄像头 xff0c 是物联网领域中的一个重要场景 本文将带领读者了解IP Camera这一典型物联网场景的市场 IP Camera的重要组成部分 以及以Haa
  • 如何快速搭建一个像“天猫精灵”的智能语音助手?

    不看这几篇好文 xff0c 就别说自己了解物联网 天猫精灵相信大家都不陌生了 xff0c 它是阿里巴巴于2017年7月5日发布的AI智能终端品牌 让用户以自然语言对话的交互方式 xff0c 实现影音娱乐 购物 信息查询 生活服务等功能操作
  • 如何基于芯片SDK开发安防监控产品

    1 前言 近些年来 xff0c 安防监控市场需求广泛 安防监控已经成众多细分行业 xff0c 如金融 教育 医疗 交通等 xff0c 安全的必需品 消费类市场中 xff0c 随着人们对人身及财产安全意识的不断提升 xff0c 中小企业 商铺
  • Spark Streaming 与 Kafka 集成分析

    前言 Spark Streaming 诞生于2013年 xff0c 成为Spark平台上流式处理的解决方案 xff0c 同时也给大家提供除Storm 以外的另一个选择 这篇内容主要介绍Spark Streaming 数据接收流程模块中与Ka
  • MircoPython 的组件扩展方法

    1 背景 本节内容将详细介绍如何扩展一个新的MicroPython 的组件 组件扩展方式分两种 xff1a 模块扩展 xff0c 模块 43 类扩展 右边netmgr 功能以模块的方式扩展的 xff0c 在使用的时候直接导入模块进行使用 左
  • HaaS第一本实体书籍 当代物联网开发圣经 现在开始预售

    元宇宙 xff08 Metaverse xff09 概念近期霸屏大众视野 xff0c 在社会各圈层掀起热议 这一极具科技感与未来感的抽象概念激发了人们无穷想象力 xff0c 现实世界与虚拟世界融合仿佛近在眼前 元宇宙概念始于 雪崩 一书 x
  • 工科生的信仰 ESP32 + HaaS Python 打造HaaS收音机

    HaaS收音机 简介 FM收音机作为上世纪的产物 xff0c 一度是大家日常使用最多的工具之一 xff0c 现在已经很少用到 xff0c 主要还是用在汽车上 一台经典的收音机往往能勾起很多人的回忆 本案例教大家如何快速打造一台物联网FM收音
  • 【HaaS Python硬件积木】HCSR04超声波测距传感器

    来这里发现更多拿来即用的传感器 HaaS开发框架 HaaS积木方案 xff0c 赋能生态开发者 xff0c 让您快速找到自己需要的解决方案 xff0c 硬件主板与外设 xff0c 以及各种应用组件 https haas iot aliyun

随机推荐