目录

  1. ESP8266模组
  2. 安装 Arduino IDE 编码工具
  3. 添加ESP8266模组支持
  4. 配置阿里云
  5. 编码
  6. 接入阿里云进行实时温湿度上报

一、ESP8266模组

ESP8266介绍

ESP8266芯片是一款串口转无线模芯片,内部自带固件,用户操作简单,无需编写时序信号等。本次实验我用的是ESP8266-12F系列。这款芯片使用了3.3V的直流电源,体积小,功耗低,支持透传,丢包现象不严重,价格低。ESP8266还允许用户自己编写rom,不仅可以实现数据传输功能,还可控制建立wifi热点,或者作为wifi客户端连接到某指定路由器,同时还可编程控制所以的gpio。

在这里插入图片描述

  • 技小新ESP8266模组(已经停售,需要去咸鱼平台淘一个),自带温湿度监测器、OLED显示屏、LED灯
  • 芯片是采用的是:安信可ESP-12F WIFI芯片

二、安装 Arduino IDE 编码工具

Aruduino IDE官网:

Arduino是创客、业余爱好者和专业人士的平台,可轻松创建微控制器项目。只需要USB连接,这些设备可以通过简单易用的程序轻松编程。由于Arduino IDE提供了广泛的库,因此复杂的部件(如显示器、传感器)以及软件平台(如Adafruit IO)易于使用。

1662192743648.png

下载之后更换libiary依赖下载的目录:

点击首选项:

1662193058913.png

更换目录:

开发板管理器地址:http://arduino.esp8266.com/stable/package_esp8266com_index.json

1662193132165.png

三、添加ESP8266模组支持并下载相关依赖类库

1.添加ESP8266模组支持

在这里插入图片描述

ESP82662.6.3点击下载(我这是已经安装好的了)

1662193559976.png

2.添加相关依赖库

点击项目 -> 加载库 -> 管理库界面

1662193694428.png

1.PubSubClient

1662193787969.png

**注意:需要修改PubSubClient源文件!!!**将以下配置修改

首先找到你的依赖安装目录:

  • 第一个可能的位置(默认位置):在C盘文档里面有个Arduino,然后点开里面有个libraries,安装的包都在这里面

  • 第二个可能的位置:就是自己选的目录,在首选项中可以看到。

    1662206553637.png

    打开PubSubClient.h文件

    1662206640244.png

    将下图的配置修改

1662206336306.png

2.ArduinoJson

1662194042252.png

3.U8g2lib

1662196001622.png

4.DHT sensor library

1662196077452.png

四、配置阿里云

  1. 在主页搜索物联网

    1662206742370.png

  2. 选择生活物联网平台

    1662275425866.png

  3. 进入控制台(我已经开通了,如果没开通需要开通)

    1662275486588.png

  4. 在控制台中创建新的项目

    1662275551404.png

  5. 点击创建产品

    1662275638071.png

  6. 在项目中新增一个产品

    1662275733761.png

  7. 填好产品信息

    1662275966883.png

  8. 点击进入产品编辑

    1662276114082.png

  9. 自定义两个功能

    1662276346741.png

  10. 人机交互部分直接下一步

    1662276434075.png

  11. 设置芯片信息

    1662281159881.png

  12. 设置新增测试设备

    1662277144487.png
    1662281262001.png

  13. 直接在阿里云中打开物联网平台(不是生活物联平台)

    1662207733877.png

  14. 进入控制台中打开公共实例

    1662277365734.png

  15. 在这里可以看到我们在飞燕平台中新增的所有产品与设备

    1662277404535.png

  16. 点击查看设备的详细信息

    1662277522153.png

    1662277670823.png

五、编码

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include <U8g2lib.h>
#include "DHT.h"

#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif

#define sensor_Pin   0  
#define DHTPIN 5     
#define DHTTYPE DHT11   
DHT dht(DHTPIN, DHTTYPE);
float h;
float t;
long s;
// 连接WIFI和密码 
#define WIFI_SSID         "xxxx"
#define WIFI_PASSWD       "xxxx"


//对应着阿里云设备的三元组信息
#define PRODUCT_KEY       "xxxxxxx"
#define DEVICE_NAME       "xxxxxxx"
#define DEVICE_SECRET     "xxxxxxx"
//不需要改动
#define REGION_ID         "cn-shanghai"

//不需要改 
#define MQTT_SERVER       PRODUCT_KEY ".iot-as-mqtt." REGION_ID ".aliyuncs.com"
#define MQTT_PORT         1883
#define MQTT_USRNAME      DEVICE_NAME "&" PRODUCT_KEY

//对应阿里云的设备连接信息
#define CLIENT_ID     "xxxxxxx"
#define MQTT_PASSWD       "xxxxxxx"

#define ALINK_BODY_FORMAT         "{\"id\":\"ESP8266\",\"version\":\"1.0\",\"method\":\"thing.event.property.post\",\"params\":%s}"
#define ALINK_TOPIC_PROP_POST     "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/event/property/post"
  
unsigned long lastMs = 0;
WiFiClient espClient;
PubSubClient  client(espClient);

 // 所有没有复位显示板的单板
U8G2_SSD1306_128X64_NONAME_1_SW_I2C u8g2(U8G2_R0, /* clock=SCL*/ 14, /* data=SDA*/ 2, /* reset=*/ U8X8_PIN_NONE);  
 

float soil_data = 0;  


//连接wifi
void wifiInit()
{
    //设置WIFI为STA模式
    WiFi.mode(WIFI_STA);
    //开始尝试连接WIFI 参数是WIFI名称和密码
    WiFi.begin(WIFI_SSID, WIFI_PASSWD);
    
    //判断WIFI 状态 不等于连接成功嘛
    while (WiFi.status() != WL_CONNECTED)
    {
        //延迟一秒钟
        delay(1000);
        //打印WIFI未连接,直到WIFI连接成功跳出循环
        Serial.println("WiFi not Connect");
    }
    //跳出循环后连接MQTT服务器
    client.setServer(MQTT_SERVER, MQTT_PORT);   //连接MQTT服务器 
}

//mqtt连接
void mqttCheckConnect()
{
    //测试MQTT连接
    while (!client.connected()) //当没有连接上时
    {
        //进行重试,直到连接成功跳出本循环
        client.connect(CLIENT_ID, MQTT_USRNAME, MQTT_PASSWD);
    }
}

void mqttIntervalPost()
{
    soil_data = analogRead(sensor_Pin);   //模拟数据读取(A0脚输入的数据)385-1024
    soil_data -= 385;         //0-639
    soil_data /= 6.39;        //0.00-100.00,变为百分比
    soil_data = 100 - soil_data;         //修改为百分比越大湿度越大
    char param[64];
    char jsonBuf[256];
    read_data();
    sprintf(param, "{\"Temperature\":%f , \"Humidity\":%f}",t , h);
    //这里\"**"\要选择对应的标识符,否则数据发不过去。
    sprintf(jsonBuf, ALINK_BODY_FORMAT, param);
    Serial.println(jsonBuf);
    //判断是否发送成功
    boolean e = client.publish(ALINK_TOPIC_PROP_POST, jsonBuf);
}

void setup() 
{
    //初始化串口   串口波特率为115200
    Serial.begin(115200);
    
    //初始化WIFI
    wifiInit();
    
    //初始化DHT11温湿度计
    dht.begin();
    
    //初始化OLED
    u8g2.begin();
    
    //开启UTF-8编码方式(效果是可以在OLED屏幕上显示中文)
    u8g2.enableUTF8Print();
}

void read_data()
{
  float read_h = dht.readHumidity();//湿度
  float read_t = dht.readTemperature();//温度
  h = read_h;
  t = read_t;
  //在串口打印温度
  Serial.print("湿度:");
  Serial.print(h);
  //在串口打印湿度
  Serial.println("%");
  Serial.print("温度:");
  Serial.println(t);
  u8g2.setFont(u8g2_font_unifont_t_chinese2);  
  u8g2.setFontDirection(0);
  u8g2.firstPage();
    do {
      //设置OLED位置信息
      u8g2.setCursor(15, 35);
      //设置OLED位置显示数据
      u8g2.print("Temp:");
        
      
      u8g2.setCursor(55, 35);
      u8g2.print((float)t);   
      u8g2.setCursor(15,55);
      u8g2.print("Humi:");
      u8g2.setCursor(55, 55);
      u8g2.print((float)h);
      u8g2.setCursor(97, 35);    
      u8g2.print("%");
      u8g2.setCursor(97, 55);    
      u8g2.print("%RH");
    } while (u8g2.nextPage());

}

void loop()
{
   s=millis();
  delay(1000);
  read_data();
  Serial.println(millis()-s);
    if (millis() - lastMs >= 5000)
    {
        lastMs = millis();
        //在发送前先检查MQTT连接是否正常
        mqttCheckConnect(); 
        //定时发送数据
        mqttIntervalPost();
    }
    client.loop();
    //延时2秒钟
    delay(2000);
}

六、接入阿里云进行实时温湿度上报

先找到你要烧入程序的串口

1662278336720.png

然后编译程序

1662281313280.png

1662278066787.png

1662281436590.png

再去阿里云设备信息中可以查看相关的设备信息,以及点击物模型数据可以查看查看数据上报的信息。
1662278285656.png

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐