ホームページ >バックエンド開発 >Golang >golangでBluetooth通信を実装する方法

golangでBluetooth通信を実装する方法

PHPz
PHPzオリジナル
2023-03-29 16:15:202190ブラウズ

Golang は、Web アプリケーションや対話型アプリケーションの作成を強力にサポートする、効率的、高速かつ強力なプログラミング言語です。 Bluetooth 通信の分野でも、golang は優れたパフォーマンスを発揮します。今回はgolangを使ってBluetooth通信を実装する方法を紹介します。

この記事を始める前に、Bluetooth 送信に関する基本的な知識を理解する必要があります。 Bluetooth は、ワイヤレス ヘッドセット、キーボード、マウスなどのデバイスを接続するために一般的に使用される短距離無線通信テクノロジです。ケーブルを使用せずにデータを送信でき、通常の通信範囲は約 10 メートルです。

Bluetooth 送信を実装するには、golang の Bluetooth ライブラリを使用する必要があります。このライブラリは、Bluetooth デバイスと通信するための機能を提供します。

まず、コードが Bluetooth デバイスにアクセスして通信できるように、Bluetooth 対応アダプターをコンピューターにインストールする必要があります。アダプターをインストールしたら、golang の Bluetooth ライブラリをインストールできます。

コマンド ライン ウィンドウに次のコマンドを入力してインストールします:

go get github.com/karalabe/gousb
go get github.com/raff/goble

インストールが完了したら、コードに Bluetooth ライブラリをインポートする必要があります:

import "github.com/currantlabs/ble"

Next次のコードを使用して、利用可能な Bluetooth デバイスをスキャンします。

// Set up BLE scanner
scanner, err := ble.NewScanner()
if err != nil {
    log.Fatalf("Failed to initialize BLE scanner: %s", err)
}
defer scanner.Close()

// Start scanning for 10 seconds
stopScan := make(chan struct{})
go func() {
    <-time.After(10 * time.Second)
    close(stopScan)
}()
devices := make(map[string]struct{})
scanner.Handler = ble.AdvertisementHandler(func(a ble.Advertisement) {
    devices[a.String()] = struct{}{}
})
if err := scanner.Scan(stopScan); err != nil {
    log.Fatalf("Failed to scan for devices: %s", err)
}
for device := range devices {
    log.Printf("Discovered device %s", device)
}

上記のコードは 10 秒間スキャンし、検出されたデバイスを map[string]struct{} に保存します。必要に応じて、この情報をさらに処理する場合があります。

次のコードを使用して Bluetooth デバイスに接続することもできます:

targetMAC, err := ble.ParseMAC(targetAddr)
if err != nil {
    log.Fatalf("Failed to parse target MAC address %s: %s", targetAddr, err)
}
client, err := ble.NewClient(&ble.ClientParams{
    ConnectionParams: ble.ConnectionParams{
        Interval:         50 * time.Millisecond,
        Latency:          4,
        SupervisionTimeout: time.Second,
    },
    AutoConnect: true,
})
if err != nil {
    log.Fatalf("Failed to initialize BLE client: %s", err)
}
defer client.CancelConnection()
ctx := context.Background()
peripheral, err := client.Dial(ctx, targetMAC)
if err != nil {
    log.Fatalf("Failed to connect to peripheral: %s", err)
}
defer peripheral.CancelConnection()

上記のコードはターゲット デバイスに接続し、接続が完了するとすぐにキャンセルされます。接続後も接続を維持し、データを送受信することもできます。以下に例を示します:

for {
    peripheral := connect()
    if peripheral == nil {
        continue
    }
    if err := peripheral.WriteCharacteristic(characteristic, data, true); err != nil {
        log.Printf("Failed to send data: %s", err)
    }
    if err := peripheral.SetNotifyValue(characteristic, func(b []byte) {
        log.Printf("Received data: %v", b)
    }); err != nil {
        log.Printf("Failed to set notification: %s", err)
    }
    <-time.After(10 * time.Second)
}

上記のコードはターゲット デバイスに接続し、データを送信し、データを取得します。また、10 秒後に切断され、再接続するまでしばらく待機します。必要に応じてコードを変更し、この例に基づいて他のアクションを実装できます。

要約:

この記事では、golang の Bluetooth ライブラリを使用して Bluetooth 通信を実装する方法を紹介しました。 Bluetooth 伝送の基本的な知識を学び、デバイスのスキャン、デバイスへの接続、データの送信、データの受信方法を学びました。 Golang の Bluetooth ライブラリは広範なサポートを提供し、Bluetooth 送信の実装をシンプルかつ簡単にします。興味があれば、次の golang プロジェクトでこのテクノロジーを試してみてください。

以上がgolangでBluetooth通信を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。