ESP8266/ESP32 NodeMCU接入阿里云物联网平台

打印 上一主题 下一主题

主题 891|帖子 891|积分 2673

阿里云物联网平台公共实例是免费的,且不像然也等服务器一样无法区分不同用户发布的话题。本文接纳通例的pubsubclient库毗连阿里云。ESP8266/ESP32用pubsubclient接入阿里云平台截至写稿的现在,网上有的资源较少,现在我就来介绍一下利用方法
  1.登录阿里云官网https://www.aliyun.com/
  登录并搜索物联网平台,点击按钮开通公共实例,公共实例开通需要两分钟左右
              
           2.在等待期间可在arduinoIDE,安装PubSubClient库用于MQTT通讯。
  官网地址:https://pubsubclient.knolleary.net/
  GitHub:https://github.com/knolleary/pubsubclient/
  百度网盘下载: https://pan.baidu.com/s/12MHGbdfiOdwOGip5RMSSEQ 提取码: sizy
  下载完成后,通过arduinoIDE 项目->包罗库->添加.zip库找到安装包存放目录并添加
              
           3.此时阿里云物联网平台已开通,点击进入公共实例,并按以下步骤创建产物
              
           4.单击创建产物后,可设置如下参数,然后点击确定,创建完成
              
           5.点击左侧导航栏设备标题进入并创建立备,选择产物位刚刚创建的产物名称,确认添加
              
           6.在设备列表里点击检察,检察添加设备的参数,点击检察MQTT参数然后复制
  要在代码中修改的参数分别为第7步的8,58,59,60行
              
           
  7.左侧产物导航栏,进入topic类列表,点击自定义topic,这里的topic能在平台日记上查阅
  点击复制update那一行的话题,填入第7步的81行,并修改此中参数为自己的devicename
     
/+/${deviceName}/user/update

这里的话题因人而异,请去自己账号复制

    8.打开arduinoIDE将代码复制到IDE中,这里接纳了太极创客的代码,并为了接入阿里云做了修改
  太极创客MQTT教程:http://www.taichi-maker.com/homepage/esp8266-nodemcu-iot/iot-tuttorial/mqtt-tutorial/esp8266-publish-mqtt/
  1. #include <ESP8266WiFi.h>
  2. #include <PubSubClient.h>
  3. #include <Ticker.h>
  4. // 设置wifi接入信息(请根据您的WiFi信息进行修改)
  5. const char* ssid = "路由器名称";
  6. const char* password = "路由器密码";
  7. const char* mqttServer = "mqttHostUrl";  //*MQTT连接参数你的设备登陆网址*//
  8. // 如以上MQTT服务器无法正常连接,请前往以下页面寻找解决方案
  9. // http://www.taichi-maker.com/public-mqtt-broker/
  10. Ticker ticker;
  11. WiFiClient wifiClient;
  12. PubSubClient mqttClient(wifiClient);
  13. int count;    // Ticker计数用变量
  14. void setup() {
  15.   Serial.begin(9600);
  16.   
  17.   //设置ESP8266工作模式为无线终端模式
  18.   WiFi.mode(WIFI_STA);
  19.   
  20.   // 连接WiFi
  21.   connectWifi();
  22.   
  23.   // 设置MQTT服务器和端口号
  24.   mqttClient.setServer(mqttServer, 1883);
  25.   // 连接MQTT服务器
  26.   connectMQTTServer();
  27.   // Ticker定时对象
  28.   ticker.attach(1, tickerCount);  
  29. }
  30. void loop() {
  31.   if (mqttClient.connected()) { // 如果开发板成功连接服务器
  32.     // 每隔3秒钟发布一次信息
  33.     if (count >= 3){
  34.       pubMQTTmsg();
  35.       count = 0;
  36.     }   
  37.     // 保持心跳
  38.     mqttClient.loop();
  39.   } else {                  // 如果开发板未能成功连接服务器
  40.     connectMQTTServer();    // 则尝试连接服务器
  41.   }
  42. }
  43. void tickerCount(){
  44.   count++;
  45. }
  46. void connectMQTTServer(){
  47.   // 根据ESP8266的MAC地址生成客户端ID(避免与其它ESP8266的客户端ID重名)
  48.   String clientId = "clientId";   //*这里的字符串要与自己的设备MQTT参数相同*//
  49.   String user = "username";
  50.   String password = "password";
  51.   // 连接MQTT服务器,原代码仅传clientid,通过查阅pubsubclient.cpp可发现多个connect重载
  52.   if (mqttClient.connect(clientId.c_str(),user.c_str(),password.c_str())) {
  53.     Serial.println("MQTT Server Connected.");
  54.     Serial.println("Server Address: ");
  55.     Serial.println(mqttServer);
  56.     Serial.println("ClientId:");
  57.     Serial.println(clientId);
  58.   } else {
  59.     Serial.print("MQTT Server Connect Failed. Client State:");
  60.     Serial.println(mqttClient.state());
  61.     delay(3000);
  62.   }   
  63. }
  64. // 发布信息
  65. void pubMQTTmsg(){
  66.   static int value; // 客户端发布信息用数字
  67.   // 确保不同用户进行MQTT信息发布时,ESP8266客户端名称各不相同,
  68.   String topicString = "topic话题名称";//更改自己的devicename
  69.   char publishTopic[topicString.length() + 1];  
  70.   strcpy(publishTopic, topicString.c_str());
  71.   // 建立发布信息。信息内容以Hello World为起始,后面添加发布次数。
  72.   String messageString = "Hello World " + String(value++);
  73.   char publishMsg[messageString.length() + 1];   
  74.   strcpy(publishMsg, messageString.c_str());
  75.   
  76.   // 实现ESP8266向主题发布信息
  77.   if(mqttClient.publish(publishTopic, publishMsg)){
  78.     Serial.println("Publish Topic:");Serial.println(publishTopic);
  79.     Serial.println("Publish message:");Serial.println(publishMsg);   
  80.   } else {
  81.     Serial.println("Message Publish Failed.");
  82.   }
  83. }
  84. // ESP8266连接wifi
  85. void connectWifi(){
  86.   WiFi.begin(ssid, password);
  87.   //等待WiFi连接,成功连接后输出成功信息
  88.   while (WiFi.status() != WL_CONNECTED) {
  89.     delay(1000);
  90.     Serial.print(".");
  91.   }
  92.   Serial.println("");
  93.   Serial.println("WiFi Connected!");  
  94.   Serial.println("");
  95. }
复制代码
9.下载置esp8266/esp32开辟板,打开串口助手,有些同学会发现“MQTT Server Connect Failed. Client State:2”的错误
  参考大神的方法:https://ieeee.blog.csdn.net/article/details/118441704
  1.将链接的路由器信号从5GHz设置成2.4GHz
  
2.修改库pubsubclient.h头文件的参数

  
这里接纳了第二种方法。

  
a.找到arduinoIDE目录下的libraries文件夹默认位置在 /我的文档/arduino/pubsubclient-版本号/src打开并求改pubsubclient.h头文件,找到MQTT_MAX_PACKET_SIZE,将256修改为1024,再找到MQTT_KEEPALIVE,将15修改为60

              
           
b.再次下载程序至开辟板,题目解决并在串口助手中输出一下信息,此时开辟板已经毗连上了阿里物联网平台,并定时向服务器中的topic发布hello world

              
           10.物联网平台打开设备,并检察日记,发现话题中已经有消息输入了
              
                       
           总结:至此,esp8266 nodemcu接入阿里物联网平台方法介绍完毕,接入的关键是阿里云物联网平台的利用以及对arduino库函数的修改。本文接纳的参考方法均已给出网址,请大家自行参阅。
  

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

饭宝

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表