耶耶耶耶耶 发表于 2022-6-21 16:51:48

ESP8266接入阿里云(Arduino)

下载Arduino

下载链接一:Software | Arduino
下载连接二:Arduino IDE下载(2月21日更新到1.8.19)-Arduino中文社区 - Powered by Discuz!
安装好之后安装esp8266的包
安装ESP8266包

安装方式一:


[*]在首选项开发板管理器里面添加

[*]http://arduino.esp8266.com/stable/package_esp8266com_index.json
[*]https://img-blog.csdnimg.cn/5b622a2299a84b7e90f8492457ad8334.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Yqq5Yqb5ZCR5YmN55qE5bCP5b6Q,size_20,color_FFFFFF,t_70,g_se,x_16
[*] https://img-blog.csdnimg.cn/d20822628b654d2087462ab859166ff0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Yqq5Yqb5ZCR5YmN55qE5bCP5b6Q,size_19,color_FFFFFF,t_70,g_se,x_16

[*] 然后在开发板管理器界面搜索esp8266,运气好的话可能就搜索到了,反正我是从来没搜到过,下面介绍第二种安装方式

[*]https://img-blog.csdnimg.cn/88faffd6a2c84617bcabb319a944cf09.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Yqq5Yqb5ZCR5YmN55qE5bCP5b6Q,size_20,color_FFFFFF,t_70,g_se,x_16
[*]https://img-blog.csdnimg.cn/2f833c40ee4b403baa578d78d3fb5c7f.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Yqq5Yqb5ZCR5YmN55qE5bCP5b6Q,size_19,color_FFFFFF,t_70,g_se,x_16

安装方式二:第3章 ESP8266-NodeMCU通过C/C++开发使用物联网 – 太极创客
从上述的网站中下载esp8266的插件,然后点击安装即可
安装MQTT包 

搜索pubsubclient,然后安装如下所示的包,版本自己选择
https://img-blog.csdnimg.cn/29047f74230746b48cf74470d7a30a0c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Yqq5Yqb5ZCR5YmN55qE5bCP5b6Q,size_19,color_FFFFFF,t_70,g_se,x_16
修改源文件(!!!) 

        这一步挺重要的,之前按照网上的教程装好上述的包之后还是一直连接不上阿里云,总是一直返回错误。后来找到一个教程说要修改源文件,然后就好了。不过我搞忘记在哪看到的了。具体步骤是:


[*]找到包安装的位置

[*]第一个可能的位置(默认位置):在C盘文档里面有个Arduino,然后点开里面有个libraries,安装的包都在这里面
[*]第二个可能的位置:就是可能自己选了一个目录,在首选项里面可以看到,然后包就会放在那个目录的libraries下

[*]修改PubSubClient的头文件

[*]路径PubSubClient->src

[*]https://img-blog.csdnimg.cn/5738566f11ad47adb4d0329a42e6fbc5.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Yqq5Yqb5ZCR5YmN55qE5bCP5b6Q,size_17,color_FFFFFF,t_70,g_se,x_16

[*] 打开并修改如下

[*]https://img-blog.csdnimg.cn/eeb4136e058d4029b1f1f196486bdf00.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Yqq5Yqb5ZCR5YmN55qE5bCP5b6Q,size_20,color_FFFFFF,t_70,g_se,x_16
[*]包大小可以尽可能大一点,阿里云官方给的mqtt消息长度小于256k即可

[*]https://img-blog.csdnimg.cn/74418282f9004f30a19cd5375cf135ad.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Yqq5Yqb5ZCR5YmN55qE5bCP5b6Q,size_20,color_FFFFFF,t_70,g_se,x_16



连接测试



[*]测试代码

[*] #include <ESP8266WiFi.h>
/* 依赖 PubSubClient 2.4.0 */
#include <PubSubClient.h>

/* 连接您的WIFI SSID和密码 */
#define WIFI_SSID         "WIFI名称"
#define WIFI_PASSWD       "WIFI密码"

/* 线上环境域名和端口号 */
#define MQTT_SERVER       "你的域名"
#define MQTT_PORT         1883//端口号
#define MQTT_USRNAME      "你的username"
#define CLIENT_ID         "你的clientId"
#define MQTT_PASSWD       "你的password"

//发布消息用的topic
#define PubTopic "你的topic"

unsigned long lastMs = 0;
WiFiClient espClient;
PubSubClientclient(espClient);

//收到消息后的回调函数
void callback(char *topic, byte *payload, unsigned int length)
{
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
payload = '\0';
Serial.println((char *)payload);

}

//wifi初始化
void wifiInit()
{
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASSWD);
while (WiFi.status() != WL_CONNECTED)
{
    delay(1000);
    Serial.println("WiFi not Connect");
}

Serial.println("Connected to AP");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());

Serial.print("espClient [");

client.setServer(MQTT_SERVER, MQTT_PORT);   /* 连接WiFi之后,连接MQTT服务器 */
client.setCallback(callback);
}

//发布一个字符串的消息
void pubMsg(char *msg)
{
    boolean d = client.publish(PubTopic, msg);
    if(d){
      Serial.println("publish success");
    }else{
      Serial.println("publish fail");
    }
}

//发布指定长度的字符消息
void pubMsgLen(uint8_t *msg,int len)
{
    boolean d = client.publish(PubTopic,msg,len);
    if(d){
      Serial.println("publish success");
    }else{
      Serial.println("publish fail");
    }
}

//连接到服务器
void mqttCheckConnect()
{
while (!client.connected())
{
    Serial.println("Connecting to MQTT Server ...");
    if (client.connect(CLIENT_ID, MQTT_USRNAME, MQTT_PASSWD))

    {

      Serial.println("MQTT Connected!");

    }
    else
    {
      Serial.print("MQTT Connect err:");
      Serial.println(client.state());
      delay(5000);
    }
}
}

void setup()
{
/* initialize serial for debugging */
    Serial.begin(115200); //开启串口
    Serial.println("Demo Start");
    wifiInit();//连接wifi
    unsigned char i=0;
    mqttCheckConnect();//连接阿里云
    pubMsg("hello aliyun!");
}

// the loop function runs over and over again forever
void loop()
{
client.loop();//保持客户端的连接
}

[*]代码烧录好之后,在云平台就可以查看发送来的消息

[*]https://img-blog.csdnimg.cn/1d14bdc437ae495896f1313bdef6f071.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Yqq5Yqb5ZCR5YmN55qE5bCP5b6Q,size_16,color_FFFFFF,t_70,g_se,x_16

[*]我们再从云平台发送一条消息过去测试

[*]https://img-blog.csdnimg.cn/e7a2ce30124646308d1e44a06500e1a1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Yqq5Yqb5ZCR5YmN55qE5bCP5b6Q,size_11,color_FFFFFF,t_70,g_se,x_16
[*]在串口调试界面可以看到
[*]https://img-blog.csdnimg.cn/65ff5fa16b434d248ea67bee589c4e85.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Yqq5Yqb5ZCR5YmN55qE5bCP5b6Q,size_20,color_FFFFFF,t_70,g_se,x_16

注意

   收到消息的速度与
 client.loop();//保持客户端的连接
这句有很大关系  放入延时中可能会让接收消息也延迟
        

来源:https://blog.csdn.net/xyx0610/article/details/123934145
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: ESP8266接入阿里云(Arduino)