+ - [3.6.1 小程序首页界面](#361__160)
- [3.6.2 小程序连接MQTT服务端并显示环境数据](#362_MQTT_165)
+ [3.7 预警消息的微信推送](#37__171)
+ - [3.7.1 预警消息接收端配置](#371__172)
- [3.7.2 预警消息发送端配置](#372__183)
+ [3.8 远程视频监控设计](#38__187)
+ - [3.8.1 内网视频监控](#381__190)
- [3.8.2 内网穿透的实现](#382__204)
- [3.8.3 微信小程序端远程监控](#383__231)
三、系统的软件设计
3.1 系统软件整体设计
本系统所使用的两个开发板为ESP8266-NodeMCU和ESP32-CAM模块,非常方便的一点是,这两个开发板的程序编写以及程序编译烧入都可以使用Arduino IDE软件完成。
通过程序控制,能够实现系统的初始化和MCU对各个检测家庭环境的传感器的数据采集,以及WiFi模块的初始化。采集的数据可以实时的显示在OLED屏幕上,MCU通过分析部分传感器返回的环境参数能够判断当前环境是否存在安全问题,能够起到家庭安防的作用,对安防警报信息能够及时通过声光报警和远程微信预警信息通知给人们。并且用户可以随时随地的通过微信实时查看视频监控。
(1)ESP8266的程序流程图如下图所示
(2)ESP32-CAM模块程序流程图:
3.2 各个传感器软件设计
3.2.1 温湿度传感器数据采集
DHT11的软件设计流程图如下图所示:
DHT11接收到主机(MCU)发送的启动信号后,DHT11立即从低功率模式切换到高速模式。主机启动信号结束后,DHT11发送响应信号,发送40位数据并触发信号采集。信号发送时序图如下图所示
(1)DHT11数据格式。DHT11发送的一次数据由5个字节构成,分为整数部分和小数部分,高位在前(左)。数据的格式如下:
8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据+ 8bit校验位。校验位为前四个字节相加结果的末8位。
(2)驱动程序。温度与湿度的获取是在主程序中通过使用dht11库文件获取,库文件包含一个dht11.h文件和一个dht11.cpp文件。在dht11.cpp通过uint8_t bytes[5]语句定义了一个含有5个元素的字节数组,该数组用来存放dht11按照时序传递的数据。根据DHT11的DATA引脚的电平时序变化判断出要准备接收40位bit,在接收数据时只对高电平持续时间进行计时,高电平持续26 ~ 27us表示数据“0”,而高电平持续68 ~ 74us表示数据“1”,“0”和“1”的时序图如图4.5。由于68us~74us为一个时间范围,存在一定的误差,若延时太短,无法判断当前是处于数据“0”的时隙还是数据“1”的时隙;如果延时太长,则会错过下一位数据前的开始时隙,从而后续数据无法被检测,因此在程序中将高电平持续时间大于40us作为对有效高电平进行的判断的依据。
dh11.h 的代码 ↓
#ifndef dht11\_h
#define dht11\_h
#if defined(ARDUINO) && (ARDUINO >= 100)
#include <Arduino.h>
#else
#include <WProgram.h>
#endif
#define DHT11LIB\_VERSION "0.4.1"
#define DHTLIB\_OK 0
#define DHTLIB\_ERROR\_CHECKSUM -1
#define DHTLIB\_ERROR\_TIMEOUT -2
class dht11
{
public:
int read(int pin);
double humidity;
double temperature;
};
#endif