• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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 работает.
Но мой дурацкий характер не позволяет мне отказаться от попыток заставить работать и "второй" вариант.
 
Сверху Снизу