🕌
Go言語でPCとUSB接続のデバイス間でシリアル通信する
Arduinoにセンサーを刺して、結果をSerial.print
すれば、温度とか照度とかの値をPCへ送る事ができます。この値をプログラム的に加工したり、Webサーバーへ上げたり出来たら、何か面白いことが出来るかもしれません。Go言語でgo.bug.st/serialを使えば、簡単に出来ます(WindowsとmacOSで動作確認しています)。VIDが2341でPIDが0043はArduino UNOの値になります。他のデバイスとのシリアル通信では、この値とBaudRate
を変更する必要があります。
main.go
package main
import (
"bufio"
"errors"
"fmt"
"log"
"os"
"go.bug.st/serial"
"go.bug.st/serial/enumerator"
)
func getPortName() (string, error) {
ports, error := enumerator.GetDetailedPortsList()
if error != nil {
return "", error
}
for _, port := range ports {
if port.IsUSB && port.VID == "2341" && port.PID == "0043" {
return port.Name, nil
}
}
return "", errors.New("Arduino UNO is not conntected")
}
func main() {
portName, err := getPortName()
if err != nil {
log.Fatal(err)
os.Exit(1)
}
mode := &serial.Mode{
BaudRate: 9600,
}
port, err := serial.Open(portName, mode)
if err != nil {
log.Fatal(err)
os.Exit(1)
}
scanner := bufio.NewScanner(port)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
}
count.ino
int i;
void setup() {
Serial.begin(9600);
i = 0;
}
void loop() {
Serial.print("number = ");
Serial.println(i++);
delay(1000);
}
出力
number = 0
number = 1
number = 2
number = 3
number = 4
Discussion