热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

绿色节能,用ESP32+HaaSPython做一个智慧路灯系统,稍加改造也能用在地下室哦

随着城市化不断扩大,城市的灯光秀越来越多,让我们居住的城市生活变得五彩缤纷,灯火辉煌,让城市显得越来越繁华。但是࿰

随着城市化不断扩大,城市的灯光秀越来越多,让我们居住的城市生活变得五彩缤纷,灯火辉煌,让城市显得越来越繁华。但是,我们也会经常发现有些路边的灯,在天很黑了不会自动打开,或者到清晨,天很亮了,马路边的灯也不会自动熄灭,只会在固定时间统一开关控制,这样既不人性化也不环保。于是现在很多地方的路灯会根据周围环境亮度自动开启或关闭路边灯光,那这样的路灯就非常人性化,同时也非常环保,这才是真正的城市智慧路灯。

1、背景知识

本案例打造的智慧路灯控制系统是当检测到周围环境亮度变暗的时候,系统会自动打开灯,当周围环境亮度变亮的时候,系统就会自动关闭灯。本智慧路灯控制系统默认设置一个亮度阈值,当亮度值超过阈值,关灯,当亮度值低于阈值,开灯,当然,这个阈值可以根据每个人对光的亮度感觉不同而调整。

硬件器材:

  1. ESP32开发一套
  2. 光敏电阻传感器一个
  3. 连接线若干

硬件连线图如下图所示:

整个开发过程只需要2步:

2、物联网平台开发

对于第一次使用物联网平台的读者,需要开通实例以使用物联网平台的功能。这里可以使用免费的公共实例进行开发。在物联网平台,左上角选择“华东2-上海”,点击“公共实例”,即可开通。

2.1、云端创建产品


  • 创建产品

点击“公共实例”,即可进入控制台进行产品创建。然后,点击创建产品按钮,如下图所示。

这里创建了一个名称为“智慧路灯”的产品。

点击确认,就可以在产品列表中出现智慧路灯。

查看产品详情。

编辑草稿,选择自定义功能。

如下图设置对应产品的物模型,分别设置光强度电压值和灯开关两个模型。

在产品详情中增加产品的功能,可以看到刚才设置的光强度电压值和灯开关两个功能属性,点击发布上线。

这样,整个智慧路灯产品在物联网平台也创建好了。

  • 设备管理

选中最左边栏设备管理中的设备,然后添加设备,

选择的产品为刚刚创建的智慧路灯,设备名设置为smartlight,点击确认,

进入设备详情,获取设备三元组信息,

将设备三元组信息一键拷贝出来,在设备开发中会用到。

  • 设备引擎

如何通过光感自适应控制灯的亮灭呢?可以在物联网平台上通过引擎规则实现,本课程使用的光敏电阻传感器测的光强度电压值越高,说明周围的环境越暗;反之,测得的光强度电压值越低,说明周围的环境越亮。

当光强度电压值大于1000,说明周围的环境变暗,执行开灯的指令

当光强度电压值小于1000,说明周围的环境变亮,执行关灯的指令

规则引擎创建完成以后,启动引擎即可。

3、设备端开发

在进行下一步之前请确保ESP32开发环境已经搭建完毕。详情请参考esp32开发环境的说明。

3.1、创建解决方案

如下图所示,打开VS Code之后在新建一个基于helloworld的python工程,设定好工程名称(“light_smart”)及工作区路径之后,硬件类型选择ESP32,点击立即创建,创建一个Python轻应用的解决方案。

 将智慧路灯系统脚本的代码复制后覆盖到刚刚创建的工程根目录下,main.py里边的内容如下图所示:

Python脚本的详细说明请参考脚本内嵌的文字注释


  • 修改路由器名称及密码

   修改light_smart工程里main.py中wifiSsid和wifiPassword的值为读者实际要连接的路由器的名称及密码(请注意名称和密码都需要放在""符号中间)。

# wifi连接的的ssid和pwd定义
wifiSsid = "请填写您的路由器名称"
wifiPassword = "请填写您的路由器密码"

   修改完成之后get_wifi_status函数中的wlan.connect(wifiSsid, wifiPassword) 语句就会连接读者自己设定的路由器。

  • 修改设备端三元组

   修改fq_time工程里main.py中productKey、deviceName和deviceSecret的值为上面物联网平台创建的物联网设备的三元组信息,复制即可:

# 物联网平台相关的key和serect定义
productKey = "产品密钥"
deviceName = "设备名"
deviceSecret = "设备密钥"

  • 修改设备端上报光强度和下发开关标识符

   light_smart工程里main.py中下面的代码实现的是上传光强度值到云端的功能,以及云端下发对应的开关命令。其中Brightness便是光强度值上报时所用的标识符,onoff为云端下发的开关标识符。

def report_light_data(l_data):# 生成上报到物联网平台的属性值字串prop = ujson.dumps({'Brightness': l_data,})upload_data = {'params': prop}# 上传光强度信息到物联网平台device.postProps(upload_data)下面是采集光照数据的时候,采样值是跨阈值1000就需要进行上报。# 采集打印光照强度电压值
def show_lightness():global lightness,i_light,last_light,system_reseti_light &#61; int(lightness)if system_reset &#61;&#61; 1:print("system first come")system_reset &#61; 0 # 系统第一次启动report_light_data(i_light)elif (i_light >&#61; 1000 and last_light <1000) or (i_light <1000 and last_light >&#61; 1000):report_light_data(i_light)print("light has change")else:print(&#39;no need report&#39;)if i_light <10:T_str &#61; "亮度:" &#43; str(round(i_light, 1))elif i_light >&#61; 10 and i_light <100:T_str &#61; "亮度:" &#43; str(round(i_light, 2))elif i_light >&#61; 100 and i_light <1000:T_str &#61; "亮度:" &#43; str(round(i_light, 3))elif i_light >&#61; 1000 and i_light <10000:T_str &#61; "亮度:" &#43; str(round(i_light, 4))print(T_str)last_light &#61; i_light

   处理物联网平台过来的数据。

# 设置props 事件接收函数&#xff08;当云平台向设备下发属性时&#xff09;
def on_props(request):global alarm_on, deviceprint(request)payload &#61; ujson.loads(request[&#39;params&#39;])# 获取dict状态字段 注意要验证键存在 否则会抛出异常if "onoff" in payload.keys():alarm_on &#61; payload["onoff"]if (alarm_on):print("开灯")ledOn()else:print("关灯")ledOff()# 要将更改后的状态同步上报到云平台upload_data &#61; {&#39;params&#39;: ujson.dumps({&#39;onoff&#39;: alarm_on,})}# 上报本地灯的状态到云端device.postProps(upload_data)

   确保Brightness和onoff两个标识符和物联网产品的物模型中属性标识符是一样的&#xff0c;如下图所示&#xff1a;


3.2、运行结果

本地查看

推送此脚本到ESP32之后&#xff0c;设备上打印光强度值&#xff0c;同时将相关的光强度值上传到云端&#xff0c;并且当光强度大于1000&#xff0c;打开LED灯&#xff1b;当光强度小于1000&#xff0c;关闭LED灯&#xff0c;如下日志所示&#xff1a;

>>> execfile("/data/pyamp/main.py")
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
(&#39;192.168.0.105&#39;, &#39;255.255.255.0&#39;, &#39;192.168.0.1&#39;, &#39;192.168.0.1&#39;)
sleep for 1 s
establish tcp connection with server(host&#61;&#39;a1zxKgAV78Z.iot-as-mqtt.cn-shanghai.aliyuncs.com&#39;, port&#61;[443])
tcp_connect: can only connect from state CLOSED
success to establish tcp, fd&#61;54
物联网平台连接成功
sleep for 2s
photoresistor init finished
The lightness is: 571
system first come
亮度:571
The lightness is: 926
no need report
亮度:926
The lightness is: 577
no need report
亮度:577

到此&#xff0c;智慧路灯系统案例就已经完成了。如果想要学习智慧路灯案例更详细的操作步骤&#xff0c;请参考“智慧路灯系统详解”中的说明。

如果将光强度传感器 改为 人体红外传感器&#xff0c;也可用于地下室哦&#xff0c;检测到有人才开灯&#xff0c;人离开一段时间后熄灭只保留应急灯&#xff0c;就可以节省非常多的电能了



推荐阅读
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Python如何调用类里面的方法
    本文介绍了在Python中调用同一个类中的方法需要加上self参数,并且规范写法要求每个函数的第一个参数都为self。同时还介绍了如何调用另一个类中的方法。详细内容请阅读剩余部分。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 使用eclipse创建一个Java项目的步骤
    本文介绍了使用eclipse创建一个Java项目的步骤,包括启动eclipse、选择New Project命令、在对话框中输入项目名称等。同时还介绍了Java Settings对话框中的一些选项,以及如何修改Java程序的输出目录。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 【MicroServices】【Arduino】装修甲醛检测,ArduinoDart甲醛、PM2.5、温湿度、光照传感器等,数据记录于SD卡,Python数据显示,UI5前台,微服务后台……
    这篇文章介绍了一个基于Arduino的装修甲醛检测项目,使用了ArduinoDart甲醛、PM2.5、温湿度、光照传感器等硬件,并将数据记录于SD卡,使用Python进行数据显示,使用UI5进行前台设计,使用微服务进行后台开发。该项目还在不断更新中,有兴趣的可以关注作者的博客和GitHub。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
author-avatar
冷尔岚钰_820
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有