2025 用 C++ 打造頂級 IoT MQTT | Visual Studio Code 編程指南


在物聯網(IoT)領域,IoT MQTT 協定因其輕量、高效且可靠的特性,成為了設備之間進行訊息傳遞的主流選擇。無論是家居自動化、智慧城市,還是各種遠端監控應用,MQTT 都是許多 IoT 系統的核心組件。本文將帶你深入了解如何使用 C++ 和 IoT MQTT 協定,搭建一個簡單而功能強大的 IoT 系統。

IoT MQTT

為什麼選擇 C++ 開發 IoT 系統?

在 IoT 領域,C++ 具有以下優勢:

  • 高效能:比 Python、Java 更快,適合資源有限的嵌入式設備。
  • 跨平台:可在 Linux、Windows、Mac 甚至微控制器(MCU)上運行。
  • 強大控制力:可直接存取硬體並優化資源使用。
  • 與 MQTT 完美結合:Paho MQTT 提供高效能的 C++ 庫,能輕鬆實現 IoT 設備之間的即時通訊。

環境搭建

開始之前,請確保已安裝以下軟體:

macOS/Linux 需安裝 OpenSSL :

# Ubuntu / Debian
sudo apt update && sudo apt install libssl-dev

# macOS (using Homebrew)
brew install openssl

在 VSCode 建立 C++ IoT MQTT 專案

建立一個資料夾 mqtt_client 並開啟 VSCode 再建立如下的檔案結構 :

mqtt_client/
│── build/               # Build output directory  
│── src/                 # C++ source code  
│   └── mqtt_client.cpp  # Main C++ program  
└── CMakeLists.txt       # CMake configuration file

安裝 vcpkg (C++ 依賴管理)

vcpkg 是 Microsoft 開發的 C++ 依賴管理工具,我們將使用它來安裝 Paho MQTT C++ 庫。在 mqtt_client 目錄內並使用 VSCode 的終端機下載 vcpkg :

安裝 vcpkg

git clone https://github.com/microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh   # macOS / Linux
.\bootstrap-vcpkg.bat  # Windows

安裝 MQTT 庫

./vcpkg install paho-mqttpp3:x64-osx   # macOS
./vcpkg install paho-mqttpp3:x64-windows # Windows
./vcpkg install paho-mqttpp3:x64-linux # Linux

這將會安裝 MQTT 庫到 mqtt_client/vcpkg/installed/ 內。

編寫 MQTT 客戶端程式

#include <iostream>
#include <mqtt/async_client.h>
#include <chrono>
#include <thread>

const std::string SERVER_ADDRESS = "tcp://broker.hivemq.com:1883";
const std::string CLIENT_ID = "cpp_client";
const std::string TOPIC = "test/topic";

class Callback : public mqtt::callback {
public:
    void message_arrived(mqtt::const_message_ptr msg) override {
        std::cout << "Received message: " << msg->get_topic() << " -> " << msg->to_string() << std::endl;
    }
};

int main() {
    mqtt::async_client client(SERVER_ADDRESS, CLIENT_ID);
    Callback cb;
    client.set_callback(cb);

    try {
        std::cout << "Connecting to MQTT broker..." << std::endl;

        // Attempt connection and wait for up to 5 seconds
        auto token = client.connect();
        if (!token->wait_for(std::chrono::seconds(5))) {
            std::cerr << "Failed to connect to MQTT broker!" << std::endl;
            return -1;
        }
        
        std::cout << "Connected successfully!" << std::endl;

        // Subscribe to the topic
        client.subscribe(TOPIC, 1)->wait();
        std::cout << "Subscription successful, waiting for messages..." << std::endl;

        // Simulate publishing messages every 2 seconds
        while (true) {
            client.publish(mqtt::make_message(TOPIC, "Hello MQTT from C++"))->wait();
            std::this_thread::sleep_for(std::chrono::seconds(2));
        }
    } catch (const mqtt::exception& e) {
        std::cerr << "Error: " << e.what() << std::endl;
    }

    client.disconnect()->wait();
    std::cout << "Disconnected." << std::endl;

    return 0;
}

設定 CMake 檔案

在 CMakeLists.txt 輸入:

cmake_minimum_required(VERSION 3.12)
project(MQTT_Client)

# Set C++ standard
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Set vcpkg toolchain
set(CMAKE_TOOLCHAIN_FILE "/your_project_directory/mqtt_client/vcpkg/scripts/buildsystems/vcpkg.cmake")

# Manually include vcpkg's Paho MQTT directories
include_directories("/your_project_directory/mqtt_client/vcpkg/installed/x64-osx/include")
link_directories("/your_project_directory/mqtt_client/vcpkg/installed/x64-osx/lib")

# Add executable
add_executable(mqtt_client src/mqtt_client.cpp)

# Manually link Paho MQTT C++ and OpenSSL
target_link_libraries(mqtt_client PRIVATE
    paho-mqttpp3  # Paho MQTT C++ library
    paho-mqtt3a   # Paho MQTT C static library
    paho-mqtt3c
    paho-mqtt3as
    paho-mqtt3cs
    ssl           # OpenSSL
    crypto
)

這樣,整個專案會放在 /你的專案目錄/mqtt_client/,你只需要修改 你的專案目錄 為實際的路徑即可。

使用 VSCode 建置與執行 IoT MQTT 專案

在 Visual Studio Code (VSCode) 中,我們可以透過 「命令選擇區…」 來執行 CMake 的建置與執行 MQTT 客戶端。

在 VSCode 中,按下:
Cmd + Shift + P (macOS)
Ctrl + Shift + P (Windows / Linux)

然後輸入 CMake,你會看到與 CMake 相關的指令。

配置和編譯用 CMake :

  • 在「命令選擇區…」輸入 CMake: Configure,選擇專案目錄 mqtt_client,VSCode 會自動執行 cmake 來產生建置設定。
  • 如果 VSCode 提示 「沒有選擇 CMake 預設建置工具」,請輸入 CMake: Select a Kit,選擇 Clang 或 GCC(視作業系統而定)。
  • 按下 Ctrl (Cmd)+Shift+P,輸入「CMake: Build」來編譯專案。

執行程式 :

./build/mqtt_client

成功執行後,應該會看到如下輸出:

Connecting to MQTT broker...
Connected successfully!
Subscribed, waiting for messages...
Message received: test/topic -> Hello MQTT from Python

結論

在 2025 年,建立一個強大的 C++ 開發環境在 VS Code 中變得更加簡單且高效。這種設置不僅能讓開發過程更加流暢,還讓你有機會探索更先進的 C++ 特性和工具。將這個基礎的 IoT MQTT 範例應用到更具挑戰性的實際場景中,例如智能家居、智慧農業或遠程監控等。持續學習並更新你的開發環境,這樣你就能在這個快速發展的領域中保持領先地位。