基于ESP8266+433射频控制系统

创作前情

之前在咸鱼上挂了些小玩具出售,前些天有网友在问能不能帮他实现一个射频遥控控制的模块,下面是他提的一些需求:

1:阻容尽可能是0805封装
2:供电电压9-12.6V(OLED需显示电量)
3:遥控器用的是4键ABCD的433频率遥控器,D键是开关机
4:保留按键设计,(A长按设置)、(B+)(C-)(D确认/开关机)
5:遥控模块网上有很多7脚的,基本定义是GDD、5V、OUT1-4,以及外接学习键,注意这里需要把外接学习键给引出来。用一个触点开关。
6:RTC电路,也可以找网上现成的,注意电池要是可更换CR2032型号的,断电走时。
7:芯片使用8266-12F,预设SSID信息,SSID:NTP,密码12345678,当手机设置这个热点的时候自动联网校时。
8:没有网络的情况下,时间误差可以通过遥控器校准。
9:设置开机时间和关机时间一组数据即可。
10:OUT用MOS管输出到端XH2.54口,共有2组输出,其中OUT1:只要开机或者定时开机就持续输出,OUT2:最好可以设置或者固件预设值通电X(默认30分钟)分钟然后断电X(默认)分钟(如果遥控器不好实现就代码注释下,以后我好自己修改),
11:屏幕显示,屏幕用0.96或者1.3寸的,都可以,或者预埋代码我需要时在切换。定义根据网上大多数的来,第一行显示电量、以及WIFI状态(图标就行),和运行状态(图标就行)。第二行显示当前北京时间(如:22:08秒不显示就行,居中),第三行显示,开机时间、关机时间(如开机:16:00、关机22:00,如果中文支持不好,就干脆NO:/OFF)
13:如果可以在屏幕的第一行增加显示温湿度数据也行,I2C通讯和屏幕并联,AHT20/21芯片。
14:代码尽可能有中文注释,这样有小问题我自己可以修修不用麻烦你。

当时是想着直接拒绝的,不是因为做不到,是太费时了,本身这段时间比较忙,事多,但网友说不着急,想着能帮就帮他了,

先看下最终效果,界面共分三个区域:

  • 顶部区域显示状态信息, 依次显示联网信息,定时开关,out1状态,out2状态,电池电压,电池电量
  • 中间显示当前时间信息
  • 底部显示定时开启以及关闭时间

设置主界面:按键A长按3-5s,进入设置界面,BC按键为上下选择按键,D按键为确定按键,

输出控制:首行中间两个图标根据实际状态而变化。

OTA升级:

 显示编译版本时间:

项目规划

硬件部分

基本上模块选型已经定了:esp8266、0.96oled、433射频接收,RTC时钟

esp8266 :没啥选的,常用的一款

0.96oled:也是比较常用的

433射频接收:网上大概有四五款,目前选用了DRX1K-433这款,支持输出不同模式切换以及学习功能,目前使用点动模式,当接收到按键时,输入为高电平。

RTC时钟模块买了两款DS1307与DS3231

发现区别不大,同一套代码居然可以共用,想着还做识别当前是使用哪个模块,结果发现完全一样。 

软件部分

软件依旧使用arduino来做,直接调用相关库可以实现功能需求,

主要有以下几处:

  • ota更新固件--没有画串口电路,因为特别麻烦而且像这种应用不会频繁更新固件
  • 四个功能按键--来操作界面选择不同的功能 ,使用OneButton库完成
  • oled显示--使用u8g2库 来做
  • RTC时钟-- 使用RTClib与DFRobot_DS1307

实现过程

  1. 开机检测是否首次开机,如果是将相关参数写入eeprom
  2. 初始化pin脚
  3. 初始化oled
  4. 联网获取时间,
  5. 初始化RCT时钟模块
  6. 设定系统时间
  7. 初始化OTA
  8. 初始化按键
  9. 读取电池电压

接下来是进入循环程序的部分

  • 检测是否触发ota
  • 检测是否显示版本信息
  • 检测是否进入设置界面
  • 循环显示主页面

后续优化

待补充

猜你喜欢

转载自blog.csdn.net/yyandad/article/details/129855881