Elsaの技術日記(徒然なるままに)

主に自分で作ったアプリとかの報告・日記を記載

MENU

Go言語でのUART通信

前回UART通信のセットアップ手順についてまとめました。
elsammit-beginnerblg.hatenablog.com

今回はセットアップした環境を元に、go言語でUART通信させてみたいと思います。


■環境構築

go言語でUART通信を行うにあたり、
github.com/tarm/serial
を用います。

こちらは、下記によりインストールが可能です。

go get github.com/tarm/serial

■UART通信での送信

では実際にUART通信動作の確認を行っていきます。
まずは送信です。

ソースコードはこんな感じになります。

package main

import (
        "log"
        "github.com/tarm/serial"
        )

func main(){
        ser, err := serial.OpenPort(&serial.Config{Name: "ポート名", Baud: ボーレート})
        if err != nil {
                log.Fatal(err)
        }

        n, err := ser.Write([]byte("send test Message \n"))
        if err != nil{
                log.Fatal(err)
        }
        log.Printf("%d",n)
}

まずは、

ser, err := serial.OpenPort(&serial.Config{Name: "ポート名", Baud: ボーレート})

で使用するポートを指定し、

n, err := ser.Write([]byte("send test Message \n"))

により指定したポートへの書き込みを行います。

こちらの処理を実行すると、

send test Message

がUARTで出力されます。

■UART通信での受信

次に受信処理です。

例のごとくソースコードを載せます。

package main

import (
        "log"
        "github.com/tarm/serial"
        )

func main(){
        ser, err := serial.OpenPort(&serial.Config{Name: "ポート名", Baud: ボーレート})
        if err != nil {
                log.Fatal(err)
        }

        buf := make([]byte, 128)
        n, err := ser.Read(buf)
        if err != nil{
                log.Fatal(err)
        }
        log.Printf("%d",n)
        log.Printf("%s \n",buf)
}

送信と異なる点は

        buf := make([]byte, 128)
        n, err := ser.Read(buf)

です。

buf := make([]byte, 128)

でバッファの確保を行い、

 n, err := ser.Read(buf)

で入力された文字列をbufに格納していきます。

こちらを実行すると、
UART通信で送信されたデータが受信し、Printfにて出力されることが確認できるかと思います。

ここで、当たり前ですが、

buf := make([]byte, 128)

で確保したByte数以上を受信することは出来ないので注意。

■最後に

今回はgo言語でUART通信を行ってみました。
結構簡単に行うことが出来ましたw。
i2cなどもこのように簡単に出来るのかな?
調べてみたいと思います。