(嵌入式开发)ESP8266使用Arduino连接阿里云进行实时温湿度感应
目录
- ESP8266模组
- 安装 Arduino IDE 编码工具
- 添加ESP8266模组支持
- 配置阿里云
- 编码
- 接入阿里云进行实时温湿度上报
一、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)易于使用。

下载之后更换libiary依赖下载的目录:
点击首选项:

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

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

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

2.添加相关依赖库
点击项目 -> 加载库 -> 管理库界面

1.PubSubClient

**注意:需要修改PubSubClient源文件!!!**将以下配置修改
首先找到你的依赖安装目录:
-
第一个可能的位置(默认位置):在C盘文档里面有个Arduino,然后点开里面有个libraries,安装的包都在这里面
-
第二个可能的位置:就是自己选的目录,在首选项中可以看到。

打开PubSubClient.h文件

将下图的配置修改

2.ArduinoJson

3.U8g2lib

4.DHT sensor library

四、配置阿里云
-
在主页搜索物联网

-
选择生活物联网平台

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

-
在控制台中创建新的项目

-
点击创建产品

-
在项目中新增一个产品

-
填好产品信息

-
点击进入产品编辑

-
自定义两个功能

-
人机交互部分直接下一步

-
设置芯片信息

-
设置新增测试设备


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

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

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

-
点击查看设备的详细信息


五、编码
#include
#include
#include
#include
#include "DHT.h"#ifdef U8X8_HAVE_HW_SPI
#include
#endif
#ifdef U8X8_HAVE_HW_I2C
#include
#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-1024soil_data -= 385; //0-639soil_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()
{//初始化串口 串口波特率为115200Serial.begin(115200);//初始化WIFIwifiInit();//初始化DHT11温湿度计dht.begin();//初始化OLEDu8g2.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);
}
六、接入阿里云进行实时温湿度上报
先找到你要烧入程序的串口

然后编译程序



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

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
