#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;
int buzzer = D10;
int relayPin = D2;
int FirePin = D1;
int Human_pin = D3;
int CO_Pin = D4;
int CO_Senor = A0;
const char ssid[] = "";
const char password[] = "";
char device_id[] = "";
char 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);
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);
}