本帖最后由 12jnl 于 2018-5-17 15:36 编辑
开发平台:ESP8266。
使用的MQTT库:https://github.com/knolleary/pubsubclient。
MQTT库中有这样一个函数:
PubSubClient& setServer(const char * domain, uint16_t port);
用于设置MQTT服务器的域名和端口号。
使用前先声明下客户端
WiFiClient espClient; //声明WIFI客户端
PubSubClient MQclient(espClient); //声明MQTT客户端
然后调用过程中,有如下现象:
如果使用这种方式声明域名:const char* test_host = "broker.mqtt-dashboard.com";
然后调用:
MQclient.setServer( test_host , 1883 ); //设置MQTT服务器
MQclient.connect( ); //连接MQTT
即可成功连接MQTT服务器;
如果使用这种方式声明域名:const char test_host[] = "broker.mqtt-dashboard.com";
然后调用:
MQclient.setServer( test_host , 1883 ); //设置MQTT服务器
MQclient.connect( ); //连接MQTT
连接MQTT服务器会失败。
因为最终我计划将MQTT服务器地址存在EEPROM里,作为一个可修改的参数,所以最终不能用上面第一种声明方式。
最终需要使用类似下面的方法从EEPROM读取出来再进行设置。
char mqtt_host[32]={0};
DATA_EEPROM_ReadBuffer( 0x10 , (uint8_t*) mqtt_host , 32 );
MQclient.setServer( mqtt_host , 1883 ); //设置MQTT服务器
MQclient.connect( ); //连接MQTT
我考虑 const char *test_host是指针,const char test_host[ ] 是数组;
可能是这个原因导致,但是已经试过下面方法:
const char test_host0[] = "broker.mqtt-dashboard.com";
const char *test_host1 = test_host0;
MQclient.setServer( test_host1 , 1883 ); //设置MQTT服务器
依然连接失败。
所以到底这是为什么?
|