基于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一次循环
}

 

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前言: 为什么我首先想到要做厨房安全系统呢?厨房不仅是一个经常活动的场所,而且是家中危险系数最高的地方,您是否也有这样的担心,担心家人忘记关掉煤气、煲汤时忘记时间……一些小细节的疏忽大意,就可能危害到家庭的健康。 厨房智能监控系统介绍: 该系统可以监测厨房这样需要特别关注安全的地方。设备具备多种传感器接入,并且根据用途自由配置传感器的种类。设备接入云平台,可以通过智能手机实时了解当前状态,通过智能算法评估出安全系数,来做出针对性的防护措施。并且还可以手动作出修正处理。 智能厨房安全监控三部分: 家庭卫士通过多传感器对厨房温湿度、燃气、明火、烟雾进行监控; 通过算法对厨房各项环境数据进行综合评估分析,判断险情; 手机APP远程控制消防设备,处理危险 软件开发过程分析: 软件开发由三部分组成:下位机单片机程序、云端建立、以及手机端APP开发。用机智云做平台开发起来特别快,原因是有Gokit这样的开发板,并且有丰富底层代码范例的Dome程序。另外机智云建立云端数据的界面也特别友好,很适合入门者快速上手。还有最关键的是机智云有多个开源的手机APP的Dome源码提供参考,大大降低了开发门槛。 下位机程序 下位机程序中单片机和WiFi模块的通讯,以及WiFi模块接入以太网的规则,官方代码已经给的很完善了,初学者完全可以绕开这一段直接进行单片机开发,就和大家通常在普通STM32平台做功能一样的。 这里需要提出比较关键的一点是代码中的一个参数:product key。这是我们的设备连接到机智云平台哪一个云数据库的唯一判断依据。我们的开发板就是靠这个识别,来连接到你自己在机智云平台简历的数据接口的。这个product key是你建立属于自己的云端空间时机智云系统分配给你的,这个接下来要说的。我们做下位机单片机程序时,要把这个串码写进去。 官方代码把这个串码做在一个宏里,位于Procotol.h文件里: 为了大家直接在开发板上调试方便,我从官方Dome程序简单修改了一个程序,大家可以下载下来测试。 下位机单片程序参考代码详见附件内容。 注意:由于Gokit2开发板改版了,但是官方历程还未更新,RGB灯那里的代码需要做一些修改,具体位置是在hal_rgb_led.c文件里初始化RGB时需要把GPIOA0拉高: 云端建立 这需要在机智云官网上注册一个账号,然后就可以建立一个属于自己的云端数据空间了,简单四五个步骤就搞定,并且每一步都有指导说明,特别人性化,新手无痛入门! 1、首先要取一个云端设备名称,这个名称就是以后你手机APP上搜到的设备名称,比如我们这里叫做:智能厨房3。当搜到多个设备时,我们可以以设备的MAC地址区分不同设备。 2、然后我们要选择你所使用的开发板,并且选择一个云端范例模板。这里机智云简直就做的是傻瓜模式,我们完全可以利用模板轻松改一个自己的云端数据空间。当然也可以从新建议一个,不过新手建议从模板来改。 3、接下来我们要在模板中修改适合自己的数据,数据名称需要和前边下位机中给出的数据列表对应起来,名称需要完全一致,否则会导致对应不上。 我们开发板用到的设备数据包括如下,云端建立数据时,名称和类型要和下面结构体里定义的一样: 4,最后设置完成之后提交,机智云就会分配给你一个属于你自己的product key。我们需要把它更新到你的下位机单片机程序里。 手机app开发 这个因为有官方开源的Dome源码,所以我们只要有一些安卓或者ios开发基础,就可以轻松的从官方Dome中改一个出来。如果仅仅是学习测试使用,甚至可以直接用官方给的IOE Dome测试,因为这个Dome里没有都设备的product key进行筛选,所以凡是接入到机智云的Gokit开发板在局域网里都能被这个Dome APP找到并连接。 这里给一个智能厨房的APP,大家可以连接到Gokit开发板测试一下。因为是具体应用的APP,所以对product key做了筛选,只识别连入智能厨房云端的在线设备。所以测试时Gokit开发板需要使用前面代码里给的这个这个product key才可以。 APP测试中按如下对应关系参考: 1温湿度对应Gokit开发板上的温湿度传感器,显示温湿度; 2火焰传感器对应开发板上的红外对管传感器,用手遮挡时红外对管时,明火报警; 3换气扇操作对应开发板上的马达,打开换气扇按钮,马达开始正转; 4插座开关对应开发板的RGB LED中的红灯,打开插座开关按钮,红灯亮。 安卓手机客户端详见附件内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值