基于OneNet云平台的厨房安全报警系统

#include <ESP8266WiFi.h>
#include <HttpPacket.h>
#include <ArduinoJson.h>
#include "DHT.h"
#define DHTPIN D8    //温湿度传感器接口
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

int led=D5;        //LED
int buzzer = D10;    //蜂鸣器信号
int relayPin =  D2;    //继电器信号
int FirePin = D1;    //火焰接口
int Human_pin = D3;      //人体红外
int CO_Pin = D4;          //CO数字接口
int CO_Senor = A0;        //CO模拟接口
       
const char ssid[] = "";     //修改为自己的路由器用户名
const char password[] = ""; //修改为自己的路由器密码
char device_id[] = "";    //设备ID
char API_KEY[] = "";    //API_KEY
char sensor_id1[] = "温度";
char sensor_id2[] = "煤气含量";
char sensor_id3[] = "火焰情况";
char sensor_id4[] = "是否有人";
char sensor_id5[] = "火警等级";

char* OneNetServer = "api.heclouds.com";    //服务器地址

void WIFI()
{  
  Serial.print("Connecting to " + *ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");  
  }
  Serial.println("");
  Serial.println("Connected");
  Serial.println("");
}

void postData(char* API_VALUE_temp, char* device_id_temp, char* sensor_id_temp, float thisData)
{  
  WiFiClient client;
  StaticJsonBuffer<250> jsonBuffer;
  JsonObject& myJson = jsonBuffer.createObject();
  JsonArray& datastreams= myJson.createNestedArray("datastreams");
  JsonObject& id_datapoints = datastreams.createNestedObject();
  id_datapoints["id"] = sensor_id_temp;
  JsonArray& datapoints = id_datapoints.createNestedArray("datapoints");
  JsonObject& value = datapoints.createNestedObject();
  value["value"] = thisData;
  char p[180];
  myJson.printTo(p, sizeof(p)); 
  packet.setHostAddress(OneNetServer);
  packet.setDevId(device_id_temp);  
  packet.setAccessKey(API_VALUE_temp);  
  packet.createCmdPacket(POST, TYPE_DATAPOINT, p);
  if (strlen(packet.content)){
    Serial.print(packet.content);
  }
  Serial.println(p);
  char cmd[400];
  memset(cmd, 0, 400);  
  strcpy(cmd, packet.content);
  strcat(cmd, p);
  if (client.connect(OneNetServer, 80)) { 
    Serial.println("WiFi connected ");
    client.print(cmd);
    delay(1000);
  }
  client.stop();
}

void postString(char* API_VALUE_temp, char* device_id_temp, char* sensor_id_temp, char* thisString)
{  
  WiFiClient client;
  StaticJsonBuffer<250> jsonBuffer;
  JsonObject& myJson = jsonBuffer.createObject();
  JsonArray& datastreams= myJson.createNestedArray("datastreams");
  JsonObject& id_datapoints = datastreams.createNestedObject();
  id_datapoints["id"] = sensor_id_temp;
  JsonArray& datapoints = id_datapoints.createNestedArray("datapoints");
  JsonObject& value = datapoints.createNestedObject();
  value["value"] = thisString;
  char p[180];
  myJson.printTo(p, sizeof(p)); 
  packet.setHostAddress(OneNetServer);
  packet.setDevId(device_id_temp);  
  packet.setAccessKey(API_VALUE_temp);  
  packet.createCmdPacket(POST, TYPE_DATAPOINT, p);
  if (strlen(packet.content)){
   Serial.print(packet.content);
  }
  Serial.println(p);
  char cmd[400];
  memset(cmd, 0, 400);  
  strcpy(cmd, packet.content);
  strcat(cmd, p);
  if (client.connect(OneNetServer, 80)) { 
    Serial.println("connected ");
    client.print(cmd);
    delay(1000);
  }
  client.stop();
}

void setup(){
  pinMode(Human_pin, INPUT);   //设置人体红外接口为输入状态
  pinMode(CO_Senor, INPUT);     //一氧化碳接口为输入状态
  pinMode(FirePin,INPUT);        
  pinMode(led, OUTPUT);
  pinMode(buzzer, OUTPUT);
  pinMode(relayPin, OUTPUT);
  digitalWrite(relayPin,LOW);
  Serial.begin(9600);
  WIFI();
}

void loop() {
  /*初始化*/
  int F = digitalRead(FirePin);
  int t = dht.readTemperature();
  int CO = analogRead(CO_Senor); //读取CO传感器数值
  int flag = digitalRead(Human_pin);
  char* State = "";
  char* Person = "";
  char* alert = "";
  Serial.print("CO:");
  Serial.print(CO);
  Serial.println("%");
  Serial.print("Temp:");
  Serial.print(t);
  Serial.println("C");
  /*数据处理*/
  if(flag == 1){
    Serial.print(1);
    Person = "有人";
  }else{
    Serial.print(0);
    Person = "无人";
  }
  if(t>30){
    Serial.println("Temperature is High!");
    digitalWrite(led,HIGH);
    digitalWrite(buzzer,HIGH);
    digitalWrite(relayPin,HIGH);
  }
  else{
    digitalWrite(buzzer,LOW);
    digitalWrite(led,LOW);
    digitalWrite(relayPin,LOW);
  }
  Serial.println(digitalRead(FirePin));
  if(F == 1){
    digitalWrite(relayPin, HIGH);
    digitalWrite(led,HIGH);
    digitalWrite(buzzer,HIGH);
    State = "有火";
    Serial.println("Fire!");
  }
  else{
    State = "无火";
    digitalWrite(relayPin, LOW);
  }
  if(CO > 80){
    Serial.print("CO is High!");
    digitalWrite(led,HIGH);
    digitalWrite(buzzer,HIGH);
    digitalWrite(relayPin,HIGH);
  }else{
    digitalWrite(relayPin,LOW);
  }
  if((flag == 1)&&(CO>80)&&(t>30)){
    alert = "红色警报!";
  }
  else if((flag == 0)&&(CO>80)&&(t>30)){
    alert = "无人危险!";
  }
  else if((flag == 0)&&(CO>80)){
    alert = "煤气泄漏!";
  }else{
    alert = "安全";
  }
  postData(API_KEY, device_id, sensor_id1, t);
  delay(100);
  postData(API_KEY, device_id, sensor_id2, CO);
  delay(100);
  postString(API_KEY, device_id, sensor_id3, State);
  delay(100);
  postString(API_KEY, device_id, sensor_id4, Person);
  delay(100);
  postString(API_KEY, device_id, sensor_id5, alert);
  delay(5000);    //5s一次循环
}
发布了58 篇原创文章 · 获赞 31 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_37504771/article/details/88593024