Esp8266 D1 Mini检测温湿度(DHT11) 阿里IOT

接着上次连接阿里IOT的热情赶紧买了个小模块测试了下,感觉效果还不错,阿里提供的支持还是很方便的。

材料准备
  • ArduinoIDE

  • Esp8266 D1 Mini (淘宝自行搜索) (10-20之间)别忘记配usb数据线


  • DHT11 模块 (淘宝自行搜索)(几块钱)


接下来就是轻车熟路的创建产品和设备,有一点需要注意,产品创建要从另个地方创建,原因就是可视化应用时候我们会搜不到设备,这个问题我也没仔细去查找,有知道的告诉。
上面创建没什么好说的,打开查看项目

创建产品和上次创建步骤一样没什么特别注意的,接下来创建功能自定义属性

上面添加了三条属性,要注意 标识符 数据类型 取值范围 单位
 标识符:设备上报数据时所对应的Key值 很重要,不能有中文
 数据类别:设备上报数据是所传输的数据类型
 取值范围:取值范围根据硬件模块设置
 单位:数据单位,可视化可以用到
1.Humidity        
2.Temperature
3.Heat_Index
接下来创建一台设备,这里可以批量创建,步骤3是查看设备的Key
1.接下来配置下Arduino IDE
2.添加开发所需要的依赖库
  • 搜索DHT 安装DHT依赖库



    然后到上次阿里云在线开发平台下载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 "自己设备"
#define DEVICE_NAME "自己设备"
#define DEVICE_SECRET "自己设备"

#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;
//推数据我这选择15秒推一次   我发现推的快了数据还是跑的很快的,毕竟阿里消息数>百万也是要钱的哦
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!");
    }
  }
}

//上报检测数据
void mqttPublish()
{
  char param[512];
  char jsonBuf[1024];

  float h = dht.readHumidity();//湿度
  float t = dht.readTemperature();//温度
  float hic = dht.computeHeatIndex(t, h, false);//热指数

  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就可以看到数据已经上报了,之后可以做数据可视化。
可视化根据官方文档做还是很简单的,自己动手实现下吧。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,907评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,546评论 1 289
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,705评论 0 238
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,624评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,940评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,371评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,672评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,396评论 0 195
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,069评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,350评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,876评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,243评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,847评论 3 231
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,004评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,755评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,378评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,266评论 2 259

推荐阅读更多精彩内容