前回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などもこのように簡単に出来るのかな?
調べてみたいと思います。