Arduino教程传送门🧭🏔🌋🛤🏞🏜
@[TOC](基于Arduino IDE平台开发ESP8266通过MQTT连接阿里云)
# 1. 简介
[ESP8266-NodeMCU的环境配置]()已经在一篇文章有所交代,接下让我们开启阿里云的MQTT物联网开发吧!😀😀😀
> ***设计目标***
> 1. 实现可以通过WIFI_DEBUG选择是使用==一键配网功能==还是使用代码中写入的无线账号密码连接;
> 2. 实现ESP8266通过==MQTT协议连接阿里云==;
> 3. 实现DHT11温湿度数据的获取,==串口发送调试==,并将数据上发阿里云平台,于平台控件中显示数据;
> 4. 实现阿里云平台对ESP8266板载==LED亮灭的控制==。
# 2. 实验准备
实验准备包括硬件和软件两部分。
## 2.1 硬件
你要实现用UNO+ESP 8266+阿里云+物联网你需要准备以下材料
1. ESP8266-NodeMCU单片机(外加安卓数据线);
2. DHT11温湿度传感器;
3. 三根母母杜邦线;
## 2.2 软件
1. Arduino IED 1.8.5以上(越高越好);
2. 必须添加PubSubClient、ArduinoJson、dht11库,有空大家可以仔细读里面的例程;
3. 浏览器登录[阿里云平台](https://www.aliyun.com/?spm=5176.19720258.J_8058803260.1.19852c4aSN6fO8)。
# 3. 实验步骤
首先搭建阿里云平台,记录对应创建的产品相关参数,以便后期程序端口接入开发。👩👩👩
## 3.1 搭建阿里云物联网平台
1. 登录[阿里云物联网平台](https://iot.aliyun.com/?spm=5176.19720258.J_8058803260.28.bb412c4aNZa8H1),选择控制台🎈
![在这里插入图片描述](https://img-blog.csdnimg.cn/a36debc94cbb4eb687ac912526a39bdc.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMjM0NVZPUg==,size_20,color_FFFFFF,t_70,g_se,x_16)
2. 来到[控制台首页](https://iot.console.aliyun.com/lk/summary/new),选择公共实例,点击创建产品🎈🎈
![在这里插入图片描述](https://img-blog.csdnimg.cn/e6f631f2c6d748e8b66dba7f81f0ce69.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMjM0NVZPUg==,size_20,color_FFFFFF,t_70,g_se,x_16)
3. 进入[创建产品界面](https://iot.console.aliyun.com/product),选择MQTT(旧版),然后添加产品,以此根据实际需求填写,点击确认完成产品创建🎈🎈🎈
![在这里插入图片描述](https://img-blog.csdnimg.cn/3abb3fd1d7fb407a9a55ddbcc8ea3c61.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMjM0NVZPUg==,size_20,color_FFFFFF,t_70,g_se,x_16)
4. 立即添加设备,完善相关信息,点击添加完成设备添加🎈🎈🎈🎈
![在这里插入图片描述](https://img-blog.csdnimg.cn/329e1032de0f4e909cf5628a35321ada.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMjM0NVZPUg==,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/bc23426680e844b6a4e6563959805109.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMjM0NVZPUg==,size_20,color_FFFFFF,t_70,g_se,x_16)
5. 这样就添加产品和设备都完成了,然后点击详情🎈🎈🎈🎈🎈
![在这里插入图片描述](https://img-blog.csdnimg.cn/fd55c04d83bc4e19a4391e5e7ce3a862.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMjM0NVZPUg==,size_20,color_FFFFFF,t_70,g_se,x_16)
6. 敲黑板,重头戏来了,添加APIKey,点击提交,接入onenet需要基础的三个参数,依次记录第一参数设备ID,第二个参数是APIKey
![在这里插入图片描述](https://img-blog.csdnimg.cn/3bd7794f84d54adaad2b9091f42a69b9.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMjM0NVZPUg==,size_20,color_FFFFFF,t_70,g_se,x_16)
大家复制自己的,用我的参数将直接导致实验失败!!!✨✨✨
```c
{
"ProductKey": "a1HAueJJyJr",
"DeviceName": "1234vor",
"DeviceSecret": "4ed78ea51675d07fee8491fd30636960"
}
```
7. 进行功能配置,编辑草稿,添加温度,湿度,电源三个属性。
![在这里插入图片描述](https://img-blog.csdnimg.cn/2ec9371e35b84cc199269ef29e3daae9.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMjM0NVZPUg==,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/3c03b9294dde45faae9f1a22ef207208.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMjM0NVZPUg==,size_20,color_FFFFFF,t_70,g_se,x_16)
## 3.2 搭建阿里云Web平台
1. 进入[IoT Studio开发](https://studio.iot.aliyun.com/?spm=5176.cniotstudio.0.0.7b4ebec69RGg4Z),选择应用开发,然后新建应用。
![在这里插入图片描述](https://img-blog.csdnimg.cn/0b75f75f87774aae977471d1389566b0.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMjM0NVZPUg==,size_20,color_FFFFFF,t_70,g_se,x_16)
2. 进入页面设置,选择合适页面布局,新建页面
![在这里插入图片描述](https://img-blog.csdnimg.cn/6b43f7da2d8a461a81c0eae2e7ec3512.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMjM0NVZPUg==,size_20,color_FFFFFF,t_70,g_se,x_16)
3. 点击组件,添加开关和仪表盘
![在这里插入图片描述](https://img-blog.csdnimg.cn/ad1ad00d5e48482a98c70a693b87dfc7.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMjM0NVZPUg==,size_20,color_FFFFFF,t_70,g_se,x_16)
灯交互设置
![在这里插入图片描述](https://img-blog.csdnimg.cn/8511195ce2f046649c73311fc0b97d4a.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMjM0NVZPUg==,size_20,color_FFFFFF,t_70,g_se,x_16)
温湿度仪表盘配置
![在这里插入图片描述](https://img-blog.csdnimg.cn/025c72cc880f46eb9feff2ce0fcf57d1.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMjM0NVZPUg==,size_20,color_FFFFFF,t_70,g_se,x_16)
最后保存发布,退出Web查看
![在这里插入图片描述](https://img-blog.csdnimg.cn/f267a8ff7e62473cba743f607144547f.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMjM0NVZPUg==,size_20,color_FFFFFF,t_70,g_se,x_16)
## 3.2 为ESP8266-NodeMCU烧入程序
1. **硬件连接**,ESP8266-NodeMCU硬件连接非常简单,只需将DHT11数据线接入D6引脚就好,具体接线如下
```c
ESP8266-NodeMCU -----> USBtoTLL
VCC -----> 3.3V
GND -----> GND
out -----> D6
```
![在这里插入图片描述](https://img-blog.csdnimg.cn/b19c9bb6ebe24cb7bae74c5802413767.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMjM0NVZPUg==,size_20,color_FFFFFF,t_70,g_se,x_16)
2. **修改PubSubClient.h**,找到PubSubClient.h文件,将#define MQTT_MAX_PACKET_SIZE后的数字改为1024,将#define MQTT_KEEPALIVE后的数字改为60
![在这里插入图片描述](https://img-blog.csdnimg.cn/829ab35fd70e4c85afc7dc911efb7598.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMjM0NVZPUg==,size_20,color_FFFFFF,t_70,g_se,x_16)
3. **程序设计**,新建,然后复制粘贴,保存
![在这里插入图片描述](https://img-blog.csdnimg.cn/88b43d045ba9457c9bec4025a1ce7234.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMjM0NVZPUg==,size_20,color_FFFFFF,t_70,g_se,x_16)
esp8266_mqtt代码如下,只需要修改对应的wifi和阿里云的五个参数,选择NodeMCU1.0,端口选对应的,其他默认,最后点击上传;;
// 引入 wifi 模块,并实例化,不同的芯片这里的依赖可能不同
#include <ESP8266WiFi.h>
static WiFiClient espClient;
// 引入阿里云 IoT SDK
#include <AliyunIoTSDK.h>
#include <dht11.h>
dht11 DHT11;
#define DHT11PIN D6
// 设置产品和设备的信息,从阿里云设备信息里查看
#define PRODUCT_KEY "a1HAueJJyJr"
#define DEVICE_NAME "1234vor"
#define DEVICE_SECRET "4ed78ea51675d07fee8491fd30636960"
#define REGION_ID "cn-shanghai"
// 设置 wifi 信息
#define WIFI_SSID "J09 502"
#define WIFI_PASSWD "qwertyuiop111"
void setup()
{
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
// 初始化 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);
// 发送一个数据到云平台,CurrentTemperature 是在设备产品中定义的物联网模型的 id
AliyunIoTSDK::send("CurrentTemperature", 26);
}
void loop()
{
int chk = DHT11.read(DHT11PIN);
AliyunIoTSDK::send("CurrentHumidity", (int)DHT11.humidity);
AliyunIoTSDK::send("CurrentTemperature", (int)DHT11.temperature);
Serial.print("Humidity (%): ");
Serial.println((float)DHT11.humidity, 2);
Serial.print("Temperature (oC): ");
Serial.println((float)DHT11.temperature, 2);
AliyunIoTSDK::loop();
}
// 初始化 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)
{
// 启动设备
Serial.println("开关=1了");
digitalWrite(LED_BUILTIN, HIGH); // 熄灯
}
else
{
// 启动设备
Serial.println("开关=0了");
digitalWrite(LED_BUILTIN, LOW); // 亮灯
}
}
然后进入[应用开发](https://studio.iot.aliyun.com/?spm=5176.cniotstudio.0.0.7b4ebec69RGg4Z),就可以看见温湿度的动态变化🎉🎉🎉
Arduino输出显示
![在这里插入图片描述](https://img-blog.csdnimg.cn/a529b82fada44212a2d976db9264e74a.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMjM0NVZPUg==,size_20,color_FFFFFF,t_70,g_se,x_16)
阿里云操作
![在这里插入图片描述](https://img-blog.csdnimg.cn/550d7197e0be4bb9a34d20773729e7df.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMjM0NVZPUg==,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/21812038229845da89df40eaf7c23492.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMjM0NVZPUg==,size_20,color_FFFFFF,t_70,g_se,x_16)
我自己在尝试其他的拓展,显示效果如下
# 4. 总结
- **==本文是一个难度中等的物联网项目,实现ESP8266一键配网功能、MQTT协议连接阿里云、DHT11温湿度数据的获取、数据上发阿里云平台、ESP8266板载LED亮灭的控制==** 😁😁😁
- 在以后的博文中我们将学会用ESP8266做常用的物联网开发,**从而实现对外部世界进行感知,充分认识这个有机与无机的环境,科学地合理地进行创作和发挥效益,然后为人类社会发展贡献一点微薄之力**。
- 参考链接:
第一个链接十分有用,主要参考代码,期待大家都可以实现!🎉🎉🎉
- [基于 arduino IDE使用AliyunIoTSDK库接入阿里云]()[
- [ESP8266接入阿里云物联网平台上传温湿度数据]()