手把手教你ESP8266+SHT31 连接阿里云 上传温湿度

ESP8266+SHT31 连接阿里云 上传温湿度
①网上关于sht31的教程基本没有,有的也需要收费,很不方便,所以自己做了一个开源
②接下来让我详述一下整个过程
需要编写代码,云端创建产品和设备,还有就是一些库文件必须要下载
下面让我们开始吧!
一、创建云端设备
首先我们进到阿里云的官网,在产品里找到物联网平台

然后

需要开通公共实例

点击进入-创建产品产品名称随便起个名字

选择标准品类,搜索温度,选择室内温湿度

其他默认,确认

添加设备,设备名字代码里会用

此时未激活

这三个需要复制到记事本,一会代码用

至此阿里云云的配置已经完成!完成了本次项目的一大步!

二、在Arduino或者VScode里编写代码,安装库文件,并修改PubSubClient里的两个参数

1.安装库文件

在ardunio 的工具-管理库 搜索以下几个库

AliyunIoTSDK、ArduinoJson、 PubSubClient、Crypto

还有SHT31传感器的库

此外,如果没有esp8266库的同学需要额外下载

文件-首选项

粘贴这个json

http://arduino.esp8266.com/stable/package_esp8266com_index.json

工具-开发板管理器-搜索esp8266

这里有个问题,就是在ardunio下载他会报错,可能是源网站更新过,导致无法完整下载,此时打开文件-首选项

点击txt结尾这串文件地址,进入ardunio开发板的文件夹

cache文件夹中

这里我的办法是离线下载包,解压后替换整个cache文件,重启ardunio即可显示已安装

链接:
https://pan.baidu.com/s/1Ihy6YEzGOWmT4l29WXoQRQicon-default.png?t=N7T8https://link.zhihu.com/?target=https%3A//pan.baidu.com/s/1Ihy6YEzGOWmT4l29WXoQRQ

提取码:glt9

解压后完整替换即可

2.修改PubSubClient中的两个参数

使用vscode打开

因为要连接阿里云,所以需要修改参数
找到我们PubSubClient库文件位置,一般都在Arduino里的Libraries里面,打开PubSubClient里面的src文件,可以看到.h头文件,打开它,修改第26行和第31行的参数,改为1024和60,如下图。

如果找不到地址可以参考我的地址:

第二个是计算机名

 3.修改阿里云证书文件

将刚才保存的三 串字符,填写到代码中 ,接线图我放到代码的最前面了

4.修改wifi名和密码

 5.完整代码如下:

/****************************************sht3x温湿度 part****************************************/
/*
  接线:
  3.3V------VCC
  GND------GND
  SCL------SCL--D1
  SDA------SDA--D2
*/
#include <AliyunIoTSDK.h>                                                     //调用库文件                 
#include <Wire.h>                                                           //调用库文件
#include "Adafruit_SHT31.h"                                                 //调用库文件
 
Adafruit_SHT31 sht31 = Adafruit_SHT31();                                    //实例化对象
 
#define sht3xTimeInterval 1000                                              //检测一次的时间间隔                   
float sht3xTemp = 0, sht3xHumi = 0;                                         //存储温度值和湿度值。
unsigned long sht3xTimes = 0;                                               //记录设备运行时间

// 引入 wifi 模块,并实例化,不同的芯片这里的依赖可能不同
#include <ESP8266WiFi.h>
static WiFiClient espClient;


// 引入阿里云 IoT SDK
#include "AliyunIoTSDK.h"

// 设置产品和设备的信息,从阿里云设备信息里查看
#define PRODUCT_KEY "k03fvPdHrAl"
#define DEVICE_NAME "2222"
#define DEVICE_SECRET "3731d39789952420b86e45a2982c402c"//(这三个东西在阿里云里面)
#define REGION_ID "cn-shanghai"

// 设置 wifi 信息
#define WIFI_SSID "NYS"//(这里面连你自己家的WiFi,注意要是2.4G频段的,5G的不行)
#define WIFI_PASSWD "123456789"//(你自己家的WiFi密码)
/****************************************set up and loop part*********************************/
void setup() {
  Serial.begin(115200);                                                       //设置串口波特率为9600

     // 初始化 wifi
    wifiInit(WIFI_SSID, WIFI_PASSWD);

    
   AliyunIoTSDK::begin(espClient, PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET, REGION_ID);
   
  if (! sht31.begin(0x44)) {                                                //传感器IIC初始化
    while (millis() - 1000) {
      Serial.println("找不到SHT31");                                         //串口打印对应的值
    }
  }
  Serial.println("设备上线!");
}
void loop() {
  
    AliyunIoTSDK::loop();  
    AliyunIoTSDK::send("CurrentTemperature",sht3xTemp);
    AliyunIoTSDK::send("CurrentHumidity",sht3xHumi);
    
  getData();                                                                //获取温湿度值。
}
/****************************************sht3x温湿度 part****************************************/
/*获取温度和湿度函数*/
void getData() {
  if (millis() - sht3xTimes >= sht3xTimeInterval) {                         //一定时间执行一次
    sht3xTimes = millis();
 
    sht3xTemp = sht31.readTemperature();                                    //获取温度数据
    sht3xHumi = sht31.readHumidity();                                       //获取湿度数据
 
    Serial.print("温度:");                                                  //串口打印对应的值
    Serial.print(sht3xTemp, 1);                                             //保留一位小数
    Serial.print(" (C), ");                                                 //串口打印对应的值
    Serial.print("湿度:");                                                  //串口打印对应的值
    Serial.print(sht3xHumi, 1);                                             //保留一位小数
    Serial.println(" (%)。");                                               //串口打印对应的值
    delay(2000);
  }
}


// 初始化 wifi 连接
void wifiInit(const char *ssid, const char *passphrase)
{
    WiFi.mode(WIFI_STA);
    WiFi.begin(ssid, passphrase);
    while (WiFi.status() != WL_CONNECTED)
    {
        delay(1000);
        Serial.println("WiFi not Connect");
    }
    Serial.println("Connected to AP");
     


}

// 电源属性修改的回调函数
void powerCallback(JsonVariant p)
{
    int PowerSwitch = p["PowerSwitch"];
    if (PowerSwitch == 1)
    {
        // 启动设备
    } 
}

6.验证-上传后打开右上角串口监测可以看到成功打印出来了

这里面需要注意的是8266开发板选择的是115200的波特率,还有一开始串口一定要对上7.打开阿里云控制平台

可以看到已经在线了,点击查看-物理模型,可以看到温湿度的信息了

8.注意事项:

AliyunIoTSDK::send(“CurrentTemperature”,t);
AliyunIoTSDK::send(“CurrentHumidity”,h);

这两行代码,CurrentTemperature、CurrentHumidity,必须与我们云端产品的功能定义标识符一致,此外标识符的数据类型也要与代码中的一致。

 到此为止,本次配置就算完成了。

成功上传到阿里云,可以上传到自己建的云平台服务器上,更多操作等你来发挥。

本教程是我根据这个博主进行修改的,在此表示感谢

ESP8266+dht11 连接阿里云 上传温湿度_dht11 阿里云-CSDN博客

  • 41
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ESP32驱动SHT30温湿度模块获取温湿度的过程如下: 1. 确认SHT30模块的I2C地址,SHT30模块默认I2C地址为0x44。 2. 初始化ESP32的I2C接口,设置I2C的时钟速率、I2C端口号、SCL和SDA引脚等参数。 3. 使用I2C接口向SHT30模块发送命令,获取温湿度数据。SHT30模块支持两种命令,一种是测量温湿度值的命令,另一种是读取已缓存的温湿度值的命令。 4. 解析SHT30模块返回的数据,获得温湿度值。 下面是一个ESP32驱动SHT30模块获取温湿度值的示例代码: ``` #include <Wire.h> #define SHT30_ADDRESS 0x44 void setup() { Wire.begin(); Serial.begin(9600); } void loop() { // 发送测量温湿度命令 Wire.beginTransmission(SHT30_ADDRESS); Wire.write(0x2C); Wire.write(0x06); Wire.endTransmission(); // 等待测量完成 delay(500); // 读取温湿度数据 Wire.requestFrom(SHT30_ADDRESS, 6); while (Wire.available() < 6); uint16_t rawTemp = Wire.read() << 8 | Wire.read(); uint16_t rawHumidity = Wire.read() << 8 | Wire.read(); Wire.read(); Wire.read(); // 解析温湿度数据 float temperature = -45.0 + 175.0 * (float)rawTemp / 65535.0; float humidity = 100.0 * (float)rawHumidity / 65535.0; // 输出温湿度数据 Serial.print("Temperature: "); Serial.print(temperature); Serial.print("°C, Humidity: "); Serial.print(humidity); Serial.println("%"); delay(5000); } ``` 在这个示例代码中,使用Wire库初始化I2C接口,设置SHT30模块的I2C地址为0x44。在loop()函数中,发送测量温湿度命令,等待测量完成后读取温湿度数据,并解析温湿度数据。最后输出温湿度数据并等待5秒后再次进行测量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值