簡體   English   中英

Windows 的 HM-10 串行通信

[英]HM-10 serial communication from Windows

The low-cost BlueTooth 4.0 module that connects over UART to Arduino (the default device name is MLT-BT05), usually branded as something like "BLE 4.0 Bluetooth HM-10 CC2540 CC2541 Serial Wireless Module Arduino Android IOS" is a BLE (BlueTooth低能量設備)。

在 Arduino 的一側,它的工作方式類似於普通的藍牙 2.0 串行調制解調器 - 連接到 Rx、Tx 引腳以傳輸數據。

但是BLE不支持傳統的RFCOMM串口協議,當BT設備連接在Windows上時會創建“虛擬串口”服務。

然而,在支持 BT4.0 的 PC 上,設備可以配對(使用 PIN 123456 而不是傳統的 1234),並且可以使用藍牙 LE Lab 軟件探索其服務。

也就是說,Windows 顯然能夠與該設備通信、探索其服務等。

現在,當使用 Android 手機時,我可以很好地連接到 Arduino 使用此模塊與 Arduino 藍牙控制(HM-10 模塊)ZE84E30B9390CDB664DZDB6DBC2C 它按預期工作 - 就像通常的串行終端一樣。 在終端上鍵入的字符被傳輸到 Arduino 的 UART Rx 引腳,從 Arduino 的 UART Tx 引腳發送的字符被傳輸並顯示在 Android 應用程序中。 (實際上我使用 SoftwareSerial 來利用不同的引腳,但這沒關系)。

現在我的問題是 - 這種串行連接可以從 Windows PC 完成嗎?

我只找到一個討論與 Reflowduino 交談的頁面,聲稱相同的程序適用於 HM-10: https://github.com/botletics/Reflowduino/wiki/Windows-10-BLE

不幸的是,事實並非如此。 我可以在 Windows 機器上的 BT LE 實驗室中找到該設備,查看特性和服務,但它們都不像具有用於發送數據的“正在寫入”編輯行的“未知特性”。 盡管如此,這只會允許發送,但不允許接收。

如果此設備 (HM-10) 用於串行通信,並且顯然它適用於 Android(很可能適用於 iPhone),我想知道為什么沒有人費心為 Windows 實現此功能?

問題是舊的良好藍牙 2.0 串行調制解調器(例如 HC-05)與 iPhone 不兼容,因此如果 BLE 與 Windows 通信,我們可以將其用作與所有平台兼容的通用替代品 - 對於當我們想通過 BT 控制嵌入式設備時的應用程序。

順便說一句,與來自 Linux(同一台 PC)的 HM10 BTLE 設備交談很順利:

# hcitool dev
Devices:
    hci0    <my BT address>
# hcitool lescan
LE Scan ...
50:F1:4A:BC:14:4C HM10-11
# gatttool -b 50:F1:4A:BC:14:4C -I
[50:F1:4A:BC:14:4C][LE]> connect
Attempting to connect to 50:F1:4A:BC:14:4C
Connection successful
[50:F1:4A:BC:14:4C][LE]> primary
attr handle: 0x0001, end grp handle: 0x000b uuid: 00001800-0000-1000-8000-00805f9b34fb
attr handle: 0x000c, end grp handle: 0x000f uuid: 00001801-0000-1000-8000-00805f9b34fb
attr handle: 0x0010, end grp handle: 0x0022 uuid: 0000180a-0000-1000-8000-00805f9b34fb
attr handle: 0x0023, end grp handle: 0xffff uuid: 0000ffe0-0000-1000-8000-00805f9b34fb
[50:F1:4A:BC:14:4C][LE]> char-desc
...many others...
handle: 0x0025, uuid: 0000ffe1-0000-1000-8000-00805f9b34fb
...some more...

然后從 Arduino 發送一個字符“a”會立即出現以下通知:

Notification handle = 0x0025 value: 61

當快速鍵入多個字符組合在同一個通知中時:

Notification handle = 0x0025 value: 72 65 77

通過 BT 向 Arduino 發送字符也很簡單,以下發送字符“b”:

[50:F1:4A:BC:14:4C][LE]> char-write-req 0x0025 62

因此,使用底層 gatttool 為 Linux 編寫一個簡單的終端程序應該很容易,我很快就會在這里發布。 如果 Windows PowerShell 也能運行它,那就太好了......(?)

另一個注意事項:我什至不必從 Linux 配對設備(可能是因為 gatttool 的默認安全性設置為低)。

添加另一個非常有用的資源: http://www.martyncurrey.com/hm-10-bluetooth-4ble-modules/

嘗試使用WebBluetooth API,並在Chrome瀏覽器中使用它: https ://googlechrome.github.io/samples/web-bluetooth/

可悲的是,我的仿冒 HM-10 也有同樣的問題,雖然沒有辦法通過串行將它連接到 Windows,但據我所知,Windows 或至少 Windows 10 中有一個用於藍牙設備的虛擬通信端口,如果你去進入藍牙設置配對您的設備,然后轉到右上角並單擊更多藍牙選項,然后單擊 COM 端口選項卡,然后單擊傳出並從下拉菜單中選擇您的設備,然后選擇添加您的設備將能夠通過串行與 Windows 一起工作,就好像它是通過 USB 連接的。

Windows 藍牙標准連接不起作用,因為藍牙設備使用不需要配對的 ble 模式。 使用它通過 ble 模式接收並重定向到 com 端口。 https://github.com/Jakeler/ble-serial

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM