资讯详情

ESP8266获取传感器数值,上传阿里云

#include <DHT.h> #include<ESP8266WiFi.h> #include <PubSubClient.h> #include <Wire.h> #include "Adafruit_SGP30.h" #include <ArduinoJson.h>  const char* ssid     = "Redmi";       // 连接 WiFi名 ,修改为自己的WiFi名                                       const char* password = "12345678";          // 连接 WiFi密码,修改为自己的WiFi密码  /******************产品/设备配置(每个人都需要根据自己的产品和设备信息动态更换)**********************/   #define PRODUCT_KEY "********"  //产品key  从产品细节中获取 #define DEVICE_NAME "phone"  //设备deviceName  从设备细节中获取 // 服务端相关 #define MQTT_SERVER   PRODUCT_KEY ".iot-as-mqtt.cn-shanghai.aliyuncs.com" //阿里云MQTT服务地址 #define MQTT_PORT     1883                                               //MQTT服务端口 // 校验三元组 #define MQTT_CLIENT_ID  DEVICE_NAME "|securemode=3,signmethod=hmacsha1|" //mqtt clientid #define MQTT_USERNAME   DEVICE_NAME "&" PRODUCT_KEY                      //mqtt username #define MQTT_PASSWORD   "BC22B700B31E6452BE3BF495D35B531921CAAAC9"       //mqtt password 通过生成工具获得 // 相关主题 定制一个主题 #define SUB_TOPIC "/" PRODUCT_KEY "/" DEVICE_NAME "/user/get"      ///订阅主题 #define PUB_TOPIC0 "/" PRODUCT_KEY "/" DEVICE_NAME "/user/update"   ////发布主题 #define PUB_TOPIC "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/event/property/post"   ////发布主题   /*************************************************************************************************/  /******************配置ESP8266的引脚**********************/  ///温度传感器的引脚和类型配置 #define DHTPIN D5 #define DHTTYPE DHT11  const int humanSensor = D0;  ////人体红外传感器引脚 const int fireSensor  = D4;  ///火焰传感器引脚 const int ultravioletSensor = A0; ///紫外线引脚  /*******************************************************/  /******************传感器的存储变量**********************/  int humanState;      ///检测人体状态,有人为1,无人为0 int fireState;       //检测火焰状态,火为1,无火为0 float hum;           //湿度值 float temp;          //温度值  uint16_t tvoc;            //总挥发性有机物 uint16_t co2;             //CO2浓度 uint16_t illumination;     ///光强 uint16_t ultraviolet;    ///紫外线值  /*****************************************************/  int BH1750address = 0x23;   ///光强传感器地址端接地 byte buff[2];          ///光强缓存    DHT dht(DHTPIN,DHTTYPE); Adafruit_SGP30 sgp;  WiFiClient espClient;               //创建wifi客户端 PubSubClient client(espClient);     //创建MQTT客户端  void setup() {   Serial.begin(115200);   pinMode(humanSensor,INPUT);  ///将人体红外传感器引脚设置为输入模式   pinMode(fireSensor,INPUT);   ///设置火焰传感器引脚的输入模式   dht.begin();   ///打开温湿度传感器DHT11   sgp.begin();   //开启CO2浓度检测    Wire.begin();   BH1750_Init(BH1750address);    setup_wifi();   client.setServer(MQTT_SERVER,MQTT_PORT); //设置阿里云MQTT服务器地址及端口   client.setCallback(callback);  }    void loop() {   getHumanState();   ////获得人体传感器的状态   getFireState();    //获取火焰的状态   getUltraviolet();   getTempHum();   ///获得温湿度值   getVOTC();      ///获得总挥发性有机物和二氧化碳的浓度   getIllumination(); ///获得光强的值      if (!client.connected()){     reconnect();   }   client.loop();    jsonAndPublish();///将获得的数据转换为json格式,并且上传阿里云   delay(5000);    }  void jsonAndPublish(){   StaticJsonDocument<256> doc;    doc["id"] = "1";   doc["version"] = "1.0";      JsonObject params = doc.createNestedObject("params");      params["humanState"] = humanState;   params["fireState"] = fireState;   params["hum"] = hum;   params["temp"] = temp;   params["tvoc"] = tvoc;   params["co2"] = co2;   params["illumination"] = illumination;   params["ultraviolet"] = ultraviolet;   doc["method"] = "thing.event.property.post";      char output[256];   serializeJson(doc, output);   client.publish(PUB_TOPIC, output);      Serial.println();   Serial.println(output);   Serial.println(); }  void getIllumination(){   if (2 == BH1750_Read(BH1750address))   {     illumination = ((buff[0] << 8) | buff[1]) / 1.2;     Serial.print("光照强度:");     Serial.print(illumination, DEC);     Serial.println("[lx]");   } }  void getVOTC(){   if (! sgp.IAQmeasure()) {       Serial.println("sgp measurement failed");       return;   }   tvoc = sgp.TVOC;   co2 = sgp.eCO2;   Serial.print("TVOC "); Serial.print(sgp.TVOC); Serial.println(" ppb\t");   Serial.print("eCO2 "); Serial.print(sgp.eCO2); Serial.println(" ppm"); }  void getUltraviolet(){   ultraviolet = analogRead(ultravioletSensor);   Serial.print("紫外线: ");   Serial.print(ultraviolet);   Serial.println(); }  void getTempHum(){   hum=dht.readHumidity();   temp=dht.readTemperature();   Serial.print("hum: ");   Serial.print(hum);   Serial.println("%");     Serial.print("temp: ");   Serial.print(temp);   Serial.println("C"); }  void getFireState(){   fireState = digitalRead(fireSensor);   Serial.print("火焰状态: ");   if(fireState==1){     Serial.println("有火");   }else{     Serial.println("无火");   } }  void getHumanState(){   humanState= digitalRead(humanSensor);   Serial.print("人体状态: ");   if(humanState==1){     Serial.println("有人");   }else{     Serial.println("无人");   } }  int BH1750_Read(int address) // {   inti = 0;
  Wire.beginTransmission(address);
  Wire.requestFrom(address, 2);
  while (Wire.available()) //
  {
    buff[i] = Wire.read();  // receive one byte
    i++;
  }
  Wire.endTransmission();
  return i;
}
 
void BH1750_Init(int address)
{
  Wire.beginTransmission(address);
  Wire.write(0x10);//1lx reolution 120ms
  Wire.endTransmission();
}

void setup_wifi()
{
  delay(10);
  // We start by connecting to a WiFi network
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED){
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

//收到订阅Topic信息的回调处理
void callback(char *topic, byte *payload, unsigned int length){
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  for (int i = 0; i < length; i++){
    Serial.print((char)payload[i]);
  }
  Serial.println();
  // 平台发来命令“1”时开灯
  if ((char)payload[0] == '1'){
    digitalWrite(BUILTIN_LED, HIGH);
  }
  else{
    digitalWrite(BUILTIN_LED, LOW);
  }
}
 
void reconnect()
{
  // Loop until we're reconnected
  while (!client.connected()){
    Serial.print("Attempting MQTT connection...");
    // Attempt to connect
    if (client.connect(MQTT_CLIENT_ID, MQTT_USERNAME, MQTT_PASSWORD)){ 
      Serial.println("MQTT server connected");
      // 订阅主题
      client.subscribe(SUB_TOPIC);
    }
    else{
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying
      delay(5000);
    }
  }
}
 

标签: wl系列传感器wlcal5

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台