基于IOT的供电房监控系统(实物)

aliyun_mqtt.cpp

        本次设计利用ESP8266作为系统主控,利用超声波检测门的状态,利用DHT11检测环境温湿度、烟雾传感器检测空气中的气体浓度,利用火焰报警器模块检测火焰状态,使用OLED进行可视化显示,系统显示传感器数据,以及们的状态等。如果环境中烟雾浓度过高,风扇会进行转动将烟雾进行驱散。

一、硬件设计

1、主控

        本次设计利用ESP8266作为系统主控,ESP8266是一款 WIFI开发板,可以利用Arduino IDE进行开发,由于ESP8266开发板对应arduino ide的标号与开发板显示标号有差异,因此为了方便进行开发,我们可以在此前创建一些静态变量完成其映射,参考如下:

static const uint8_t D0   = 16;
static const uint8_t D1   = 5;
static const uint8_t D2   = 4;
static const uint8_t D3   = 0;
static const uint8_t D4   = 2;
static const uint8_t D5   = 14;
static const uint8_t D6   = 12;
static const uint8_t D7   = 13;
static const uint8_t D8   = 15;
static const uint8_t D9   = 3;
static const uint8_t D10  = 1;

2、传感器

        本次设计利用的传感器包括烟雾传感器、火焰传感器、DHT11、超声波传感器四个传感器,借助arduino IDE框架,我们可以很轻松地获得这些传感器的驱动文件。

        烟雾传感器利用模数转换进行实现,由于ESP8266有且只有一个ADC口,借助该ADC口,我们可以实现烟雾传感器的值获取,值的范围大致在0-1024的区间。

烟雾传感器模块:

        火焰传感器有两种输出方式:模拟输出、数字输出,分别叫做 AO(模拟输出)、DO(数字输出),由于上面的烟雾传感器已经使用了ADC口,且ESP8266只有一个ADC口,因此火焰传感器只能使用数字输出口获取数据,当检测到火焰的时候,火焰传感器输出0,当没有检测到火焰的时候,火焰传感器输出1.

火焰传感器模块:

        DHT11是一种温湿度传感器,他只有一根数据传输线,使用单总线协议进行传输,借助Arduino IDE软件,我们可以方便地进行传感器数据的读取。

DHT11温湿度模块:

        超声波传感器模块使用简单,我们只需要发送10s左右的高电平,然后关闭,统计超声波传感器的 ECHIO端(接收端)的高电平时间,此时我们再根据声音在空气中的传播速度,进行距离的测算,实现非接触式测量。

超声波传感器模块:

3、风扇

        风扇一般使用直流电机进行驱动扇叶,直流电机是一种简单的点击器件,我们只要控制其导电方向,就可以实现风扇的正反转,如果直流电机两端电平一致,则电机停止。使用简单方便,如果需要实现不同挡位的电机速度,可以使用PWM进行驱动,改变其占空比,实现直流电机调速。

        L298N 是一种双H桥电机驱动模块,其中每个H桥可以提供2A的电流,功率部分的供电电压范围是2.5-48v,逻辑部分5v供电,接受5vTTL电平。一般情况下,功率部分的电压应大于6V否则芯片可能不能正常工作。

二、软件设计

1、ESP8266 Arduino IDE 程序设计

        ESP8266端作为核心部分,需要负责数据采集、可视化显示、控制器件、上传数据等,对于传感器部分可以借助Arduino IDE中的第三方库方便地完成硬件驱动,可视化器件使用OLED,为了显示中文,本次设计使用了U8G库,控制直流电机非常简单,只是单纯的高低电平,而上传数据到阿里云平台则需要借助 aliyun_mqtt 库这是一个第三方库且并没有上传到Arduino IDE官方,设计的时候我们还需要创建一个.cpp、一个.h文件。下面会附上代码:

#include <Arduino.h>  //引入Arduino开发板的基础头文件
//引入连接传感器需要使用的DHT库函数头文件
#include <Adafruit_Sensor.h>
#include <DHT.h> 
#include <U8g2lib.h> //引入连接OLED显示屏需要使用的U8g2库函数头文件
//引入Arduino底层SPI和I2C通信协议相关的库函数头文件
#include <SPI.h>
#include <Wire.h>

#include <ESP8266WiFi.h>   //引入连接WiFi网络需要使用的ESP8266 Arduino开发环境
#include <PubSubClient.h>  //引入连接MQTT服务器需要使用的PubSubClient库函数头文件
#include <ArduinoJson.h>   //引入使用JSON数据交互需要使用的ArduinoJson库函数头文件
#include "aliyun_mqtt.h" //引入连接阿里云物联网平台所需的MQTT库函数头文件
#include <AliyunIoTSDK.h>  //引入阿里云IoT SDK

//配置阿里云环境和WIFI
#define WIFI_SSID ""  //自己的WIFI ID
#define WIFI_PASSWD ""  //自己的WIFI密码
#define PRODUCT_KEY ""                         //自己的PRODUCT_KEY
#define DEVICE_NAME ""                             //自己的DEVICE_NAME
#define DEVICE_SECRET ""  //自己的DEVICE_SECRET
#define REGION_ID "cn-shanghai"                           //自己的REGION_ID
WiFiClient espClient;  //创建WIFI连接对象
PubSubClient mqttClient(espClient);  //创建MQTT连接对象
//订阅消息的TOPIC
#define ALINK_TOPIC_PROP_SET ""  
//发布数据的TOPIC
#define ALINK_TOPIC_PROP_POST ""  
 
//使用U8G2库驱动OLED显示屏
#ifdef U8X8_HAVE_HW_SPI
#endif
#ifdef U8X8_HAVE_HW_I2C
#endif
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);  

static const uint8_t D0   = 16;
static const uint8_t D1   = 5;
static const uint8_t D2   = 4;
static const uint8_t D3   = 0;
static const uint8_t D4   = 2;
static const uint8_t D5   = 14;
static const uint8_t D6   = 12;
static const uint8_t D7   = 13;
static const uint8_t D8   = 15;
static const uint8_t D9   = 3;
static const uint8_t D10  = 1;

//定义DHT11空气温湿度传感器引脚
#define DHTPIN D4
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
#define Smoke_Pin A0
#define Flame_Pin D3
#d
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值