关于The Client identifier is correct UTF-8 but not allowed by the Server连接报错解决

错误原因

如果是使用阿里云平台进行mqtt的设备连接,那么在导入PubSubClient库的时候进行设备mqtt连接的时候可能会出现如下的错误:
The Client identifier is correct UTF-8 but not allowed by the Server
因为在库里面默认的mqtt包和keepalive,以及超时的时间都比较小,很可能会还没连上就报错了。

阿里云物联网平台要求 CONNECT指令中需包含Keep Alive(保活时间)。保活心跳时间取值范围为30至1200秒。如果心跳时间不在此区间内,物联网平台会拒绝连接。建议取值300秒以上。如果网络不稳定,将心跳时间设置高一些。

解决方法:

进入目录: C:\Users\admin\Documents\Arduino\libraries\PubSubClient\src
找到下面的.h文件对其进行参数修改

可修改参数如下:

// MQTT_VERSION : Pick the version
//#define MQTT_VERSION MQTT_VERSION_3_1
#ifndef MQTT_VERSION
#define MQTT_VERSION MQTT_VERSION_3_1_1
#endif// MQTT_MAX_PACKET_SIZE : Maximum packet size
#ifndef MQTT_MAX_PACKET_SIZE
#define MQTT_MAX_PACKET_SIZE 1024
#endif// MQTT_KEEPALIVE : keepAlive interval in Seconds
#ifndef MQTT_KEEPALIVE
#define MQTT_KEEPALIVE 300
#endif// MQTT_SOCKET_TIMEOUT: socket timeout interval in Seconds
#ifndef MQTT_SOCKET_TIMEOUT
#define MQTT_SOCKET_TIMEOUT 60
#endif

(附)阿里云设备连接

下面是可以通过修改三元组信息进行服务器连接的代码,可以直接通过Arduino进行烧录,仅做代码参考,具体连接教程可以看菜鸟哥的博客进行同步学习:https://blog.csdn.net/dpjcn1990/article/details/104561464

#include <ESP8266WiFi.h>
#include <ArduinoJson.h>
#include <PubSubClient.h>
#include <WiFiClientSecure.h>const char* WIFI_SSID     = "WiFi账号"; // WiFi账号
const char* WIFI_PASSWORD = "WiFi密码"; // WiFi密码/******************产品/设备配置(每个人需要根据自己的产品设备信息去动态更换)**********************/
#define PRODUCT_KEY "产品key"  //产品key  从产品详情获取
#define DEVICE_NAME "设备deviceName "  //设备deviceName  从设备详情获取
// 服务端相关
#define MQTT_SERVER   PRODUCT_KEY ".iot-as-mqtt.cn-shanghai.aliyuncs.com" //阿里云MQTT服务地址
#define MQTT_PORT     1883                                               //MQTT服务端口
// 校验三元组
#define MQTT_CLIENT_ID  DEVICE_NAME "|securemode=3,signmethod=hmacsha1|" //mqtt clientid
#define MQTT_USERNAME   DEVICE_NAME "&" PRODUCT_KEY                      //mqtt username
#define MQTT_PASSWORD   "password"       //mqtt password 通过生成工具获得
// 相关主题 自定义一个主题
#define TOPIC1 "/" PRODUCT_KEY "/" DEVICE_NAME "/user/setledstatus"
/*************************************************************************************************/void mqtt_callback (char* topic, byte* payload, unsigned int length);
void doWiFiTick();
void connect_wifi();
void connectToMqtt();
const __FlashStringHelper* connectErrorToString(int8_t code);WiFiClient client;
PubSubClient mqttclient(MQTT_SERVER, MQTT_PORT, &mqtt_callback, client);bool ICACHE_FLASH_ATTR connectHTTPS() {Serial.print("connecting to ");Serial.println(MQTT_SERVER);if (!client.connect(MQTT_SERVER, MQTT_PORT)) {Serial.println(F("connection failed"));return false;}else {Serial.println(F("connection succeed"));return true;}
}void setup() {// put your setup code here, to run once:delay(2000);Serial.begin(115200);pinMode(LED_BUILTIN, OUTPUT);Serial.println("");
}void loop() {// put your main code here, to run repeatedly:ESP.wdtFeed();doWiFiTick();if (WiFi.status() == WL_CONNECTED) {connectToMqtt();mqttclient.loop();}delay(2000);
}/*** 功能:连接到WiFi热点*/
void connect_wifi() {WiFi.disconnect();WiFi.mode(WIFI_STA);WiFi.begin(WIFI_SSID, WIFI_PASSWORD);while (WiFi.status() != WL_CONNECTED) {delay(500);Serial.print(".");}Serial.print(F("\nWiFi connected to "));Serial.println(WIFI_SSID);Serial.print(F("IP address: "));Serial.println(WiFi.localIP());
}/*** 功能:连接到Mqtt*/
void connectToMqtt() {if (mqttclient.connected()) {return;}Serial.print(F("Connecting to MQTT... "));int8_t ret;uint8_t retries = 3;while (!mqttclient.connect(MQTT_CLIENT_ID, MQTT_USERNAME,MQTT_PASSWORD)) { // connect will return true for connectedSerial.println(connectErrorToString(mqttclient.state()));Serial.println(F("Retrying MQTT connection in 5 seconds..."));mqttclient.disconnect();delay(5000);  // wait 5 secondsretries--;if (retries == 0) {// basically die and wait for WDT to reset mewhile (1);}yield();}Serial.println(F("Success!"));// 订阅主题mqttclient.subscribe(TOPIC1);}/*** 功能:连接路由心跳函数*/
void doWiFiTick() {static bool taskStarted = false;static bool startSTAFlag = false;static uint32_t lastWiFiCheckTick = 0;if (!startSTAFlag) {startSTAFlag = true;Serial.print("connect to ap:");Serial.println(WIFI_SSID);WiFi.disconnect();WiFi.mode(WIFI_STA);WiFi.begin(WIFI_SSID, WIFI_PASSWORD);Serial.printf("Heap size:%d\r\n", ESP.getFreeHeap());}//未连接1s重连if ( WiFi.status() != WL_CONNECTED ) {if (millis() - lastWiFiCheckTick > 1000) {lastWiFiCheckTick = millis();Serial.print(".");}}//连接成功建立else {if (taskStarted == false) {taskStarted = true;Serial.print("\r\nGet IP Address: ");Serial.println(WiFi.localIP());}}
}/*** 功能:MQTT回调* 参数:*   1. topic   主题*   2. payload 载体*   3. length  载体长度*/
void mqtt_callback (char* topic, byte* payload, unsigned int length) {byte *end = payload + length;for (byte *p = payload; p < end; ++p) {Serial.print(*((const char *)p));}Serial.println("");parseMqttResponse((char *)payload);
}/*** 解析mqtt数据*/
void parseMqttResponse(char* payload){Serial.println("start parseOneNetMqttResponse");StaticJsonBuffer<100> jsonBuffer;// StaticJsonBuffer 在栈区分配内存   它也可以被 DynamicJsonBuffer(内存在堆区分配) 代替// DynamicJsonBuffer  jsonBuffer;JsonObject& root = jsonBuffer.parseObject(payload);// Test if parsing succeeds.if (!root.success()) {Serial.println("parseObject() failed");return ;}String deviceName = root["dn"];int status = root["s"];if(strcmp(DEVICE_NAME,deviceName.c_str())== 0){if (status == 1) {digitalWrite(LED_BUILTIN, LOW);} else {digitalWrite(LED_BUILTIN, HIGH);}}
}/*** 功能:打印错误* 参数:*   1. code   错误码*/
const __FlashStringHelper* connectErrorToString(int8_t code) {switch (code) {case 1: return F("The Server does not support the level of the MQTT protocol requested");case 2: return F("The Client identifier is correct UTF-8 but not allowed by the Server");case 3: return F("The MQTT service is unavailable");case 4: return F("The data in the user name or password is malformed");case 5: return F("Not authorized to connect");case 6: return F("Exceeded reconnect rate limit. Please try again later.");case 7: return F("You have been banned from connecting. Please contact the MQTT server administrator for more details.");case -1: return F("Connection failed");case -2: return F("Failed to subscribe");case -3: return F("Connection Lost");case -4: return F("Connection Timeout");default: return F("Unknown error");}
}

阿里云Mqtt连接报错解决相关推荐

  1. 解决阿里云企业邮箱发送错误码提示

    阿里云企业邮箱错误代码提示原因及解决方法,阿小云分享阿里云企业邮箱使用过程中报错.错误原因及解决方法: 阿里云企业邮箱报错及解决方法 在使用企业邮箱时如发生相应的报错,可参见以下报错信息进行解决: 本 ...

  2. 记录一次阿里云服务器升级报错

    记录一次阿里云服务器升级报错  ---Email:1261065212@qq.com 系统: # cat /etc/redhat-release CentOS Linux release 7.4.17 ...

  3. 移远BC35-G配置网络连接阿里云MQTT发送数据

    移远BC35/BC26/BC28配置网络连接阿里云MQTT发送数据(一)精.防踩坑 硬件准备 接线部分 软件准备 烧录固件 QFlash 4.17烧录 阿里云准备 测试准备(AT指令) 连接阿里云 第 ...

  4. 【开源】手机APP通过IoT点亮LED灯(STM32+ESP8266+阿里云+MQTT+Android)

    (STM32+ESP8266+阿里云+MQTT+Android) 本项目利用Android Studio编写了连接阿里云和MQTT的APP,并在UI界面简单设计了标题,连接按钮,点灯按钮,灭灯按钮.如 ...

  5. 阿里云安装Mysql报错

    阿里云安装Mysql报错: The GPG keys listed for the "MySQL 5.7 Community Server" repository are alre ...

  6. pymysql模块操作数据库及连接报错解决方法

    pymysql模块操作数据库及连接报错解决方法 参考文章: (1)pymysql模块操作数据库及连接报错解决方法 (2)https://www.cnblogs.com/zgngg/p/10607859 ...

  7. 亿佰特串口服务器接入阿里云MQTT协议的软件配置教程

    在之前的文章中我们了解到虚拟串口软件作为TCP客户端来结合串口服务器使用,这一期我们来看一下串口服务器怎样接入阿里云物模型. 步骤详尽,一文读懂. 1.阿里云MQTT环境配置 ③点击"创建产 ...

  8. mqtt 发送消息过多_阿里云MQTT服务端注解式消息处理分发与同步调用实践小结

    一.前言 前段时间公司预研了设备app端与服务端的交互方案,出于多方面考量最终选用了阿里云的微服务队列MQTT方案,基于此方案,本人主要实践有: 1. 封装了RocketMQ实现MQTT订阅与发布的实 ...

  9. 做了一个阿里云MQTT单片机编程小工具

      做了一个阿里云MQTT单片机编程小工具,点击测试http://www.norra.cn:9091/   传感云是采集.传输.存储.可视化.接口.APP.微信一体的传感器与应用服务平台,支持多种模式 ...

  10. 【STM32 x ESP8266】连接阿里云 MQTT 服务器(报文连接)

    具体如何在阿里云创建一个 MQTT 服务器我就不写出来了,可以去百度一下(主要是我忘了,不好演示). 有关 MQTT 报文的一些标识在我前面的一篇文章中讲过,感兴趣的可以去看看(有关代码部分讲解的内容 ...

最新文章

  1. 如果只能通过IE写博客【Do we write blog just only with IE?】
  2. Liunx下MySQL常用命令
  3. day3-函数参数及调用
  4. Robots.txt和Robots META
  5. c++ 四种类型转换机制
  6. 启明智显分享| 2.4寸旋钮串口屏在健身器材上的应用
  7. python创建字符串数组_如何创建任意长度字符串的numpy数组?
  8. mysql select 使用_mysql select简单用法
  9. SAP Fiori Elements - how facet is loaded for my productive POC
  10. Logcat打印调试信息
  11. Win11系统如何刷新按钮
  12. JScript中的条件注释详解(转载自网络)
  13. mycat基础实验之主从配置读写分离和分表
  14. 在网页中插入背景音乐代码(html)
  15. 机器视觉需要掌握的知识
  16. 如何把控单元测试的粒度让你省时省力甚至一劳永逸建议一键收藏
  17. springboot集成es实现搜索功能
  18. [计算机网络]网络层IP协议 选路算法
  19. SAP ALV 导出 Excel 负号前置「实例」
  20. 交叉引用跳转不到后面_参考文献如何正确标注引用而不会变红?

热门文章

  1. 2021年中式烹调师(初级)考试报名及中式烹调师(初级)复审考试
  2. CA-Gateway 的配置和使用手册
  3. python对视频截帧的俩个方法
  4. Python小白第十九天
  5. Cocos2d-x游戏引擎开发[1]----HelloWorld
  6. TiD2018质量竞争力大会演讲征集启动啦!!
  7. 我国挪动互联网全球比赛占先机
  8. Windows下3080ti安装tensorflow-gpu版本
  9. 75英寸电视哪个牌子好性价比高 75英寸电视哪款好2023
  10. 赛迪顾问中国信息安全产品市场研究年度报告2010