Skip to content

Instantly share code, notes, and snippets.

@fuwac
Created March 16, 2021 07:29
Show Gist options
  • Save fuwac/501ec23adb4792d4f8adc42d60e43415 to your computer and use it in GitHub Desktop.
Save fuwac/501ec23adb4792d4f8adc42d60e43415 to your computer and use it in GitHub Desktop.
goでシリアル通信奴
package main
import (
"flag"
"fmt"
"log"
"time"
"github.com/goburrow/serial"
)
var (
address string
baudrate int
databits int
stopbits int
parity string
)
// メッセージ送る
func sendText(p *serial.Port, text string) error {
wbuf := []byte(text)
fmt.Println(string(wbuf))
_, err := (*p).Write(wbuf)
return err
}
// メッセージ受け取る
func readText(p *serial.Port, readBuf *[]byte) error {
_, err := (*p).Read(*readBuf)
return err
}
func main() {
// フラグいろいろ
flag.StringVar(&address, "a", "COM4", "address")
flag.IntVar(&baudrate, "b", 115200, "baud rate")
flag.IntVar(&databits, "d", 8, "data bits")
flag.IntVar(&stopbits, "s", 1, "stop bits")
flag.StringVar(&parity, "p", "N", "parity (N/E/O)")
flag.Parse()
// 設定
config := serial.Config{
Address: address, // COMポート
BaudRate: baudrate, // ボーレート
DataBits: databits, // ビット数
StopBits: stopbits, // ストップビット数
Parity: parity, // パリティ
Timeout: 3 * time.Second, // 通信タイムアウト(3秒)
}
log.Printf("connecting %+v", config)
// シリアルオープン
port, err := serial.Open(&config)
if err != nil {
log.Fatal(err)
}
// 開いたよ
log.Println("connected")
// なんか色々終わった時に閉じとく
defer func() {
err := port.Close()
if err != nil {
log.Fatal(err)
}
log.Println("closed")
}()
// 読み込み用バッファ
readBuf := make([]byte, 512)
// lsコマンド送る
if err := sendText(&port, "ls\r"); err != nil {
log.Fatal(err)
}
// ちょっと待つ
time.Sleep(500 * time.Millisecond)
// 結果を読み込む
if err := readText(&port, &readBuf); err != nil {
log.Fatal(err)
}
// 画面出力
fmt.Printf("%s", readBuf)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment