⚙️
最新の環境で Go 言語を用いてサーボモーターをキュイキュイ動かしてみた
参考文献
実はこれ少し前からずっとやってみたかった
- そもそもモダン言語で組込や IoT みたいなことをやっていきたかった
- Rust は?と聞かれそうであるが既に手順がある程度公開されている Gobot を choice
いざマイコンを買い,挑戦
- マイコンのケースは未だに届いていません
- でもまあ届いちゃったら我慢ってある程度の期間しか持続しないよね
最初は参考文献の丸コピペから
- 最初の頃はコピペしたら動くんだ!って安直にも信じてましたね……
一応,参考文献の環境を……
- Go 1.5
- Mac
- 以外は同じ ( 後にここが躓くポイントになるとは思ってもいなかった )
丸コピに挑戦してみた結果
import (
"fmt"
"time"
"gobot.io/x/gobot" // go get -d -u gobot.io/x/gobot で install
"gobot.io/x/gobot/platforms/firmata" // go get gobot.io/x/gobot/platforms/firmata でインストール
"github.com/warthog618/gpio" // go get github.com/warthog618/gpio でインストール
)
func main() {
gobot.NewRobot() // NewRobot に変わっていた
関数名がバージョンアップで変わっているではないか……
- それはそう.現在の Go は 1.21.5 がたぶん主流な感じ .6 もあるけどまだインストールできてない
他の様々な諸問題
- pca9685 driver がリンク変わっている
- ChatGPT 様に従い periph にて動かそうとするも失敗
- Arduino のポート番号でコケる
- Arduino に firmata が焼けていない問題
結論
package main
import (
"fmt"
"time"
"gobot.io/x/gobot"
"gobot.io/x/gobot/platforms/firmata"
"gobot.io/x/gobot/drivers/gpio"
)
func main() {
firmataAdaptor := firmata.NewAdaptor("COM3") // Arduinoのポートに適切に変更してください windows : COM3
servo := gpio.NewServoDriver(firmataAdaptor, "9") // この行を修正する pin が 9 なので線を差したピン番号に
work := func() { // リテラル
fmt.Println("Starting servo...")
gobot.Every(1*time.Second, func() {
// 0度から180度までの範囲でサーボモーターを回転
for angle := 0; angle <= 180; angle += 30 {
fmt.Printf("Moving servo to %d degrees\n", angle)
servo.Move(uint8(angle)) // 型指定してあげないとコケる
time.Sleep(1 * time.Second)
}
// サーボモーターを初期位置に戻す
fmt.Println("Moving servo to initial position")
servo.Move(90)
time.Sleep(1 * time.Second)
})
}
robot := gobot.NewRobot("servoBot",
[]gobot.Connection{firmataAdaptor},
[]gobot.Device{servo},
work,
)
robot.Start()
}
// terminal に Ctrl + C で停止
このときもうすでに日付を回っていたので,ChatGPT に聞くことにためらいはありませんでした.
後はまあ ChatGPT との口論のスクショでも貼ります.多分これが一番参考になると思う
ラズパイじゃないって……
これも誤りでした
どうやら,文末に日本語とつけると日本語で答えてくれるらしい……
これは go.mod からバージョンをダウングレードすることで解決しました.
PCA9885 が割とエラーの原因になっていたので束縛した.
一見正しそうなコードを吐いたがまだエラーが出る.
どうやら原因は型エラーだったっぽい,修正していただきました
パッケージインポートの問題と勘違いされているが,問題はもっと別の場所にあります.
ポート番号が Windows と他の OS で全然違うことがここにきて判明
この時点で割と走ってはいたのだけどなぜか実機は動かないので聞くと,Arduino にファームウェアを焼いてあげないといけないらしい
画像の手順で焼いてあげれば正常に動きました
無事キュイキュイ動かすことに成功
- やはり物が動く瞬間は感動しますね……
- それはそれとしてどうやって止めるんだコレ
- これも ChatGPT に聞くことに……そのときはもう寝たかったんだ……
以上
キュイキュイ動く動画が見たい場合,無期限で Twitter から見れます
Discussion