Created
March 16, 2021 07:29
-
-
Save fuwac/501ec23adb4792d4f8adc42d60e43415 to your computer and use it in GitHub Desktop.
goでシリアル通信奴
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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