ESP8266接入阿里云(Arduino)

下载Arduino

下载链接一Software | Arduino

下载连接二Arduino IDE下载(2月21日更新到1.8.19)-Arduino中文社区 - Powered by Discuz!

安装好之后安装esp8266的包


安装ESP8266包

安装方式一:

安装方式二:第3章 ESP8266-NodeMCU通过C/C++开发使用物联网 – 太极创客

从上述的网站中下载esp8266的插件,然后点击安装即可


安装MQTT包 

搜索pubsubclient,然后安装如下所示的包,版本自己选择


修改源文件(!!!) 

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

  • 找到包安装的位置
    • 第一个可能的位置(默认位置):在C盘文档里面有个Arduino,然后点开里面有个libraries,安装的包都在这里面
    • 第二个可能的位置:就是可能自己选了一个目录,在首选项里面可以看到,然后包就会放在那个目录的libraries下
  • 修改PubSubClient的头文件
    • 路径PubSubClient->src
    •  打开并修改如下
      • 包大小可以尽可能大一点,阿里云官方给的mqtt消息长度小于256k即可

连接测试

  • 测试代码
    • #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;
      PubSubClient  client(espClient);
      
      //收到消息后的回调函数
      void callback(char *topic, byte *payload, unsigned int length)
      {
        Serial.print("Message arrived [");
        Serial.print(topic);
        Serial.print("] ");
        payload[length] = '\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();//保持客户端的连接
      }
  • 代码烧录好之后,在云平台就可以查看发送来的消息
  • 我们再从云平台发送一条消息过去测试
    • 在串口调试界面可以看到

注意

收到消息的速度与

 client.loop();//保持客户端的连接

这句有很大关系  放入延时中可能会让接收消息也延迟

      

欢迎关注小徐的个人微信公众号,感觉微信的文章排版不错,后续会继续分享一些新的学习记录~

  • 16
    点赞
  • 241
    收藏
    觉得还不错? 一键收藏
  • 25
    评论
以下是一个基于ESP8266连接到阿里云的简单C代码示例: ```c #include <ESP8266WiFi.h> #include <PubSubClient.h> // Wi-Fi网络参数 const char* ssid = "YourWiFiSSID"; const char* password = "YourWiFiPassword"; // 阿里云物联网平台参数 const char* server = "YourAliyunIoTServer"; const int port = 1883; const char* clientId = "YourClientId"; const char* username = "YourUsername"; const char* password = "YourPassword"; const char* topic = "YourTopic"; // Wi-Fi客户端 WiFiClient espClient; // MQTT客户端 PubSubClient client(espClient); // 连接Wi-Fi网络 void connectWiFi() { Serial.print("Connecting to Wi-Fi"); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Connected to Wi-Fi, IP address: "); Serial.println(WiFi.localIP()); } // 连接到阿里云物联网平台 void connectAliyunIoT() { client.setServer(server, port); while (!client.connected()) { Serial.print("Connecting to Aliyun IoT..."); if (client.connect(clientId, username, password)) { Serial.println("Connected to Aliyun IoT"); } else { Serial.print("Failed to connect to Aliyun IoT, rc="); Serial.print(client.state()); Serial.println("Retrying in 5 seconds..."); delay(5000); } } } void setup() { Serial.begin(9600); connectWiFi(); connectAliyunIoT(); } void loop() { // 模拟读取温湿度数据 float temperature = 25.0; float humidity = 50.0; // 将温湿度数据转换为JSON格式 String payload = "{\"temperature\":" + String(temperature) + ",\"humidity\":" + String(humidity) + "}"; // 发布温湿度数据到阿里云平台 client.publish(topic, payload.c_str()); // 等待5秒钟,然后继续循环 delay(5000); } ``` 在该代码中,你需要修改以下参数: - `YourWiFiSSID`和`YourWiFiPassword`:你的Wi-Fi网络名称和密码。 - `YourAliyunIoTServer`:阿里云物联网平台的服务器地址。 - `YourClientId`:你的设备ID。 - `YourUsername`和`YourPassword`:你在阿里云平台上注册设备时设置的用户名和密码。 - `YourTopic`:你要发布温湿度数据的主题。 确保你已经安装了ESP8266核心库(通过Arduino库管理器安装),并正确连接ESP8266模块到你的开发板上。然后,将代码上传到ESP8266开发板中,打开串口监视器,你应该能够看到连接到Wi-Fi网络和阿里云物联网平台的日志,并且每隔5秒钟发送一次温湿度数据到阿里云平台。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值