esp8266读取dht11温湿度并上传到阿里云

2021年7月25日 23:32:45
这是一篇来自东北大学准大二工业智能专业学生的文章,今年七月十三日的小学期我们有一个基于esp8266的物联网开发实验,这个实验对于我们来说就是架空的,我们都没有任何基础。https://mp.weixin.qq.com/s?__biz=MzUyMDE1NDg3Mg==&mid=100001983&idx=1&sn=37d93d8a63c54dcb52db68d8487f820d&chksm=79eff3284e987a3e7fb0283732d35d8172f98c5759d07f33d5727ee42d7a2e2e32412189d115&mpshare=1&scene=23&srcid=0709Ps7xf9cHvEh9E4kyB5CQ&sharer_sharetime=1625842130094&sharer_shareid=4d9828b6c08a1decb29477aec3362738#rd
能给我们参考的只有这个微信文章,我们实验的时候做了远程控制LED灯的开关的项目,但是读取温湿度的项目就完不成了。小学期结束之后,我在网上买来了esp8266开发板,自己研究。先是看了太极创客的esp8266的教学视频,但是还是感觉没有任何进展。今晚在搜刮全网文章终于实现用0.96寸的OLED屏幕显示读取到的温度和湿度之后发了一条说说,于是有个大佬指导说发包就行了,实际上就是加一句AliyunIoTSDK::send(“temperature”,t);
下面附上arduino代码


#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>

//设置用于连接温湿度传感器的引脚
#define DHTPIN 13  //根据硬件连接确定引脚编号(注意,这里我连接的是D7,也就是GPIO13)

#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
float h,t;


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

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

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

// 设置 wifi 信息
#define WIFI_SSID "USTC"//(这里面连你自己家的WiFi,注意要是2.4G频段的,5G的不行)
#define WIFI_PASSWD "20011013a"//(你自己家的WiFi密码)

void setup()
{
    Serial.begin(115200);

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

    // 初始化 iot,需传入 wifi 的 client,和设备产品信息
    AliyunIoTSDK::begin(espClient, PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET, REGION_ID);

    // 绑定一个设备属性回调,当远程修改此属性,会触发 powerCallback
    // PowerSwitch 是在设备产品中定义的物联网模型的 id
    AliyunIoTSDK::bindData("PowerSwitch", powerCallback);

    // 发送一个数据到云平台,LightLuminance 是在设备产品中定义的物联网模型的 id
    AliyunIoTSDK::send("LightLuminance", 100);

     
 
  pinMode(DHTPIN,INPUT);
  dht.begin();
 
}

void loop()
{
    
  AliyunIoTSDK::loop();  
  AliyunIoTSDK::send("Temperature",t);
  AliyunIoTSDK::send("Humidity",h);

  h = dht.readHumidity();
  t = dht.readTemperature();                
  Serial.print("Temperature:");                      
  Serial.println(t);                                     
  delay(1000);
  Serial.print("Humidity:");                            
  Serial.print(h);                                    
  Serial.println("%");                                 
  delay(1000);
  

}

// 初始化 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)
    {
        // 启动设备
    } 
}

如果你想要同时用阿里云和OLED,就用这个代码

#include 
#include 
#include 
#include 

#ifdef U8X8_HAVE_HW_SPI
#include 
#endif
#ifdef U8X8_HAVE_HW_I2C
#include 
#endif

#include 
#include 
#include 

U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ D1, /* data=*/ D2, /* reset=*/ U8X8_PIN_NONE);

//设置用于连接温湿度传感器的引脚
#define DHTPIN 13  //根据硬件连接确定引脚编号

#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
float h,t;


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

// 引入阿里云 IoT SDK
#include 

// 设置产品和设备的信息,从阿里云设备信息里查看
#define PRODUCT_KEY "a1d6NurnU3l"
#define DEVICE_NAME "1234"
#define DEVICE_SECRET "44d367e987e17ecbc82bb61a1ea190f2"
#define REGION_ID "cn-shanghai"

// 设置 wifi 信息
#define WIFI_SSID "USTC"
#define WIFI_PASSWD "20011013a"

void setup()
{
    Serial.begin(115200);

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

    // 初始化 iot,需传入 wifi 的 client,和设备产品信息
    AliyunIoTSDK::begin(espClient, PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET, REGION_ID);

    // 绑定一个设备属性回调,当远程修改此属性,会触发 powerCallback
    // PowerSwitch 是在设备产品中定义的物联网模型的 id
    AliyunIoTSDK::bindData("PowerSwitch", powerCallback);

    // 发送一个数据到云平台,LightLuminance 是在设备产品中定义的物联网模型的 id
    AliyunIoTSDK::send("LightLuminance", 100);

     
 
  pinMode(DHTPIN,INPUT);
  dht.begin();
   u8g2.begin();
  u8g2.enableUTF8Print();
  dht.begin();
}

void loop()
{
      float h = dht.readHumidity();
  float t = dht.readTemperature();
  u8g2.clearBuffer();
  u8g2.setFont(u8g2_font_unifont_t_chinese2);
  u8g2.setFontDirection(0);
  u8g2.setCursor(0, 15);
  u8g2.print("Humidity:"); 
  u8g2.setCursor(80, 15);
  u8g2.print(h);  //https://blog.zeruns.tech
  u8g2.setCursor(120, 15);
  u8g2.print("%");
  u8g2.setCursor(0, 40);
  u8g2.print("Temperature:"); 
  u8g2.setCursor(0, 55); 
  u8g2.print(t);
  u8g2.setCursor(40, 55);
  u8g2.print("C");
  u8g2.sendBuffer(); 
  delay(1000);
  AliyunIoTSDK::loop();  
  AliyunIoTSDK::send("Temperature",t);
  AliyunIoTSDK::send("Humidity",h);

  h = dht.readHumidity();
  t = dht.readTemperature();                
  Serial.print("Temperature:");                      
  Serial.println(t);                                     
  delay(1000);
  Serial.print("Humidity:");                            
  Serial.print(h);                                    
  Serial.println("%");                                 
  delay(1000);
  

}

// 初始化 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)
    {
        // 启动设备
    } 
}

最后附上图片
esp8266读取dht11温湿度并上传到阿里云_第1张图片
esp8266读取dht11温湿度并上传到阿里云_第2张图片
esp8266读取dht11温湿度并上传到阿里云_第3张图片
这里要感谢@01001000,是他一语点醒梦中人

你可能感兴趣的:(物联网)