1、先到PubSubClient.h文件中通过报错内容“-2“,找到MQTT_CONNECT_FAILED语句
2、再到PubSubClient.cpp文件中找到MQTT_CONNECT_FAILED的相关内容
3、通过else语句找到上层的if语句内容得知result最终返回值应该是0:
4、误打误撞,最终是换了个wifi解决了这个报错问题,所以可以追究else语句的内容:
5、查询了”this->ip”的定义,找到这个函数定义:
6、根据setServer()函数传入的IPAddress ip值,可以查询到:
7、到这里好像没什么头绪了,于是回去看看了arduino.ino引入的头文件:
8、于是到AliyunIoTSDK.h文件那找SetServer()函数相关的内容,看到了这条解析,据此可以推断,是wifi连接不稳定导致的!
9、这是换个wifi连接后串口输出的数据:
自此,解决掉”MQTT Connect err : -2 “的问题!
附上Arduino.ino代码:
#include <ESP8266WiFi.h>
static WiFiClient espClient;#include <AliyunIoTSDK.h>
#define PRODUCT_KEY "a1zdD6Vo6IT"//替换自己的PRODUCT_KEY
#define DEVICE_NAME "MY09s59vXPhFF76Z9nus"//替换自己的DEVICE_NAME
#define DEVICE_SECRET "mMrQ7qbp3KVCDVRDGXUfLvBL38dEDmRI"//替换自己的DEVICE_SECRET
#define REGION_ID "cn-shanghai"//默认cn-shanghai#define WIFI_SSID "space"//替换自己的WIFI
#define WIFI_PASSWD "12345678."//替换自己的WIFIconst int trigPin = 5; //D1
const int echoPin = 4; //D2int duration;
int distance;unsigned long lastMs = 0;
//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");
}int UltrasonicFirst()
{
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);duration = pulseIn(echoPin, HIGH);
distance= duration*0.034/2;
return distance;}
void setup()
{
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(115200);//连接到wifi
wifiInit(WIFI_SSID, WIFI_PASSWD);//初始化 iot,需传入 wifi 的 client,和设备产品信息
AliyunIoTSDK::begin(espClient, PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET, REGION_ID);}
void loop()
{
AliyunIoTSDK::loop();//必要函数if (millis() - lastMs >= 2000)//每2秒发送一次
{
lastMs = millis();//发送超声波检测数值到云平台
AliyunIoTSDK::send("Ultrasonic", UltrasonicFirst());
}
}