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即可显示已安装
提取码: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,必须与我们云端产品的功能定义标识符一致,此外标识符的数据类型也要与代码中的一致。
到此为止,本次配置就算完成了。
成功上传到阿里云,可以上传到自己建的云平台服务器上,更多操作等你来发挥。
本教程是我根据这个博主进行修改的,在此表示感谢