>백엔드 개발 >Golang >golang에서 블루투스 전송을 구현하는 방법

golang에서 블루투스 전송을 구현하는 방법

PHPz
PHPz원래의
2023-03-29 16:15:202194검색

golang은 웹 애플리케이션 및 대화형 애플리케이션 작성에 탁월한 지원을 제공하는 효율적이고 빠르며 강력한 프로그래밍 언어입니다. 블루투스 전송 분야에서도 golang은 탁월한 성능을 발휘합니다. 이번 글에서는 golang을 사용하여 블루투스 전송을 구현하는 방법을 소개하겠습니다.

이 기사를 시작하기 전에 Bluetooth 전송에 대한 기본 지식을 이해해야 합니다. 블루투스(Bluetooth)는 무선 헤드셋, 키보드, 마우스 등의 장치를 연결하는 데 일반적으로 사용되는 근거리 무선 통신 기술입니다. 케이블을 사용하지 않고 데이터를 전송할 수 있으며 일반적인 범위는 약 10m입니다.

블루투스 전송을 구현하려면 golang의 블루투스 라이브러리를 사용해야 합니다. 이 라이브러리는 Bluetooth 장치와 통신하는 기능을 제공합니다.

먼저, 코드가 Bluetooth 장치에 액세스하고 통신할 수 있도록 컴퓨터에 Bluetooth 지원 어댑터를 설치해야 합니다. 어댑터를 설치한 후 golang의 블루투스 라이브러리를 설치할 수 있습니다.

설치하려면 명령줄 창에 다음 명령을 입력하세요.

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

설치가 완료되면 코드에서 블루투스 라이브러리를 가져와야 합니다.

import "github.com/currantlabs/ble"

다음으로 다음 코드를 사용하여 사용 가능한 블루투스를 검색할 수 있습니다. devices:

// 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의 블루투스 라이브러리를 사용하여 블루투스 전송을 구현하는 방법을 소개했습니다. 기본적인 블루투스 전송 지식을 알아보고, 디바이스 검색, 디바이스 연결, 데이터 보내기, 데이터 수신 방법을 배웠습니다. Golang의 블루투스 라이브러리는 광범위한 지원을 제공하므로 블루투스 전송을 간단하고 쉽게 구현할 수 있습니다. 관심이 있으시면 다음 golang 프로젝트에서 이 기술을 사용해 보세요!

위 내용은 golang에서 블루투스 전송을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.