Esp8266 D1 Mini檢測溫濕度(DHT11) 阿里IOT

接著上次連接阿里IOT的熱情趕緊買了個小模塊測試了下解取,感覺效果還不錯斩松,阿里提供的支持還是很方便的络凿。

材料準備
  • ArduinoIDE

  • Esp8266 D1 Mini (淘寶自行搜索) (10-20之間)別忘記配usb數(shù)據(jù)線


  • DHT11 模塊 (淘寶自行搜索)(幾塊錢)


接下來就是輕車熟路的創(chuàng)建產(chǎn)品和設(shè)備荞彼,有一點需要注意冈敛,產(chǎn)品創(chuàng)建要從另個地方創(chuàng)建,原因就是可視化應(yīng)用時候我們會搜不到設(shè)備鸣皂,這個問題我也沒仔細去查找抓谴,有知道的告訴。
上面創(chuàng)建沒什么好說的寞缝,打開查看項目

創(chuàng)建產(chǎn)品和上次創(chuàng)建步驟一樣沒什么特別注意的癌压,接下來創(chuàng)建功能自定義屬性

上面添加了三條屬性,要注意 標識符 數(shù)據(jù)類型 取值范圍 單位
 標識符:設(shè)備上報數(shù)據(jù)時所對應(yīng)的Key值 很重要荆陆,不能有中文
 數(shù)據(jù)類別:設(shè)備上報數(shù)據(jù)是所傳輸?shù)臄?shù)據(jù)類型
 取值范圍:取值范圍根據(jù)硬件模塊設(shè)置
 單位:數(shù)據(jù)單位措拇,可視化可以用到
1.Humidity        
2.Temperature
3.Heat_Index
接下來創(chuàng)建一臺設(shè)備,這里可以批量創(chuàng)建慎宾,步驟3是查看設(shè)備的Key
1.接下來配置下Arduino IDE
  • 文件>>>首選項 在附加開發(fā)板管理器網(wǎng)址填入>>>http://arduino.esp8266.com/stable/package_esp8266com_index.json

    工具>>>開發(fā)板>>>開發(fā)板管理器

    搜索esp安裝esp8266開發(fā)板

    安裝后選擇開發(fā)板WEMOS D1 mini丐吓,端口號也選擇自己設(shè)備的對應(yīng)端口
2.添加開發(fā)所需要的依賴庫
  • 搜索DHT 安裝DHT依賴庫



    然后到上次阿里云在線開發(fā)平臺下載mqtt和阿里云的依賴



    下載完成后吧zip里的文件都解壓到Arduino的libraries文件夾里。我電腦文件夾在C:\Users\Administrator\Documents\Arduino\libraries

    如果這里沒有的也可以放到IDE所在目錄的libraries


搞了這么多是不是可以上代碼了趟据?
是的還有一個小坑券犁,不過問題不大,就是缺下面這個庫
下載Adafruit_Sensor添加到libraries里就好汹碱,基佬hub大家都會用吧粘衬,就不多說了。
好了接下來上代碼
#include <ESP8266WiFi.h>
#include <ArduinoJson.h>
#include <aliyun_mqtt.h>
#include <DHT.h>

#define WIFI_SSID "WIFI名"
#define WIFI_PASSWD "WIFI密碼"

#define PRODUCT_KEY "自己設(shè)備"
#define DEVICE_NAME "自己設(shè)備"
#define DEVICE_SECRET "自己設(shè)備"

#define ALINK_BODY_FORMAT "{\"id\":\"%u\",\"version\":\"1.0\",\"method\":\"%s\",\"params\":%s}"
#define ALINK_TOPIC_PROP_POST "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/event/property/post"
#define ALINK_TOPIC_PROP_SET "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/service/property/set"
#define ALINK_METHOD_PROP_POST "thing.event.property.post"

//這個是DHT11模塊輸入的IO口 我這里選擇的D7 看自己需求選擇
#define DHTPIN 13   
#define DHTTYPE DHT11

//這個是指示燈  又需要的可以在阿里云里添加功能
const int LED = 12;

//默認LED開啟的
int ledState = HIGH;
//推數(shù)據(jù)我這選擇15秒推一次   我發(fā)現(xiàn)推的快了數(shù)據(jù)還是跑的很快的,畢竟阿里消息數(shù)>百萬也是要錢的哦
unsigned long delayTime = 15000;
unsigned long lastDebounceTime = 0;
unsigned long lastMqttConnectMs = 0;
unsigned int postMsgId = 0;

DHT dht(DHTPIN, DHTTYPE);
WiFiClient espClient;
PubSubClient mqttClient(espClient);

void initWifi(const char *ssid, const char *password)
{
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED)
  {
    Serial.println("WiFi does not connect, try again ...");
    delay(3000);
  }

  Serial.println("Wifi is connected.");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void mqttCheckConnect()
{
  bool connected = connectAliyunMQTT(mqttClient, PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET);
  if (connected) {
    Serial.println("MQTT connect succeed!");
    if (mqttClient.subscribe(ALINK_TOPIC_PROP_SET)) {
      Serial.println("subscribe done.");
    } else {
      Serial.println("subscribe failed!");
    }
  }
}

//上報檢測數(shù)據(jù)
void mqttPublish()
{
  char param[512];
  char jsonBuf[1024];

  float h = dht.readHumidity();//濕度
  float t = dht.readTemperature();//溫度
  float hic = dht.computeHeatIndex(t, h, false);//熱指數(shù)

  sprintf(param, "{\"LED_STATE\":%d,\"Humidity\":%.2f,\"Temperature\":%.2f,\"Heat_Index\":%.2f}", ledState, isnan(h) ? 0 : h, isnan(t) ? 0 : t, isnan(hic) ? 0 : hic);
  postMsgId += 1;
  sprintf(jsonBuf, ALINK_BODY_FORMAT, postMsgId, ALINK_METHOD_PROP_POST, param);

  if (mqttClient.publish(ALINK_TOPIC_PROP_POST, jsonBuf)) {
    Serial.print("Post message to cloud: ");
    Serial.println(jsonBuf);
  } else {
    Serial.println("Publish message to cloud failed!");
  }
}

void callback(char* topic, byte* payload, unsigned int length)
{
  if (strstr(topic, ALINK_TOPIC_PROP_SET))
  {
    Serial.print("Set message arrived [");
    Serial.print(topic);
    Serial.print("] ");
    payload[length] = '\0';
    Serial.println((char *)payload);

    // Deserialization break change from 5.x to 6.x of ArduinoJson
    DynamicJsonDocument doc(100);
    DeserializationError error = deserializeJson(doc, payload);
    if (error)
    {
      Serial.println("parse json failed");
      return;
    }

    JsonObject setAlinkMsgObj = doc.as<JsonObject>();
    // LightSwitch
    int desiredLedState = setAlinkMsgObj["params"]["LED_STATE"];

    if (desiredLedState == HIGH || desiredLedState == LOW) {
      ledState = desiredLedState;

      const char* cmdStr = desiredLedState == HIGH ? "on" : "off";
      Serial.print("Cloud command: Turn ");
      Serial.print(cmdStr);
      Serial.println(" the light.");
    }
  }
}

void setup() {
  Serial.begin(115200);
  Serial.println("Hacklab MQTT LED demo starts.");

  pinMode(LED, OUTPUT);
  dht.begin();

  initWifi(WIFI_SSID, WIFI_PASSWD);
  mqttClient.setCallback(callback);

  lastMqttConnectMs = millis();
  mqttCheckConnect();
  mqttPublish();
}

void loop() {

  if (millis() - lastMqttConnectMs >= delayTime) {
    lastMqttConnectMs = millis();
    mqttCheckConnect();
  }

  if (!mqttClient.loop()) {
    Serial.println("The MQTT client is disconnected!");
  }

  if (millis() - lastDebounceTime >= delayTime) {
    if (ledState == HIGH) {
      Serial.println("Turn on light locally.");
    } else {
      Serial.println("Turn off light locally.");
    }

    lastDebounceTime = millis();

    mqttPublish();
    Serial.println(lastDebounceTime);
  }

  digitalWrite(LED, ledState);
}
好了燒錄到8266打開串口波特率115200就可以看到數(shù)據(jù)已經(jīng)上報了稚新,之后可以做數(shù)據(jù)可視化勘伺。
可視化根據(jù)官方文檔做還是很簡單的,自己動手實現(xiàn)下吧褂删。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末飞醉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子屯阀,更是在濱河造成了極大的恐慌缅帘,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,599評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件难衰,死亡現(xiàn)場離奇詭異钦无,居然都是意外死亡,警方通過查閱死者的電腦和手機盖袭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評論 3 385
  • 文/潘曉璐 我一進店門失暂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鳄虱,你說我怎么就攤上這事弟塞。” “怎么了醇蝴?”我有些...
    開封第一講書人閱讀 158,084評論 0 348
  • 文/不壞的土叔 我叫張陵宣肚,是天一觀的道長。 經(jīng)常有香客問我悠栓,道長霉涨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,708評論 1 284
  • 正文 為了忘掉前任惭适,我火速辦了婚禮笙瑟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘癞志。我一直安慰自己往枷,他們只是感情好,可當我...
    茶點故事閱讀 65,813評論 6 386
  • 文/花漫 我一把揭開白布凄杯。 她就那樣靜靜地躺著错洁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪戒突。 梳的紋絲不亂的頭發(fā)上屯碴,一...
    開封第一講書人閱讀 50,021評論 1 291
  • 那天,我揣著相機與錄音膊存,去河邊找鬼导而。 笑死忱叭,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的今艺。 我是一名探鬼主播韵丑,決...
    沈念sama閱讀 39,120評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼虚缎!你這毒婦竟也來了撵彻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,866評論 0 268
  • 序言:老撾萬榮一對情侶失蹤遥巴,失蹤者是張志新(化名)和其女友劉穎千康,沒想到半個月后享幽,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铲掐,經(jīng)...
    沈念sama閱讀 44,308評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,633評論 2 327
  • 正文 我和宋清朗相戀三年值桩,在試婚紗的時候發(fā)現(xiàn)自己被綠了摆霉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,768評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡奔坟,死狀恐怖携栋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情咳秉,我是刑警寧澤婉支,帶...
    沈念sama閱讀 34,461評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站澜建,受9級特大地震影響向挖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜炕舵,卻給世界環(huán)境...
    茶點故事閱讀 40,094評論 3 317
  • 文/蒙蒙 一枚尼、第九天 我趴在偏房一處隱蔽的房頂上張望钓试。 院中可真熱鬧,春花似錦、人聲如沸囱修。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽呼伸。三九已至,卻和暖如春睹耐,著一層夾襖步出監(jiān)牢的瞬間辐赞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評論 1 267
  • 我被黑心中介騙來泰國打工疏橄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留占拍,地道東北人略就。 一個月前我還...
    沈念sama閱讀 46,571評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像晃酒,于是被迫代替她去往敵國和親表牢。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,666評論 2 350

推薦閱讀更多精彩內(nèi)容