
iOS App 端的 BLE → MQTT 中繼程式碼範例
資訊/科技

奧提斯
更新日:2025年4月22日
最後這邊提供一些程式碼範例,有興趣的朋友都可以直接私訊我或是透過案件服務請我開發 App 唷。
iOS App BLE to MQTT 範例程式碼
1️⃣ 加入 CocoaMQTT 套件(使用 Swift Package Manager)
.package(url: "https://github.com/emqx/CocoaMQTT.git", from: "2.0.0")
2️⃣ BLE 掃描 + MQTT 發送
import SwiftUI import CoreBluetooth import CocoaMQTT class BLEMQTTBridge: NSObject, ObservableObject { private var centralManager: CBCentralManager! private var mqttClient: CocoaMQTT! override init() { super.init() centralManager = CBCentralManager(delegate: self, queue: .main) // 初始化 MQTT 連線 let clientID = "iOSClient-" + String(Int.random(in: 0..<1000)) mqttClient = CocoaMQTT(clientID: clientID, host: "192.168.1.100", port: 1883) mqttClient.connect() } } extension BLEMQTTBridge: CBCentralManagerDelegate { func centralManagerDidUpdateState(_ central: CBCentralManager) { if central.state == .poweredOn { central.scanForPeripherals(withServices: nil) } } func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) { if let manufacturerData = advertisementData[CBAdvertisementDataManufacturerDataKey] as? Data { // 假設溫度在第 2~3 bytes(看實際裝置格式) let tempRaw = manufacturerData.subdata(in: 2..<4) let tempCelsius = Double(Int(tempRaw[0])) + Double(tempRaw[1]) / 100.0 print("📡 偵測到溫度:\(tempCelsius)°C") mqttClient.publish("home/ble/temperature", withString: "\(tempCelsius)", qos: .qos1) } } }
💡 重點說明
CBCentralManager
開始掃描 BLE 廣播- 解讀
manufacturerData
中的 bytes(視你的感測器格式而定) - 使用
CocoaMQTT
發送資料到你家的 MQTT broker - Topic 可以自訂為
home/ble/temperature
或任何你要的分類
開發這段的時候我自己其實卡了一下,因為我的 BLE 手環廣播的資料格式很特別, 要先拆 byte,還要自己算溫度的小數點 最後我把它寫成一個小小的 BLE → MQTT Bridge,用 iPhone 直接掃描 BLE, 解析完就用 `CocoaMQTT` 丟上 MQTT Broker。 這樣我不用 Raspberry Pi,就能把 BLE 資料餵進 Homebridge、HomeKit、甚至 Grafana~
iOS App 客製化 上架。
iOS 軟體開發、修改、維護既有App
IT/程式 > iPhone/iPad/Mac應用程式開發
$ 10000

$ 10000

0 / 1000