拆分arduino文件的最佳方法

Best way to split arduino files

我正在寻找拆分 arduino 文件的最佳方法,我粘贴在它下面的代码只是为了编译测试,只是为了了解它是如何工作的。在这个例子中,我尝试拆分我的 MQTT 代码。

这是环境:

main.ino 文件:

        #include "file.h"
        //and more libraries
        void setup() {
          // put your setup code here, to run once:
          Serial.begin(115200);
          setup_mqtt(); //declared in file.h
        }
       
        // a lot of code here
    
        void loop() {
          // put your main code here, to run repeatedly:
            if (!client.connected()) {
            reconnect(); //declared in file.h
            mqtt_mensaje(); //declared in file.h
          }
        }

file.h 文件:

    void setup_mqtt();
    void callback(char* topic, byte* payload, unsigned int length);
    void reconnect();
    void mqtt_mensaje();

file.cpp 文件

    #include <Arduino.h>
    #include <WiFiClient.h>
    #include <PubSubClient.h>
    #define LED_BUILTIN 4   
    const char* mqtt_server = "192.168.1.18";
    // Connectión WiFi +  Broker
    WiFiClient espClient;
    PubSubClient client(espClient);
    
    // Function MQTT ------------------------
    void reconnect() {
     //code
    }
    void callback(char* topic, byte* payload, unsigned int length) {
      //code
      reconnect();
    }
    
    void mqtt_mensaje() {
    //code PUB message
    }
    //End Functions MQTT-----------------------

    void setup_mqtt(){
      
      pinMode(LED_BUILTIN, OUTPUT);      
      digitalWrite(LED_BUILTIN, LOW);    
    
      // Configuración MQTT
      client.setServer(mqtt_server, 1883);
      client.setCallback(callback);
    }

当我 运行 我的 Arduino IDE 中的这段代码时,我得到:

/Users/charlysan/Projects/works/arduino/main/main.ino: 在函数 'void loop()' 中: main:9:10: 错误: 'client' 未在此范围内声明 如果(!client.connected()){ ^

任何帮助将不胜感激

没有拆分 C++ 代码的最佳方法。对此的回答总是自以为是。

关于您的错误消息添加

#include <PubSubClient.h>

extern PubSubClient client;

要消除该错误消息,您可以将其声明为 extern,以便编译器知道它在其他地方实例化。 添加

#include <PubSubClient.h>

extern PubSubClient client;

到您的 .ino。

不过,我个人看不出为什么要在另一个文件中实例化它。