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

embedded/2024/11/24 20:37:03/

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); //DHT11float 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为时间间隔,当前为10sif (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.ppmy.cn/embedded/140200.html

相关文章

SciPy库spatial.transform模块Rotation类的from_rotvec 函数介绍

SciPy 库的 spatial.transform 模块 Rotation 类 是一个工具类&#xff0c;用于在多种旋转表示形式&#xff08;例如旋转矩阵、四元数、旋转向量、欧拉角等&#xff09;之间进行转换&#xff0c;以及执行旋转操作。 示例代码 1. 构造旋转对象 from scipy.spatial.transform …

深度学习day1-Tensor 1

深度学习 一 初识Torch 1基础介绍 PyTorch是一个基于Python的深度学习框架&#xff0c;最初由Facebook开发&#xff0c;广泛用于计算机视觉、自然语言处理、语音识别等领域。用张量&#xff08;tensor&#xff09;来表示数据&#xff0c;可以在GPU上加速&#xff0c;处理大规…

Spring Boot OA系统:企业资源规划的新选择

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

Redis的理解

1.Redis使用 C语言开发的。Redis 约定此版本号,为偶数的版本是稳定版(如:2.4版 2.6版),奇数版是非稳定版(如:2.5版 2.7版) 2.Redis 数据库中的所有的数据都存储在内存中,由于内存的速度远远快于硬盘,因此Redis在性能上对比其他基于硬盘存储的数据库有明显优势,在普通一台计算机…

从〇开始深度学习(0)——背景知识与环境配置

从〇开始深度学习(0)——背景知识与环境配置 文章目录 从〇开始深度学习(0)——背景知识与环境配置写在前面1.背景知识1.1.Pytorch1.2.Anaconda1.3.Pycharm1.4.CPU与GPU1.5.整体关系 2.环境配置2.1.准备工作2.1.1.判断有无英伟达显卡2.1.2.清理电脑里的旧环境 2.1.安装Anaconda…

51单片机基础 06 串口通信与串口中断

目录 一、串口通信 二、串口协议 三、原理图 四、串口通信配置参数 1、常用的串行口工作方式1 2、数据发送 3、数据接收 4、波特率计算 5、轮询接收 6、中断接收 一、串口通信 串口通信是一种常见的数据传输方式&#xff0c;广泛用于计算机与外部设备或嵌入式系统之间…

C++设计模式:建造者模式(Builder) 房屋建造案例

什么是建造者模式&#xff1f; 建造者模式是一种创建型设计模式&#xff0c;它用于一步步地构建一个复杂对象&#xff0c;同时将对象的构建过程与它的表示分离开。简单来说&#xff1a; 它将复杂对象的“建造步骤”分成多部分&#xff0c;让我们可以灵活地控制这些步骤。通过…

Let‘s Encrypt SSL证书:acmessl.cn申请免费3个月证书

目录 一、CA机构 二、Lets Encrypt特点 三、申请SSL 一、CA机构 ‌Lets Encrypt‌是一个由非营利组织Internet Security Research Group (ISRG)运营的证书颁发机构&#xff08;CA&#xff09;&#xff0c;旨在通过自动化和开放的方式为全球网站提供免费、可靠的SSL/TLS证书。…