
开源协议
:GPL 3.0
(未经作者授权,禁止转载)描述
基于立创ESP32 S3开发板,使用ESP IDF作为开发环境,制作简易桌面助手,实现WiFi联网,空调远程开关控制,温湿度、光照监测及上传,时间显示功能。
1.功能介绍
本项目使用嘉立ESP32 S3开发板完成设计与制作,目前已经实现实现WiFi联网,空调远程开关控制,温湿度监测及上传,时间显示以及云智能APP界面显示与控制功能。
2.原理图说明
2.1 电源供电电路
电源供电采用USB+锂电池供电方案,当插入USB插座时,系统由USB供电并且给锂电池充电;当拔下USB插座后,电源电路由锂电池供电。


USB供电接口 锂电池充电电路
2.2供电电路的自动切换
实现供电电路的自动切换,关键在于使用了PNP型MOS管,当MOS管Vgs<0,且达到其导通电压后,MOS管导通。利用PMOS管这种特性,在电路中将其作为开关使用,通过控制
Vgs电压的高低来实现电路的通断。使用USB供电时,PNP管G点电位由分压电阻拉高,Vgs>0,MOS管截止,锂电池不对外供电,当只有锂电池供电时,G点接地,电压为0V,Vgs<0,MOS
管开启,且在USB输出端接入一颗肖特基二极管,使两电路不会相互影响。

供电切换电路
2.3 5V升压电路
ESP32S3开发板带有 3.3V LDO,考虑到锂电池不稳定,因此在电路中设计5V升压稳压电路稳定电压,保持设备运行稳定;本次升压芯片选用了芯鼎盛X4310,此芯片在输入2.7~5V时会固定输出5V,
为芯片工作提供稳定的电压。

5V稳压电路
2.4 锂电池充电管理电路
关于锂电池充放电电路,本次使用了比较常用的TP4054充放电管理芯片,最大充电电流500mA,且该电流可以通过更改电阻进行调节,在充电过程中,芯片1脚接地,LED灯亮起,当电量充满后,
芯片1脚更换为高组态,LED灯熄灭,可以根据LED灯亮灭判断电池充电状态。

锂电池充电管理电路
2.5 显示电路
显示电路使用1.8寸OLED屏,该屏幕使用SPI接口进行通讯,屏幕刷新速度稳定,显示画面较好。

屏幕显示电路
2.6 红外发射电路
根据乐鑫官方手册,ESP32S3是带有红外功能的,能够通过配置相关函数实现红外信号发射,但是经过验证,该功能发射的红外信号只有32bit(具体可参考乐鑫官方API),但是经过实际测量,空调遥控器一次发送的信号
内容高达100多bit,因此经过多次尝试,无奈放弃该方案。

RMT官方API
因此本工程红外发射电路采用了定时器输出38KHZ PWM波形模拟红外NEC协议,电路由两个IO口控制,一个口使能信号,另一个IO口发射信号,IO口均通过控制PNP三极管控制信号导通与关闭,通过编码实现模拟NEC协议。

红外发射电路
2.7 温湿度、光照检测
温湿度传感器采用了性价比较高的DHT11,单个传感器不到两块钱,光照检测采用光敏电阻分压,然后通过ADC读取电压进行转换。

温湿度、光照检测电路
3、实物图

产品实物图

云智能APP显示图
4、PCB设计说明
在PCB设计中,电源部分走线应该进行加粗处理,必要时使用铺铜进行连接。

顶层

底层
5、关键程序说明
5.1 阿里云平台的接入
工程采用了MQTT协议与阿里云进行连接,在编写程序前,需前往阿里云物联网平台注册账号并创建产品和设备,并定义产品功能:

阿里云平台创建产品

阿里云平台功能定义

阿里云平台创建设备
设备创建好后我们可以得到MQTT连接参数以及用于属性订阅、发布的Topic列表:

MQTT连接参数

Topic列表
将以上信息写入代码如下:

信息写入代码
之后连接WIFI,使用mqtt_app_start();函数初始化就能将设备与阿里云连接。

5.2 阿里云消息的订阅与发布
在按照5.1将Topic列表写入程序后,我们可以通过cJSON创建消息,然后调用esp_mqtt_client_publish,函数进行消息发布:

注意发布消息时,我们本地的变量表示名必须与阿里云上设置的一致,这样才能保证阿里云能够识别我们发布的信息。至于订阅主题,
只需在初始化中添加相关Topic列表,在收到相关订阅后,会通过控制台打印相关消息,当然,我们也可以调用cJSON对对应消息进行解析,
得到我们需要的内容。

5.3 红外信号的发送
红外信号采用定时器产生的PWM波形模拟NEC时序发送信息,相关时序定义如下:
逻辑1和逻辑0:

逻辑"0":560µs的有效脉冲 + 560µs的空闲间隔,总时长为1.12ms。
逻辑"1":560µs的有效脉冲 + 1.68ms的空闲间隔,总时长为2.24ms(为逻辑0的一倍)。
开始码:

每一帧的起始标志序列为:9ms的AGC脉冲(是逻辑数据位使用的脉冲560us的16倍)+4.5毫秒的空闲。
因此,根据以上信息,可以模拟NEC波形如下:


只要确定了相关代码,就能通过ESP32的IO口发出信号控制空调开关,那么问题来了:如何确定空调控制代码呢?
如果空调品牌是比较常用的,可以直接在网上搜索,说不定能搜到,如果是不太常用的,或是老款空调,比如次项目
需要控制的空调,那就用示波器测吧!!!!

上图是空调开机时,使用示波器测试的红外接收器输出波形,根据协议解析可得到开机编码信息。
(其实没这么麻烦,只需要一个红外解码器,连接上单片机,再在网上移植一个红外接收代码即可,使用示波器主要是为了在调试中方便观察波形)
6、装配说明
该项目所有阻容均使用0603封装,只有芯片焊接难度较高,多加尝试便能焊接完成,然后等代码烧录完成后,将产品装入外壳就OK了,需要注意屏幕处有4跟直径1.8mm的柱子定位,不要弄断了。
设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程

评论