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,数据类型也要保持一致,然后发布上线
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/919639.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【汇编语言】转移指令的原理(三) —— 汇编跳转指南:jcxz、loop与位移的深度解读

文章目录 前言1. jcxz 指令1.1 什么是jcxz指令1.2 如何操作 2. loop 指令2.1 什么是loop指令2.2 如何操作 3. 根据位移进行转移的意义3.1 为什么&#xff1f;3.2 举例说明 4. 编译器对转移位移超界的检测结语 前言 &#x1f4cc; 汇编语言是很多相关课程&#xff08;如数据结构…

mac安装appuim

要在macOS上安装Appium&#xff0c;这是一个自动化测试框架&#xff0c;可以用来对移动应用进行测试&#xff08;支持iOS和Android应用&#xff09;。为了安装Appium和其依赖的环境&#xff0c;你需要做一些准备工作。以下是详细的安装步骤&#xff1a; 前提条件 1、macOS系统…

【WSL+Kali】进行系统升级时在 Setting up libc6:amd64 (2.37-15) ... 卡住不动

问题描述 当尝试执行以下命令进行系统升级时&#xff1a; sudo apt upgrade升级进程在以下步骤中卡住不动&#xff1a; Setting up libc6:amd64 (2.37-15) ...重启系统后&#xff0c;该问题仍然存在&#xff0c;如下图所示&#xff1a; 原因分析 apt命令是一个用于处理包的…

DevOps工程技术价值流:加速业务价值流的落地实践与深度赋能

DevOps的兴起&#xff0c;得益于敏捷软件开发的普及与IT基础设施代码化管理的革新。敏捷宣言虽已解决了研发流程中的诸多挑战&#xff0c;但代码开发仅是漫长价值链的一环&#xff0c;开发前后的诸多问题仍亟待解决。与此同时&#xff0c;虚拟化和云计算技术的飞跃&#xff0c;…

微深节能 平板小车运动监测与控制系统 格雷母线

微深节能的平板小车运动监测与控制系统中的格雷母线&#xff0c;是一种高精度、非接触式的位移测量系统&#xff0c;在平板小车的运动监测与控制中发挥着核心作用。 一、系统组成 该系统主要由以下关键部件组成&#xff1a; 地面电气柜&#xff1a;包含地址jie码器等重要组件&a…

【Linux课程学习】:对操作系统(Operator System)的理解

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux课程学习 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 操作系统&#xff08;Operator system&#xf…

使用Cursor和Claude AI打造你的第一个App

大家好&#xff0c;使用Cursor和Claude AI打造应用程序是一个结合智能代码辅助和人工智能对话的创新过程。Cursor是一个编程辅助工具&#xff0c;它通过智能代码补全、聊天式AI对话和代码生成等功能&#xff0c;帮助开发者提高编程效率。Claude AI则是一个强大的人工智能平台&a…

创建springboot+vue项目相关配置问题

安装并配置jdk23 在官网下载jdk Java Downloads | Oracle 中国 下载完成后双击即可安装。 安装完成后配置环境变量 此电脑->右键->属性->高级系统设置 然后一直点击确定即可。 键盘上win r java -version 可以验证是否配置成功 下载并配置maven 在官网下…

React 中使用 Axios 进行 HTTP 请求

下面是一个案例&#xff0c;展示如何在 React 中使用 Axios 进行 HTTP 请求&#xff0c;包括 GET 和 POST 请求的使用。 1. 安装 Axios 确保项目中已安装 Axios&#xff0c;可以通过以下命令安装&#xff1a; npm install axios2. 创建一个简单的 React 应用 项目结构&…

Wekan看板安装部署与使用介绍

Wekan看板安装部署与使用介绍 1. Wekan简介 ​ Wekan 是一个开源的看板式项目管理工具&#xff0c;它的配置相对简单&#xff0c;因为大多数功能都是开箱即用的。它允许用户以卡片的形式组织和跟踪任务&#xff0c;非常适合敏捷开发和日常任务管理。Wekan 的核心功能包括看板…

推荐几个 VSCode 流程图工具

Visual Studio Code&#xff08;简称VSCode&#xff09;是一个由微软开发的免费、开源的代码编辑器。 VSCode 发布于 2015 年&#xff0c;而且很快就成为开发者社区中广受欢迎的开发工具。 VSCode 可用于 Windows、macOS 和 Linux 等操作系统。 VSCode 拥有一个庞大的扩展市…

OpenHands:开源AI编程工具的新贵,让编程更自然

&#x1f680; AI技术在编程领域的应用正迅速发展&#xff0c;其中OpenHands作为一款新兴的开源AI编程工具&#xff0c;以其出色的性能和自然语言编程体验&#xff0c;成为了开发者的新宠。今天&#xff0c;让我们一起探索OpenHands的核心功能、架构设计&#xff0c;以及如何通…

C++:探索AVL树旋转的奥秘

文章目录 前言 AVL树为什么要旋转&#xff1f;一、插入一个值的大概过程1. 插入一个值的大致过程2. 平衡因子更新原则3. 旋转处理的目的 二、左单旋1. 左单旋旋转方式总处理图2. 左单旋具体会遇到的情况3. 左单旋代码总结 三、右单旋1. 右单旋旋转方式总处理图2. 右单旋具体会遇…

嵌入式硬件实战基础篇(三)-四层板PCB设计-步进电机驱动(TMC2208/TMC2209)

引言&#xff1a;我们在嵌入式硬件杂谈&#xff08;三&#xff09;中有提到阻抗匹配的问题&#xff0c;也引入了高速PCB设计的思想&#xff0c;并且此篇实战基础篇主要是基础的四层板的绘制设计&#xff0c;后续实战会对高速板展开&#xff0c;本篇主要是提升读者的设计PCB板的…

数据库基础(MySQL)

1. 数据库基础 1.1 什么是数据库 存储数据用文件就可以了&#xff0c;为什么还要弄个数据库? 文件保存数据有以下几个缺点&#xff1a; 文件的安全性问题文件不利于数据查询和管理文件不利于存储海量数据文件在程序中控制不方便 数据库存储介质&#xff1a; 磁盘内存 为…

【C++】踏上C++学习之旅(九):深入“类和对象“世界,掌握编程的黄金法则(四)(包含四大默认成员函数的练习以及const对象)

文章目录 前言1. 实现Date类的构造函数2. 实现Date类的拷贝构造函数3. 实现Date类的赋值运算符重载4. 实现各Date对象之间的比较接口5. 实现Date对象的加减接口6. const成员7. 取地址及const取地址操作符重载 前言 在我们前面学习到了"类和对象"的四大默认成员函数(…

如何在 Elasticsearch 中配置 SSL / TLS ?

Elasticsearch 是一种流行的开源搜索和分析引擎。它被广泛用于日志或活动数据分析&#xff0c;全文搜索和复杂查询。但是&#xff0c;没有适当的安全措施&#xff0c;敏感数据可能很容易受到影响拦截和未经授权的访问。在 Elasticsearch 中启用 SSL/TLS 是保护数据的关键步骤。…

python之sklearn--鸢尾花数据集之数据降维(PCA主成分分析)

python之sklearn–鸢尾花数据集之数据降维(PCA主成分分析) sklearn库&#xff1a;Scikit - learn&#xff08;sklearn&#xff09;是一个用于机器学习的开源 Python 库。它建立在 NumPy、SciPy 和 matplotlib 等其他科学计算库之上&#xff0c;为机器学习的常见任务提供了简单…

音视频pts/dts

现在的视频流有两个非常重要的时间戳&#xff0c;pts和dts&#xff0c;其中pts是显示的时候用&#xff0c;dts在解码的时候用。 pts很好理解&#xff0c;按照pts的顺序以及duration不间断的display就可以了。 dts在解码的时候用&#xff0c;那么这句话怎么理解&#xff0c;解…

数据集-目标检测系列- 人与猫互动 猫 检测数据集 cat in the house >> DataBall

数据集-目标检测系列- 人与猫互动 猫 检测数据集 cat in the house >> DataBall DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 贵在坚持&#xff01; 数据样例项目地址&#xff1a; * 相关项目 1&#xff…