Mqtt does not name a type ошибка

I am continuously getting error message
‘mqtt’ does not name a type

I am using Arduino 1.8.1, i tried using following libraries
#include <ESP8266WiFi.h>
#include «Adafruit_MQTT.h»
#include «Adafruit_MQTT_Client.h»
#include <ESP8266Ping.h>
#include <PubSubClient.h>

Still facing the issue, kindly help
Error Message:

Arduino: 1.8.10 (Windows 10), Board: «NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Disabled, All SSL ciphers (most compatible), 4M (no SPIFFS), v2 Lower Memory, Disabled, None, Only Sketch, 115200»

t4:120:3: error: ‘mqtt’ does not name a type

mqtt.subscribe(&R1);

^

t4:121:3: error: ‘mqtt’ does not name a type

mqtt.subscribe(&R2);

^

t4:122:3: error: ‘mqtt’ does not name a type

mqtt.subscribe(&R3);

^

t4:123:3: error: ‘mqtt’ does not name a type

mqtt.subscribe(&R4);

^

t4:124:3: error: ‘mqtt’ does not name a type

mqtt.subscribe(&R5);

^

t4:125:3: error: ‘mqtt’ does not name a type

mqtt.subscribe(&R6);

^

t4:126:3: error: ‘mqtt’ does not name a type

mqtt.subscribe(&R7);

^

t4:127:3: error: ‘mqtt’ does not name a type

mqtt.subscribe(&R8);

^

t4:129:1: error: expected declaration before ‘}’ token

}

^

Multiple libraries were found for «ESP8266WiFi.h»
Used: C:UsersprjadAppDataLocalArduino15packagesesp8266hardwareesp82662.5.2librariesESP8266WiFi
Multiple libraries were found for «Adafruit_MQTT.h»
Used: C:UsersprjadDocumentsArduinolibrariesAdafruit_MQTT_Library
Not used: C:UsersprjadDocumentsArduinolibrariesAdafruit_MQTT_Library-master
Multiple libraries were found for «ESP8266Ping.h»
Used: C:UsersprjadDocumentsArduinolibrariesESP8266Ping-master
Multiple libraries were found for «PubSubClient.h»
Used: C:UsersprjadDocumentsArduinolibrariespubsubclient-master
Not used: C:UsersprjadDocumentsArduinolibrariesPubSubClient-2.7.0
exit status 1
‘mqtt’ does not name a type

This report would have more information with
«Show verbose output during compilation»
option enabled in File -> Preferences.

Code M using

/***************************************************
Adafruit MQTT Library ESP8266 Example
Must use ESP8266 Arduino from:
https://github.com/esp8266/Arduino
Works great with Adafruit’s Huzzah ESP board & Feather
—-> https://www.adafruit.com/product/2471
—-> https://www.adafruit.com/products/2821
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
Written by Tony DiCola for Adafruit Industries.
MIT license, all text above must be included in any redistribution
****************************************************/
#include <ESP8266WiFi.h>
#include «Adafruit_MQTT.h»
#include «Adafruit_MQTT_Client.h»
#include <ESP8266Ping.h>
#include <PubSubClient.h>

/************************* WiFi Access Point *********************************/

#define WLAN_SSID «xxxxxxxxx»
#define WLAN_PASS «xxxxxxxxx»

#define REMOTE_HOST «www.google.com»

/************************* Adafruit.io Setup *********************************/

#define AIO_SERVER «io.adafruit.com»
#define AIO_SERVERPORT 1883 // use 8883 for SSL
#define AIO_USERNAME «xxxxxx»
#define AIO_KEY «xxxxxxx»

/************ Global State (you don’t need to change this!) ******************/

// Create an ESP8266 WiFiClient class to connect to the MQTT server.
WiFiClient client;
// or… use WiFiFlientSecure for SSL
//WiFiClientSecure client;

// Setup the MQTT client class by passing in the WiFi client and MQTT server and login details.
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);

/****************************** Feeds ***************************************/

// Setup a feed called ‘photocell’ for publishing.
// Notice MQTT paths for AIO follow the form: /feeds/
//Adafruit_MQTT_Publish photocell = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME «/feeds/photocell»);

// Setup a feed called ‘onoff’ for subscribing to changes.

Adafruit_MQTT_Subscribe R1 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME «/feeds/R1»);
Adafruit_MQTT_Subscribe R2 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME «/feeds/R2»);
Adafruit_MQTT_Subscribe R3 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME «/feeds/R3»);
Adafruit_MQTT_Subscribe R4 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME «/feeds/R4»);
Adafruit_MQTT_Subscribe R5 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME «/feeds/R5»);
Adafruit_MQTT_Subscribe R6 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME «/feeds/R6»);
Adafruit_MQTT_Subscribe R7 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME «/feeds/R7»);
Adafruit_MQTT_Subscribe R8 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME «/feeds/R8»);

/*************************** Sketch Code ************************************/

// Bug workaround for Arduino 1.6.6, it seems to need a function declaration
// for some reason (only affects ESP8266, likely an arduino-builder bug).
void MQTT_connect();

void setup() {
Serial.begin(115200);
delay(10);
pinMode(5, OUTPUT);
pinMode(4, OUTPUT);
pinMode(0, OUTPUT);
pinMode(2, OUTPUT);
pinMode(14, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
pinMode(15, OUTPUT);

Serial.println(F(«Adafruit MQTT demo»));

// Connect to WiFi access point.

Serial.begin(115200);
delay(10);

// We start by connecting to a WiFi network

Serial.println();
Serial.println(«Connecting to WiFi»);

WiFi.setSleepMode(WIFI_NONE_SLEEP);
WiFi.begin(WLAN_SSID, WLAN_PASS);

while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(«.»);
}

Serial.println();
Serial.print(«WiFi connected with ip «);
Serial.println(WiFi.localIP());

Serial.print(«Pinging host «);
Serial.println(REMOTE_HOST);

if(Ping.ping(REMOTE_HOST)) {
Serial.println(«Success!!»);
} else {
Serial.println(«Error :(«);
}
}

// Setup MQTT subscription for onoff feed.
mqtt.subscribe(&R1);
mqtt.subscribe(&R2);
mqtt.subscribe(&R3);
mqtt.subscribe(&R4);
mqtt.subscribe(&R5);
mqtt.subscribe(&R6);
mqtt.subscribe(&R7);
mqtt.subscribe(&R8);

}

uint32_t x=0;

void loop() {
// Ensure the connection to the MQTT server is alive (this will make the first
// connection and automatically reconnect when disconnected). See the MQTT_connect
// function definition further below.
MQTT_connect();

// this is our ‘wait for incoming subscription packets’ busy subloop
// try to spend your time here

Adafruit_MQTT_Subscribe *subscription;
while ((subscription = mqtt.readSubscription(5000))) {
if (subscription == &R1) {
Serial.print(F(«Got_R1: «));
Serial.println((char *)R1.lastread);
int num = atoi((char *)R1.lastread);
digitalWrite (5,num);
}

 if (subscription == &R2) {
  Serial.print(F("Got_R2: "));
  Serial.println((char *)R2.lastread);
  int num = atoi((char *)R2.lastread);
  digitalWrite (4,num);
}

   if (subscription == &R3) {
  Serial.print(F("Got_R3: "));
  Serial.println((char *)R3.lastread);
  int num = atoi((char *)R3.lastread);
  digitalWrite (0,num);
}

 if (subscription == &R4) {
  Serial.print(F("Got_R4: "));
  Serial.println((char *)R4.lastread);
  int num = atoi((char *)R4.lastread);
  digitalWrite (2,num);
}

   if (subscription == &R5) {
  Serial.print(F("Got_R5: "));
  Serial.println((char *)R5.lastread);
  int num = atoi((char *)R5.lastread);
  digitalWrite (14,num);
}

   if (subscription == &R6) {
  Serial.print(F("Got_R6: "));
  Serial.println((char *)R6.lastread);
  int num = atoi((char *)R6.lastread);
  digitalWrite (12,num);
}

   if (subscription == &R7) {
  Serial.print(F("Got_R7: "));
  Serial.println((char *)R7.lastread);
  int num = atoi((char *)R7.lastread);
  digitalWrite (13,num);
}

   if (subscription == &R8) {
  Serial.print(F("Got_R8: "));
  Serial.println((char *)R8.lastread);
  int num = atoi((char *)R8.lastread);
  digitalWrite (15,num);
 }

}

// Now we can publish stuff! — If you want publishing use the following code
// Serial.print(F(«nSending photocell val «));
// Serial.print(x);
//Serial.print(«…»);
// if (! photocell.publish(x++)) {
// Serial.println(F(«Failed»));
// } else {
// Serial.println(F(«OK!»));
// }

// ping the server to keep the mqtt connection alive
// NOT required if you are publishing once every KEEPALIVE seconds
/*
if(! mqtt.ping()) {
mqtt.disconnect();
}
*/
}

// Function to connect and reconnect as necessary to the MQTT server.
// Should be called in the loop function and it will take care if connecting.
void MQTT_connect() {
int8_t retries=3;

// Stop if already connected.
if (mqtt.connected()) {
return;
}

Serial.print(«Connecting to MQTT… «);

uint8_t retries = 3;
while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected
Serial.println(mqtt.connectErrorString(ret));
Serial.println(«Retrying MQTT connection in 5 seconds…»);
mqtt.disconnect();
delay(5000); // wait 5 seconds
retries—;
if (retries == 0) {
// basically die and wait for WDT to reset me
while (1);
}
}
Serial.println(«MQTT Connected!»);
}

Arduino Forum

Loading

PlatformIO Community

Loading

Arduino.ru

Загрузка…

I read about this issue (seems quite common) for hours without finding any applicable solution to my situation. I understand that there might be a problem related to the included files and libraries, but I’m not actually able to find what’s wrong.

It’s an Arduino script that uses the MQTT client library. It works beautifully with the old PubSubClient.h lib.

Now I wanted to update the lib with a recent one. The function definitions are changed so I made the changes in the sketch and switched the lib in the Arduino/library directory, then restarted the Arduino IDE. I get lot of «error: ‘argument’ does not name a type» and I really don’t know what to fix.

Here you can find the .h and .cpp files organization to understand what’s happening.

//device.ino file

#include "device.h"

//device.h file

#ifndef DEVICE_H
#define DEVICE_H

#include <WiFiClient.h>
#include <WiFiClientSecure.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <ESP8266HTTPUpdateServer.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include <jsmn.h>
#include <Arduino.h>
#include <pgmspace.h>
#include "mqtt.h"

#endif

mqtt.h file

#ifndef MQTT_H
#define MQTT_H

#include "device.h"

#endif

mqtt.cpp file

#include "mqtt.h"

WiFiClient wifi_client;
PubSubClient mqtt_client(wifi_client);
mqtt_client.setServer(mqtt_server, MQTT_BROKER_PORT);
mqtt_client.setCallback(mqtt_callback);

Finally the errors the compiler throws out:
mqtt.cpp:19: error:
‘mqtt_client’ does not name a type

     mqtt_client.setServer(mqtt_server, MQTT_BROKER_PORT);

     ^

    mqtt.cpp:20: error: 'mqtt_client' does not name a type

     mqtt_client.setCallback(mqtt_callback);

     ^

    sketchmqtt.cpp: In function 'void mqtt_publish_mex(String, String, bool)':

    mqtt.cpp:27: error: no matching function for call to 'PubSubClient::publish(String&, String&, bool&)'

             if (mqtt_client.publish(topic, jmex, retained)) {

                                                          ^

    sketchmqtt.cpp:27:54: note: candidates are:

    In file included from sketchWalvola.h:25:0,

                     from sketchmqtt.h:4,

                     from sketchmqtt.cpp:1:

    C:UsersFabrizio & DarioDocumentsArduinolibrariespubsubclientsrc/PubSubClient.h:130:12: note: boolean PubSubClient::publish(const char*, const char*)

        boolean publish(const char* topic, const char* payload);

                ^

    C:UsersFabrizio & DarioDocumentsArduinolibrariespubsubclientsrc/PubSubClient.h:130:12: note:   candidate expects 2 arguments, 3 provided

    C:UsersFabrizio & DarioDocumentsArduinolibrariespubsubclientsrc/PubSubClient.h:131:12: note: boolean PubSubClient::publish(const char*, const char*, boolean)

        boolean publish(const char* topic, const char* payload, boolean retained);

                ^

    C:UsersFabrizio & DarioDocumentsArduinolibrariespubsubclientsrc/PubSubClient.h:131:12: note:   no known conversion for argument 1 from 'String' to 'const char*'

    C:UsersFabrizio & DarioDocumentsArduinolibrariespubsubclientsrc/PubSubClient.h:132:12: note: boolean PubSubClient::publish(const char*, const uint8_t*, unsigned int)

        boolean publish(const char* topic, const uint8_t * payload, unsigned int plength);

                ^

    C:UsersFabrizio & DarioDocumentsArduinolibrariespubsubclientsrc/PubSubClient.h:132:12: note:   no known conversion for argument 1 from 'String' to 'const char*'

    C:UsersFabrizio & DarioDocumentsArduinolibrariespubsubclientsrc/PubSubClient.h:133:12: note: boolean PubSubClient::publish(const char*, const uint8_t*, unsigned int, boolean)

        boolean publish(const char* topic, const uint8_t * payload, unsigned int plength, boolean retained);

                ^

    C:UsersFabrizio & DarioDocumentsArduinolibrariespubsubclientsrc/PubSubClient.h:133:12: note:   candidate expects 4 arguments, 3 provided

    sketchmqtt.cpp: In function 'void mqtt_log(String)':

    mqtt.cpp:347: error: no matching function for call to 'PubSubClient::publish(const String&, String&)'

             mqtt_client.publish(mqtt_controllers_topic_debug, json_string);

                                                                          ^

    sketchmqtt.cpp:347:70: note: candidates are:

    In file included from sketchWalvola.h:25:0,

                     from sketchmqtt.h:4,

                     from sketchmqtt.cpp:1:

    C:UsersFabrizio & DarioDocumentsArduinolibrariespubsubclientsrc/PubSubClient.h:130:12: note: boolean PubSubClient::publish(const char*, const char*)

        boolean publish(const char* topic, const char* payload);

                ^

    C:UsersFabrizio & DarioDocumentsArduinolibrariespubsubclientsrc/PubSubClient.h:130:12: note:   no known conversion for argument 1 from 'const String' to 'const char*'

    C:UsersFabrizio & DarioDocumentsArduinolibrariespubsubclientsrc/PubSubClient.h:131:12: note: boolean PubSubClient::publish(const char*, const char*, boolean)

        boolean publish(const char* topic, const char* payload, boolean retained);

                ^

    C:UsersFabrizio & DarioDocumentsArduinolibrariespubsubclientsrc/PubSubClient.h:131:12: note:   candidate expects 3 arguments, 2 provided

    C:UsersFabrizio & DarioDocumentsArduinolibrariespubsubclientsrc/PubSubClient.h:132:12: note: boolean PubSubClient::publish(const char*, const uint8_t*, unsigned int)

        boolean publish(const char* topic, const uint8_t * payload, unsigned int plength);

                ^

    C:UsersFabrizio & DarioDocumentsArduinolibrariespubsubclientsrc/PubSubClient.h:132:12: note:   candidate expects 3 arguments, 2 provided

    C:UsersFabrizio & DarioDocumentsArduinolibrariespubsubclientsrc/PubSubClient.h:133:12: note: boolean PubSubClient::publish(const char*, const uint8_t*, unsigned int, boolean)

        boolean publish(const char* topic, const uint8_t * payload, unsigned int plength, boolean retained);

                ^

    C:UsersFabrizio & DarioDocumentsArduinolibrariespubsubclientsrc/PubSubClient.h:133:12: note:   candidate expects 4 arguments, 2 provided

    In file included from sketchmqtt.h:4:0,

                     from sketchmqtt.cpp:1:

    sketchmqtt.cpp: In function 'void mqtt_callback(char*, byte*, unsigned int)':

    mqtt.cpp:375: error: request for member 'payload_string' in 'payload', which is of non-class type 'byte* {aka unsigned char*}'

             log(payload.payload_string());

                         ^

    sketchWalvola.h:89:67: note: in definition of macro 'log'

     #define log(mex) if (DEBUG) {Serial.println(walvola_time + "::" + mex);Serial.flush(); if(MQTT_DEBUG) {mqtt_log(walvola_time + "::" + mex);}}

                                                                       ^

    mqtt.cpp:375: error: request for member 'payload_string' in 'payload', which is of non-class type 'byte* {aka unsigned char*}'

             log(payload.payload_string());

                         ^

    sketchWalvola.h:89:135: note: in definition of macro 'log'

     #define log(mex) if (DEBUG) {Serial.println(walvola_time + "::" + mex);Serial.flush(); if(MQTT_DEBUG) {mqtt_log(walvola_time + "::" + mex);}}

                                                                                                                                           ^

    mqtt.cpp:379: error: request for member 'payload_string' in 'payload', which is of non-class type 'byte* {aka unsigned char*}'

             if (mqtt2JSONkvs(payload.payload_string())) {

                                      ^

    mqtt.cpp:404: error: a function-definition is not allowed here before '{' token

     {

     ^

    mqtt.cpp:512: error: expected '}' at end of input

     }

     ^

    Più di una libreria trovata per "WiFiClient.h"
    Usata: C:UsersFabrizio & DarioAppDataLocalArduino15packagesesp8266hardwareesp82662.3.0librariesESP8266WiFi
    Non usata: C:Program Files (x86)ArduinolibrariesWiFi
    Non usata: C:Program Files (x86)ArduinolibrariesWiFi
    Non usata: C:Program Files (x86)ArduinolibrariesWiFi
    Non usata: C:Program Files (x86)ArduinolibrariesWiFi
    exit status 1
    'mqtt_client' does not name a type

Thanks for the help!

Понравилась статья? Поделить с друзьями:
  • Movidrive mdx61b коды ошибок
  • Moviaxis sew коды ошибок
  • Move or die ошибка 0xc000007b
  • Move or die ошибка 0xc000005
  • Movavi ошибка при выполнении приложения сервера