ESP32 Collect2.exe:错误:ld 返回 1 退出状态 *** [.pio uild sp32dev irmware.elf] 由 extern PubSubClient 客户端引起的错误 1;

问题描述 投票:0回答:1

您好,我是第一次在 Stackoverflow 上提问,请原谅我这次的错误。我使用带有 PlatformIO 的 VScode IDE 来使用 ESP32-WROOM-32U 连接到 Wi-Fi 并通过 MQTT 协议接收/发送整数到另一个组件。我已确认控制器能够成功连接 wifi。

如果不插入

extern PubSubClient client;
,我的
client.loop()
client.setServer(MQTT_SERVER, 1883)
都会出现“客户端未在此范围内声明”错误。插入 extern 让编译器了解“PubSubClient.h”应该可访问以进行声明后,我收到以下错误代码:

c:/users/user/.platformio/packages/toolchain-xtensa-esp32/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: .pio\build\esp32dev\src\main.cpp.o:(.literal._Z5setupv+0x2c): undefined reference to `client'
collect2.exe: error: ld returned 1 exit status
*** [.pio\build\esp32dev\firmware.elf] Error 1

我尝试过使用我在网上找到的其他东西,但它们没有帮助。这是我的文件:

将由 ESP32 执行的 main.cpp 文件:

#include <Arduino.h>
#include <WiFi.h>
#include <PubSubClient.h> 
#include <Wire.h>
#include <ArduinoJson.h>
#include <ArduinoJson.hpp>

const char *SSID = "SSID_NAME";
const char *PASSWORD = "PASSWORD_PLACEHOLDER";
const char *MQTT_SERVER = "192.168.1.109"; // Change this to your MQTT broker IP address

//WiFiClient espClient;
//PubSubClient client(espClient);
extern PubSubClient client;

void callback(char* topic, byte* payload, unsigned int length) {
  // handle the incoming message here
  String message;
  for (int i = 0; i < length; i++) {
    message += (char)payload[i];
  }
  Serial.print("Message arrived on topic: ");
  Serial.print(topic);
  Serial.print(". Message: ");
  Serial.println(message);
}

void setup() {
  Serial.begin(921600);
  pinMode(26, OUTPUT);
  WiFi.mode(WIFI_AP_STA);
  WiFi.disconnect();
  int n = WiFi.scanNetworks();
  if (n == 0) {
      Serial.println("no networks found");
  }
  else{
    Serial.print(n);
    Serial.println(" networks found");
  }

  WiFi.begin(SSID, PASSWORD);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println("Connecting to WiFi...");
  }
  Serial.println("Connected to WiFi");
  Serial.println(WiFi.localIP());

  client.setServer(MQTT_SERVER, 1883);
  while (!client.connect("ESP32Client")) {
    delay(1000);
    Serial.println("Connecting to MQTT server...");
  }
  Serial.println("Connected to MQTT server");

  client.subscribe("topic");
  client.setCallback(callback);  

}

void loop() {
  digitalWrite(26, WiFi.status() == WL_CONNECTED);
  delay(800);
  // Your code here
  client.loop(); 
}

platformio.ini 文件:

[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 921600
lib_deps = 
    knolleary/PubSubClient@^2.8
    bblanchon/ArduinoJson@^6.20.1
c++ arduino mqtt wifi esp32
1个回答
0
投票

我错误地找到了答案,它被隐藏在众目睽睽之下。

//WiFiClient espClient;
//PubSubClient client(espClient);
extern PubSubClient client;

将这些行更改为

extern PubSubClient client;
WiFiClient espClient;
PubSubClient client(espClient);

解决了问题。

© www.soinside.com 2019 - 2024. All rights reserved.