分類
    • 主機維護
    • 程式語言
    最新文章

    C# .Net 控制 Windows 的 Wifi 連線

    2024 年 8 月 28 日

    C# .Net 6 匯入至 Windows 憑證

    2024 年 8 月 28 日

    C# .Net 6 刪除 Windows 下的使用者

    2024 年 7 月 31 日

    C# .Net 6 取得 Windows 列印的紀錄 Log

    2024 年 7 月 31 日
    Facebook Instagram
    Facebook Instagram Telegram
    2kH – Technology Log
    • 首頁
    2kH – Technology Log
    Home»程式語言»C# .Net 6 在 Windows 與藍芽連線
    程式語言 2022 年 7 月 2 日

    C# .Net 6 在 Windows 與藍芽連線

    前情提要

    這次客戶的需求是一個手機的 POS 軟體,希望透過藍芽 Socket 的方式從 Windows 傳輸交易紀錄到手機上的 App

    意思是手機上的 App 會是藍芽的 Server 端,而 Windows 則是 Client 端

    一開始還真沒有頭緒怎麼弄,就先去找了 .Net 環境下可以用的藍芽套件

    InTheHand.Net.Bluetooth

    Nuget: https://www.nuget.org/packages/InTheHand.Net.Bluetooth/

    Github: https://github.com/inthehand/32feet

    網路上找到很多都是 32feet 相關的文獻,看來這個應該是 32feet 的新版本,是用 InTheHand 命名

    搜尋所有的藍芽裝置

    Bluetooth 是需要先 Scan 找到所有的 Bluetooth 裝置,有了裝置再透過 Device Address 做連接

    所以如果能夠儲存 Device Address 就可能直接進行連接,不用做 Scan

    using InTheHand.Net;
    using InTheHand.Net.Sockets;
    
    var bluetoothClient = new BluetoothClient();
    BluetoothDeviceInfo device = null;
    
    Console.WriteLine("Search...");
    foreach (var dev in bluetoothClient.DiscoverDevices())
    {
        Console.WriteLine("Device: " + dev.DeviceName);
        if (dev.DeviceName == "Realme X3")
        {
            device = dev;
        }
    }

    與藍芽服務連接

    再來可以透過 BluetoothClient 的 Connect 進行連接

    bluetoothClient.Connect(device.DeviceAddress, Guid.Parse("00001101-0000-1000-8000-00805F9B34FB"));

    這裡比較需要注意的是第二個參數,是一個 Guid 的格式,這個就是 Bluetooth 的 UUID

    一開始搞不懂這個是用來做什麼的,卡了很久一直無法和裝置連線

    這個 UUID 必須要和 Server 端的 UUID 一致才能夠連線成功,而藍芽核心規範有針對這些 UUID 列出一些常見到的格式,也就是 Profile

    因為一個藍芽裝置(手機)裡面開啟藍芽,但是很可能許多程式有在做藍芽的 Server

    所以這時候就是用這個 Profile 來決定是連上這個裝置的哪一個服務,UUID 就是唯一不可以重複的

    像我透過 BluetoothClient 連接的裝置,找到的 InstalledService 就有 13 個,表示這手機上藍芽的服務就有 13 個

    必須連接正確才能夠與自己真正要連接的 App 連結成功

    傳輸資料

    而後面就是和一般的 Web Socket 一樣的傳輸方式了

    var socket = bluetoothClient.Client.Send(data);
    
    byte[] tradeBytes = new byte[Int16.MaxValue];
    int tradeBytesRec = bluetoothClient.Client.Receive(tradeBytes);

    紀錄一下第一次搞懂藍芽的 UUID

    不過概念懂了,其實用一些現成的套件,要做藍芽傳輸是非常方便跟快速的,套件真是好東西,感謝所有開發者前輩

    .Net Bluetooth C# Windows

    Leave A Reply Cancel Reply

    關於作者
    關於作者
    我是軟體工程師 2kH
    這裡是用來記錄工作上遇到的事物
    如果有問題想詢問,或者有合作可能
    歡迎來信:2kh@bshade.net
    本部落格文章版權所有
    未經授權,不得進行任何營利行為
    • Home
    © 2025 idawn. All Rights Reserved by 2kH

    Type above and press Enter to search. Press Esc to cancel.