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

內容
為什麼選擇 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 範例應用到更具挑戰性的實際場景中,例如智能家居、智慧農業或遠程監控等。持續學習並更新你的開發環境,這樣你就能在這個快速發展的領域中保持領先地位。