arduino-libraries / ArduinoMqttClient

ArduinoMqttClient Library for Arduino
GNU Lesser General Public License v2.1
186 stars 73 forks source link

Does not compile on ESP8266 when calling connect() with port #106

Open ferdinand0815 opened 2 months ago

ferdinand0815 commented 2 months ago

The library fails to compile on ESP8266 when calling connect() with a port, as in mqttClient.connect(mqttBrokerIp, mqttPort).

error: call of overloaded 'connect(IPAddress&, uint16_t&)' is ambiguous

ArduinoMqttClient/src/MqttClient.h:82:15: note: candidate: 'virtual int MqttClient::connect(IPAddress, uint16_t)'
   82 |   virtual int connect(IPAddress ip, uint16_t port = 1883);
      |               ^~~~~~~
/home/ffelder/Arduino/libraries/ArduinoMqttClient/src/MqttClient.h:85:15: note: candidate: 'virtual int MqttClient::connect(const IPAddress&, uint16_t)'
   85 |   virtual int connect(const IPAddress& ip, uint16_t port) { return 0; }; /* ESP8266 core defines this pure virtual in Client.h */
      |               ^~~~~~~

This has actually already been fixed quite some time ago in this pull request https://github.com/arduino-libraries/ArduinoMqttClient/pull/33 by removing the ESP8266 specific code in MqttClient.h. I briefly tested the connect() using test.mosquitto.org, no idea about flush and stop.

pennam commented 2 months ago

which library version and core version are you using?

ferdinand0815 commented 2 months ago

ArduinoMqttClient version=0.1.8 ESP8266 is 3.1.2

The VS Code Arduino extension seems to use CLI 0.31

ferdinand0815 commented 2 months ago

This is only an issue when connecting to a host using its IPAddress, not via host name.

This offers a quick solution, convert the IP to a string .. not ideal but whatever.

uint16_t mqttPort = 1883;
IPAddress testIP = IPAddress(91, 121, 93, 94); // test.mosquitto.org

// works
mqttClient.connect(testIP.toString().c_str(), mqttPort);

// does not compile
mqttClient.connect(testIP, mqttPort);