• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь Ругается на: PubSubClient client(wclient, mqtt_server, mqtt_port);

Sever44

Member
Добрый день.
Использую W7, Arduino 1.8.2 b Witty Cloud.
Пытался использовать скетчи для общения с CloudMQTT.
Например такие:
Нужна помощь - Библиотека PubSubClient
Esp8266 управление через интернет по протоколу MQTT
ESP8266 programming for Cloud MQTT using Pubsubclient- Part 3 - CodeKrypt
esp8266-pubsubclient-cloudmqtt/esp8266-mqtt-pubsubclient.ino at master · arjunsk/esp8266-pubsubclient-cloudmqtt · GitHub
помогите "подружить" ESP и arduino | Аппаратная платформа Arduino
Во всех присутствуют строки:
WiFiClient wclient;
PubSubClient client(wclient, mqtt_server, mqtt_port);
При проверке скетча ругается (библиотека PubSubClient версия 2.5 установлена).
Прошу помочь!
MQTT_2:26: error: no matching function for call to 'PubSubClient::pubSubClient(WiFiClient&, const char*&, const int&)'

PubSubClient client(wclient, mqtt_server, mqtt_port);

^

C:\Users\Rivex\Documents\Arduino\My_Project\MQTT\MQTT_2\MQTT_2.ino:26:52: note: candidates are:

In file included from C:\Users\Rivex\Documents\Arduino\My_Project\MQTT\MQTT_2\MQTT_2.ino:2:0:

C:\Users\Rivex\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:116:4: note: PubSubClient::pubSubClient(const char*, uint16_t, std::function<void(char*, unsigned char*, unsigned int)>, Client&, Stream&)

PubSubClient(const char*, uint16_t, MQTT_CALLBACK_SIGNATURE,Client& client, Stream&);

^

C:\Users\Rivex\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:116:4: note: candidate expects 5 arguments, 3 provided

C:\Users\Rivex\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:115:4: note: PubSubClient::pubSubClient(const char*, uint16_t, std::function<void(char*, unsigned char*, unsigned int)>, Client&)

PubSubClient(const char*, uint16_t, MQTT_CALLBACK_SIGNATURE,Client& client);

^

C:\Users\Rivex\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:115:4: note: candidate expects 4 arguments, 3 provided

C:\Users\Rivex\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:114:4: note: PubSubClient::pubSubClient(const char*, uint16_t, Client&, Stream&)

PubSubClient(const char*, uint16_t, Client& client, Stream&);

^

C:\Users\Rivex\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:114:4: note: candidate expects 4 arguments, 3 provided

C:\Users\Rivex\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:113:4: note: PubSubClient::pubSubClient(const char*, uint16_t, Client&)

PubSubClient(const char*, uint16_t, Client& client);

^

C:\Users\Rivex\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:113:4: note: no known conversion for argument 1 from 'WiFiClient' to 'const char*'

C:\Users\Rivex\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:112:4: note: PubSubClient::pubSubClient(uint8_t*, uint16_t, std::function<void(char*, unsigned char*, unsigned int)>, Client&, Stream&)

PubSubClient(uint8_t *, uint16_t, MQTT_CALLBACK_SIGNATURE,Client& client, Stream&);

^

C:\Users\Rivex\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:112:4: note: candidate expects 5 arguments, 3 provided

C:\Users\Rivex\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:111:4: note: PubSubClient::pubSubClient(uint8_t*, uint16_t, std::function<void(char*, unsigned char*, unsigned int)>, Client&)

PubSubClient(uint8_t *, uint16_t, MQTT_CALLBACK_SIGNATURE,Client& client);

^

C:\Users\Rivex\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:111:4: note: candidate expects 4 arguments, 3 provided

C:\Users\Rivex\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:110:4: note: PubSubClient::pubSubClient(uint8_t*, uint16_t, Client&, Stream&)

PubSubClient(uint8_t *, uint16_t, Client& client, Stream&);

^

C:\Users\Rivex\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:110:4: note: candidate expects 4 arguments, 3 provided

C:\Users\Rivex\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:109:4: note: PubSubClient::pubSubClient(uint8_t*, uint16_t, Client&)

PubSubClient(uint8_t *, uint16_t, Client& client);

^

C:\Users\Rivex\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:109:4: note: no known conversion for argument 1 from 'WiFiClient' to 'uint8_t* {aka unsigned char*}'

C:\Users\Rivex\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:108:4: note: PubSubClient::pubSubClient(IPAddress, uint16_t, std::function<void(char*, unsigned char*, unsigned int)>, Client&, Stream&)

PubSubClient(IPAddress, uint16_t, MQTT_CALLBACK_SIGNATURE,Client& client, Stream&);

^

C:\Users\Rivex\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:108:4: note: candidate expects 5 arguments, 3 provided

C:\Users\Rivex\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:107:4: note: PubSubClient::pubSubClient(IPAddress, uint16_t, std::function<void(char*, unsigned char*, unsigned int)>, Client&)

PubSubClient(IPAddress, uint16_t, MQTT_CALLBACK_SIGNATURE,Client& client);

^

C:\Users\Rivex\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:107:4: note: candidate expects 4 arguments, 3 provided

C:\Users\Rivex\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:106:4: note: PubSubClient::pubSubClient(IPAddress, uint16_t, Client&, Stream&)

PubSubClient(IPAddress, uint16_t, Client& client, Stream&);

^

C:\Users\Rivex\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:106:4: note: candidate expects 4 arguments, 3 provided

C:\Users\Rivex\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:105:4: note: PubSubClient::pubSubClient(IPAddress, uint16_t, Client&)

PubSubClient(IPAddress, uint16_t, Client& client);

^

C:\Users\Rivex\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:105:4: note: no known conversion for argument 1 from 'WiFiClient' to 'IPAddress'

C:\Users\Rivex\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:104:4: note: PubSubClient::pubSubClient(Client&)

PubSubClient(Client& client);

^

C:\Users\Rivex\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:104:4: note: candidate expects 1 argument, 3 provided

C:\Users\Rivex\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:103:4: note: PubSubClient::pubSubClient()

PubSubClient();

^

C:\Users\Rivex\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:103:4: note: candidate expects 0 arguments, 3 provided

C:\Users\Rivex\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:83:7: note: PubSubClient::pubSubClient(const PubSubClient&)

class PubSubClient {

^

C:\Users\Rivex\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:83:7: note: candidate expects 1 argument, 3 provided

C:\Users\Rivex\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:83:7: note: PubSubClient::pubSubClient(PubSubClient&&)

C:\Users\Rivex\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:83:7: note: candidate expects 1 argument, 3 provided

C:\Users\Rivex\Documents\Arduino\My_Project\MQTT\MQTT_2\MQTT_2.ino: In function 'void loop()':

MQTT_2:57: error: 'MQTT' has not been declared

if (client.connect(MQTT::Connect("arduinoClient1")

^

MQTT_2:60: error: 'class PubSubClient' has no member named 'set_callback'

client.set_callback(callback);

^

MQTT_2:60: error: 'callback' was not declared in this scope

client.set_callback(callback);

^

exit status 1
no matching function for call to 'PubSubClient::pubSubClient(WiFiClient&, const char*&, const int&)'
 

telobezumnoe

New member
@Sever44 дело в том, что библиотеки pubsub две, одна от Imroy, другая от knolleary, и они работают немного по разному, соответственно скетчи от одной не будут работать в другой. я лично пользуюсь библиотекой от imroy? eyf мне кажется удобнее для парсинга принимаемых данных
 

Sever44

Member
@Sever44 дело в том, что библиотеки pubsub две, одна от Imroy, другая от knolleary, и они работают немного по разному, соответственно скетчи от одной не будут работать в другой. я лично пользуюсь библиотекой от imroy? eyf мне кажется удобнее для парсинга принимаемых данных
Спасибо за ответ.
Как удалить имеющуюся и куда и как поставить другую?
 

Pavlo

New member
Спасибо за ответ.
Как удалить имеющуюся?
я удалял так:
- закройте Arduino IDE, в каталоге Sketchbook/libraries найдите каталог "PubSubClient" и удалите его.
Где находится каталог Sketchbook, можно подсмотреть в самой Arduino IDE, пункт меню: File -> Preferences

Возможно есть более элегантный способ, буду признателен, если кто-то подскажет.
 

Sever44

Member
Спасибо.
Библиотеку нашел. Если я правильно понял, это библиотека от Nick O'Leary.
С ней работают скетчи, в которых используются строки
PubSubClient client(espClient);
и
void callback(char* topic, byte* payload, unsigned int length) {

А если использовать скетчи со строками
PubSubClient client(wclient, mqtt_server, mqtt_port);
или
PubSubClient client(server, 1883);
и
void callback(const MQTT::publish& sub) {
то ругается на установленную библиотеку.

Получается, что надо ставить для таких скетчей библиотеку
от Imroy.
Знатоки, подтвердите, если я прав.
Заранее спасибо.
 

Pavlo

New member
...... Знатоки, подтвердите, если я прав.
Я не знаток, но вцелом логично.

А почему вы не перепишете свой код под библиотеку от Nick O'Leary ?
Ну или выставите свой скетч - его вам "подгонят" вод вашу библиотеку.

Я вот использую библиотеку от Nick O'Leary...
 

Sever44

Member
С библиотекой от Nick O'Leary работает.
Но мой дурацкий характер не позволяет мне отказаться от попыток заставить работать и "второй" вариант.
 
Сверху Снизу