本帖最后由 hehung 于 2022-10-16 20:10 编辑
智能网络台灯
作者:hehung
一、作品简介
本作品是基于ESP32S2以及MaixBit完成的。ESP32S2上实现了LCD显示功能,能够显示时间,天气信息(7天天气),台灯亮度信息,联网状态信息等;实现了本地控制,远程APP控制以及天猫精灵语音控制功能,能够对智能台灯的亮度,开关,学习时间,延时关闭,控制模式等功能进行设置;模式控制有手动,自动,阅读以及睡觉,能够自由切换;MaixBit上实现了摄像头采集环境光强度功能并通过串口与ESP32S2进行数据交互;本作品还实现了wifi配网功能,可以用APP实现对智能网络台灯的配网。
二、系统框图
系统架构图如下图:
三、各部分功能说明
(各部分实现的功能说明及讲解,以图文结合的展示。)
硬件连接:
ESP32S2: L298驱动芯片 MaixBit
IO0 -- L298N驱动IN1
GND -- L298N驱动IN2 -- MaixBit GND
IO4(UART TXD)-- MaixBit IO9(UART RXD)
IO5(UART RXD)-- MaixBit IO10(UART TXD)
ESP32S2
下面介绍ESP32S2相关组件功能。
- LCD
LCD显示使用了GUI驱动LVGL,提供好看的GUI界面。
如上图,LCD主要用于显示一些信息,包括:
- 日期,时间
- 网络连接状态(wifi图标)
- 未连接网络的时候,Wifi图标周期闪烁显示;
- 连接了网络之后,wifi图标常显示。
- 物联网连接状态(IoT图标)
- 未连接到,Wifi图标周期闪烁显示;
- 连接了网络之后,wifi图标常显示。
- 台灯延时关闭使能状态(DO图标,DelayOff)
- 延时关闭功能使能时常显示;
- 延时关闭功能关闭时不显示
- 天气信息
- 今日天气,温湿度
- 空气质量,今日温度范围
- 从明天开始的六天天气,滚动显示
- 学习时间条(左边时间条,显示剩余学习时间)
- 台灯亮度条(右边亮度条,显示当前台灯亮度)
- 剩余学习时间数字,下中部显示当前还剩多少学习时间,如下图
- RGB
RGB三个LED主要用来标记当前状态。
- 如果wifi没有连接,红色LED闪烁;
- 如果wifi连接了但是没有连接到阿里云平台,蓝色LED闪烁;
- 如果wifi连接了也链接到了阿里云平台,绿色LED闪烁;
- 如果台灯为关闭状态,所有LED熄灭。
- 按键
ESP32S2板子上一共有6个按键(K1~K6),为ADC按键,所以通过一个IO口进行控制,配置为ADC模式,下面详细说明每个按键的功能:
- K1:
- 长按(按下时间超过一秒),用于使能/禁能台灯延时关闭功能,如果当前为使能状态则禁能,如果当前为禁能状态则使能;
- 短按(按下时间少于一秒),用于关闭或者打开台灯,当前为关闭时,则打开;如果是打开状态则关闭。
- K2
模式切换按键,用于切换控制模式;控制模式有自动模式,手动模式,阅读模式以及睡眠模式,每次按下按键都会按照顺序切换模式。
- K3
手动控制台灯亮度增加,只有在控制模式为手动时有效。
- 按下该按键并保持,台灯亮度会增加,最大为100%。
- K4
手动控制台灯亮度减小,只有在控制模式为手动时有效。
- K5
手动设置学习时间增加,只有在控制模式为手动时有效。
- 按下该按键并保持,学习时间会增大,最大120分钟。
- K6
手动设置学习时间减小,只有在控制模式为手动时有效。
- 延时关闭功能
说明:延时关闭就是当关闭台灯的时候不会马上关闭,而是等待30s之后才关闭。
在延时关闭等待等待器件,如果电源按键再次按下,则停止关闭过程,台灯不会被关闭。
- 台灯
台灯亮度是通过ESP32S2的LEDC输出PWM信号来控制的,使用到了L298N驱动芯片,如下图。
- LEDC输出PWM信号到L298N驱动芯片的IN1端口;L298N的IN2端口接GND;
- OUT1与OUT2接台灯的正极与负极;
- 台灯的供电电源正负极分别接+12V以及GND。
则,LEDC输出的PWM控制信号会经过L298N驱动信号输出给台灯,实现亮度控制。
- 控制模式
控制模式有自动模式,手动模式,阅读模式,睡眠模式。
- 自动模式:通过环境光的强度自动设置台灯的亮度;
- 手动模式:通过手动(或者联网控制,语音控制)控制亮度;
- 阅读模式:台灯亮度模式为90%;
- 睡眠模式:这也是小夜灯模式,亮度默认设置为10%。
- 时间
ESP32S2的RTC芯片用来自动控制时间,增加联网功能,对内部RTC进行时间校准,每一小时一次,显示屏会实时显示当前时间(时分秒,月日以及星期)。
- 天气
天气获取使用到了https,获取网络天气并且更新到本地。
获取天气的网址:https://www.yiketianqi.com/index/doc?version=day。
会获取两种天气:
- 一种是实时天气信息,有天气,温湿度,本日温度范围,空气质量等信息;
- 另一种是获取七日天气,有日期,天气,温度范围;
获取天气信息通过CJSON解析出来并显示到LCD屏。
- 串口
串口是用来和MaixBit通信的,接收来自MaixBit计算的环境光亮度信息。
串口通信格式为:数据长度(1Byte)+数据命令(1Byte)+数据(1Byte),以ASCII格式传输。
- 物联网
该作品使用了阿里云物理网平台用于远程数据交互,可以通过物联网控制的功能有:
- 模式(自动,手动,阅读,睡眠)
- 亮度(0%~100%)
- 学习时间(0~120分钟)
- 台灯电源开/关
- 延时开关使能/禁能
本地控制之后的数据会实时传递给云平台。
阿里云平台数据定义,如下图定义了智能网络台灯与阿里云平台交互的数据格式:
如下是手机APP的控制界面配置:
- 天猫精灵
可以通过天猫精灵控制台灯,如下功能可以控制:
- 配网
如果作品没有连过网,在使用的时候会自动进入AP模式,会创建一个wifi热点。
使用阿里云的云智能APP,添加设备,会自动搜索当前设备,搜索成功之后连接到ESP32S2创建的热点,然后等待配网完成,网络智能台灯就可以成功连接上网络了,下一次上电也不用再次连接,信息会自动保存到nvs中,下次上电自动连接wifi以及云平台。
配网操作详见演示视频末尾。
MaixBit
- MaixBit代码使用Python实现。
- 环境光检测
摄像头会采集到当前环境图像,然后每一秒钟拍摄一张图片,将图片以LAB格式读出,计算图片中的L(表示亮度)平均值就可以知道环境光强度了,L取值为0~100,表示环境光亮度0%~100%。
- LCD
LCD是一个辅助设备,用来显示当前摄像头采集到的图片,并且将环境光强度显示在图片上。
- RGB
RGB用来显示环境是否正常工作,如果正常,则绿色LED每一秒钟显示一次,通过定时器1通道0来实现一秒钟的闪烁。
- 串口
串口在定时器0通道0中实现,用来每一秒钟发送一次环境光强度数据到串口,同时也会监控串口接受的数据并打印出来。
四、作品源码
源码放在了EEWorld下载中心:
https://download.eeworld.com.cn/detail/hehung/625181
同时将源码放置在了gitee,链接如下:
五、作品功能演示视频
视频演示了作品的一些功能,包括配网,网络控制,本地控制,语音控制等功能。
视频放置在bilibili,链接如下:
https://www.bilibili.com/video/BV1sP411N7fa/
六、项目总结
为了完成本次项目学了到了很多知识,比如ESP32S2联网,ntp时间更新,获取天气信息,lvgl驱动的使用,阿里云物联网平台的链接等,也学会了使用maixbit,对自身成长比较大。
项目制作期间分享帖子:
【2022得捷电子创新设计大赛】最晚开箱帖
【2022得捷电子创新设计大赛】1. ESP32-S2环境搭建及点灯
【智能网络台灯】2. 设置系统时间以及打印
【智能网络台灯】3. ESP32-S2 + lvgl使用
【智能网络台灯】4. ESP32-S2 板载按键使用
【智能网络台灯】5. ESP32-S2 使用sntp进行网络校时
【智能网络台灯】6. ESP32-S2解决RAM空间开销过大的问题
【智能网络台灯】7. 获取实时天气信息并解析
【智能网络台灯】8. Maix bit驱动RGB
【智能网络台灯】9. Maix bit驱动串口
【智能网络台灯】10. Esp32-S2驱动UART
【智能网络台灯】11. MaixBit使用摄像头检测环境光强度
七、其他
感谢Digi-Key以及EEWORLD基于的本次机会,对于本次比赛,三轮评选结束,本来是没有入选的,但是由于一些小伙伴弃赛,有幸能够被选中再次进入比赛,感谢杜杜的推荐。本次作品实现收获也颇丰,学习到了很多知识,增加了宝贵的软件调试经验,期望以后也能多参加比赛与小伙伴们共同进步。
|