基于ESP8266的云平台监控智能鱼缸

#include <HttpPacket.h>
#include <ESP8266WiFi.h>

#include <ArduinoJson.h>

#include "DHT.h"
#define DHTPIN D8    //温度
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

int LED = D1;       //日光灯
int lightPin = A0;    //光感选择模拟口
int buzzer = D10;    //蜂鸣器
int relayPin = D2;     //继电器引脚
int relayState = HIGH; //继电器初始状态 

HttpPacketHead packet;                                                 

char OneNetServer[] = "api.heclouds.com";       //OneNetServer地址
const char ssid[] = "CT";     //修改为自己的路由器用户名  //Pineapple Plus
const char password[] = "12345678"; //修改为自己的路由器密码   //5678qwer
char device_id[] = "522764577";    //修改为自己的设备ID
char API_KEY[] = "k=Y1jqIQGLsHbocDrCHCp2h7YoI=";    //修改为自己的API_KEY
char sensor_id1[] = "温度";
char sensor_id2[] = "状态";

void Wificonnect()
{  
    Serial.print("连接... " + *ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
      delay(1000);
      Serial.print(".");  
  }
  Serial.println("");
  Serial.println("Connected");
  Serial.println("");
  digitalWrite(0, HIGH);
  delay(1000);
  digitalWrite(0, LOW);
  delay(1000);
  digitalWrite(0,HIGH);
}

//发送数据到云平台,绑定设备id,API_key
void postStringToOneNet(char* API_VALUE_temp, char* device_id_temp, char* sensor_id_temp, char* thisString)
{  
  WiFiClient client;
  StaticJsonBuffer<250> jsonBuffer;
  JsonObject& Json = jsonBuffer.createObject();
  JsonArray& datastreams= Json.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];
  Json.printTo(p, sizeof(p)); 
  packet.setHostAddress(OneNetServer);
  packet.setDevId(device_id_temp); 
  packet.setAccessKey(API_VALUE_temp); 
  /*create the http message about add datapoint */
  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 Client connected ");
    client.print(cmd);
    delay(1000);
  }
  client.stop();
}

void setup() {
  pinMode(lightPin,INPUT);     // 光敏模块连输入
  pinMode(LED,OUTPUT);         // LED为输出模式
  pinMode(buzzer, OUTPUT);     // 蜂鸣器输出
  pinMode(relayPin, OUTPUT);   // 继电器输出
  digitalWrite(relayPin,LOW);  // 继电器状态默认为低电平
  Wificonnect();               // 连接WiFi
  Serial.begin(9600); 
}

void loop() {
  int t = dht.readTemperature();//读取温度
  int val = analogRead(lightPin);    //读取光照值
  bool flag = true;
  char Status[10];        //日光灯状态
  char temp[10];        //需要发送的温度
  if(t < 10){
    for(int x=0;x<30;x++){
        digitalWrite(buzzer,HIGH);
        delay(500);
        digitalWrite(buzzer,LOW);
    }
  }else{
    digitalWrite(buzzer,LOW);
  }
  Serial.println(val);                   // 串口查看电压值的变化
  if( t > 30){
    for(int x=0;x<30;x++){
        digitalWrite(buzzer,HIGH);
        delay(500);
        digitalWrite(buzzer,LOW);
    }
  }
  else{
    digitalWrite(buzzer,LOW);
  }
  if(val < 250){    //光照太低    
    Status = "开启";
    digitalWrite(LED,HIGH);
  }
  else
  {
    Status = "关闭";
    digitalWrite(LED,LOW);
  }
  if(flag == true){
    digitalWrite(relayPin,HIGH);//继电器开启触发外部电路自动喂食
    delay(1000);
    flag = false;
  }
  else{
    digitalWrite(relayPin,LOW);
    delay(1000);
    flag = true;
  }
  itoa(t,temp,10);            //整型变量转换为字符串变量
  postStringToOneNet(API_KEY, device_id, sensor_id1, temp);    //发送温度
  delay(100);
  postStringToOneNet(API_KEY, device_id, sensor_id2, Status); //发送LED状态
  delay(18000);        //20秒一次循环
}
发布了58 篇原创文章 · 获赞 31 · 访问量 4万+

猜你喜欢

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