当前位置: 首页 > article >正文

DTH11传感器温度湿度+esp8266+阿里云+小程序

arduino在之前灯的基础上再添加两个库
Adafruit_Sensor,#include “DHT.h”
代码如下

#include <ESP8266WiFi.h>  // 引入Arduino ESP8266核心库
#include <ArduinoJson.h>  // 引入JSON处理库
#include <Ticker.h>        // 引入定时库
#include "PubSubClient.h" // 引入MQTT处理库
#include "AliyunIoTSDK.h" // 引入阿里云 IoT SDK
#include "DHT.h"          // 引入DHT11库

const char* WIFI_SSID     = ""; // WiFi账号密码,注意wifi有时候5G频的不行要连24的
const char* WIFI_PASSWORD = ""; // WiFi密码

//-------- 设置产品和设备的信息,从阿里云生活物联网设备信息里查看 -------//
#define PRODUCT_KEY "a"  //产品key  从产品详情获取
#define DEVICE_NAME "te"  //设备deviceName  从设备详情获取
#define DEVICE_SECRET "82531"
#define REGION_ID "cn-shanghai"
//-------- 设置产品和设备的信息,从阿里云生活物联网设备信息里查看 -------//

//-------- 引脚定义 -----------------------//
#define DHT_TYPE    DHT11     // DHT类型为DHT11
#define DHT_PIN D5  // DHT11
//---------------------------------------//

DHT dht(DHT_PIN, DHT_TYPE); //DHT11

float temp = 0.0; // 记录当前温度
float humi = 0.0; // 记录当前湿度

unsigned long previousMillis = 0; // 上一次时间
const long interval = 10000; // 读取时间间隔,默认10s
char param[100]; //存储上传到阿里云的结构数据

static WiFiClient espClient; // TCP Client
void doWiFiTick();

void setup() {
  // 延时2s,让电源稍微稳定一下
  delay(2000);
  // 初始化串口
  Serial.begin(115200);
  Serial.println("");
  // 初始化网络
  wifi_station_set_auto_connect(0);//关闭自动连接
  ESP.wdtEnable(5000); //  启用看门狗
  doWiFiTick();
  // 初始化 iot,需传入 wifi 的 client,和设备产品信息
  AliyunIoTSDK::begin(espClient, PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET, REGION_ID);
}

void loop() {
  // 定时喂狗
  ESP.wdtFeed();
  // wifi连接状态检测以及重连
  doWiFiTick();
  // 获取当前时间戳
  unsigned long currentMillis = millis();
  // 每隔一段时间读取一下传感器数据 interval为时间间隔,当前为10s
  if (currentMillis - previousMillis >= interval) {
    // 记录当前时间戳
    previousMillis = currentMillis;
    // 读取 DHT11 数据
    DHT11_Read();
    // 组装上传到阿里云的数据
    clrEsp8266Buffer();
    sprintf(param, "{\"temp\":%.2f,\"humi\":%.2f}", temp, humi);
    Serial.print("param:");
    Serial.println(param);
    // 发送数据到阿里云
    AliyunIoTSDK::send(param);
  }  

  // Wifi处于连接状态
  if (WiFi.status() == WL_CONNECTED) {
    // 检测MQTT 阿里云
    AliyunIoTSDK::loop();
  }
  delay(1000);
}

/**
 * 功能:连接Wifi路由心跳函数
 */
void doWiFiTick() {
  static bool taskStarted = false;
  static bool startSTAFlag = false;
  static uint32_t lastWiFiCheckTick = 0;

  if (!startSTAFlag) {
    startSTAFlag = true;

    Serial.print("connect to ap:");
    Serial.println(WIFI_SSID);
    WiFi.disconnect();
    WiFi.mode(WIFI_STA);
    WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
    Serial.printf("Heap size:%d\r\n", ESP.getFreeHeap());
    int cnt = 0;
    while (WiFi.status() != WL_CONNECTED) {
         delay(500);
         cnt++;
         Serial.print(".");
         if(cnt>=40){
             cnt = 0;
             //重启系统
             delayRestart(1);
         }
    }
  }

  //未连接1s重连
  if ( WiFi.status() != WL_CONNECTED ) {
    if (millis() - lastWiFiCheckTick > 1000) {
      lastWiFiCheckTick = millis();
      Serial.print(".");
    }
  }
  //连接成功建立
  else {
    if (taskStarted == false) {
      taskStarted = true;
      Serial.print(F("\r\nGet IP Address: "));
      Serial.println(WiFi.localIP());
    }
  }
}

/**
 * 读取 DHT11
 */
void DHT11_Read(void) {
  // 读取温度
  float newT = dht.readTemperature();
  // 判断数据是否非法
  if (isnan(newT)) {
     Serial.println(F("Failed to read temp from DHT sensor!"));
  }else {
     temp = newT;
     Serial.print("temp:");
     Serial.println(temp);
  }
  // 读取湿度
  float newH = dht.readHumidity();
  if (isnan(newH)) {
    Serial.println(F("Failed to read humi from DHT sensor!"));
  }else {
    humi = newH;
    Serial.print("humi:");
    Serial.println(humi);
  }
}

Ticker delayTimer;

/*
 * 延时重启
*/
void delayRestart(float t) {
  Serial.print(F("Restart after "));
  Serial.print(t);
  Serial.println("s");
  delayTimer.attach(t, []() {
    Serial.println(F("\r\nRestart now!"));
    ESP.restart();
  });
}


/**
 * 清除缓存
 */
void clrEsp8266Buffer(void){
  memset(param, 0, 100);      //清空
}

可以使用阿里云上原来灯的设备,添加温度和湿度的物模型,即可获取数值显示在阿里云的平台上
在这里插入图片描述
物模型的自定义在产品里,前往编辑草稿,标识符注意是代码中的temp和humi,数据类型也要保持一致,然后发布上线
在这里插入图片描述


http://www.kler.cn/a/403066.html

相关文章:

  • 论文浅尝 | MindMap:知识图谱提示激发大型语言模型中的思维图(ACL2024)
  • 淘宝商品评论爬虫:Java实现指南
  • Go语言的并发与管道
  • Java安全—JNDI注入RMI服务LDAP服务JDK绕过
  • 基于docker进行任意项目灵活发布
  • 问题: redis-高并发场景下如何保证缓存数据与数据库的最终一致性
  • 对基因列表中批量的基因进行GO和KEGG注释
  • 小程序租赁系统开发为企业提供高效便捷的租赁服务解决方案
  • Sourcetree登录GitLab账号
  • 在 CentOS 系统上直接安装 MongoDB 4.0.25
  • 基于EEMD变换的ECG心电信号去噪和心率估计matlab仿真
  • mysql如果把between and换成大于小于怎么改
  • 通过计算巢快速部署 Jupyter Notebook
  • 力扣--LCR 140.训练计划||
  • 鸿蒙NEXT开发案例:随机密码生成
  • 【Bug合集】——Java大小写引起传参失败,获取值为null的解决方案
  • 定长滑动窗口(LeetCode——1423.可获得的最大点数)
  • layui 输入框带清空图标和分词搜索功能
  • 人工智能之机器学习2-有监督学习【培训机构学习笔记】
  • ros2 humble 安装 navigation2
  • 用pyspark把kafka主题数据经过etl导入另一个主题中的有关报错
  • 基于yolov8、yolov5的玉米病害检测识别系统(含UI界面、训练好的模型、Python代码、数据集)
  • OpenCV自学系列(2)——核心操作(core operations)
  • 07架构面试题
  • 概率论之常见分布与matlab绘图
  • 如何更改手机GPS定位