⚙️

最新の環境で Go 言語を用いてサーボモーターをキュイキュイ動かしてみた

2024/01/22に公開

参考文献

実はこれ少し前からずっとやってみたかった

  • そもそもモダン言語で組込や 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 との口論のスクショでも貼ります.多分これが一番参考になると思う
Rasberry Pi ではない
ラズパイじゃないって……
Arduino で聞き直した
関数名が誤り
これも誤りでした
誤り2
認めた
英語で答えるな
日本語
どうやら,文末に日本語とつけると日本語で答えてくれるらしい……
Gobot のバージョン違い
これは go.mod からバージョンをダウングレードすることで解決しました.
似たような質問をするな
だから文末に日本語ってつけろって
異常をきたしだした
PCA を用いずに
PCA9885 が割とエラーの原因になっていたので束縛した.
一見正しそうなコードを吐いたがまだエラーが出る.
angle
型エラー
どうやら原因は型エラーだったっぽい,修正していただきました
パッケージインポートじゃないって!
パッケージインポートの問題と勘違いされているが,問題はもっと別の場所にあります.
ポート番号
ポート番号が Windows と他の OS で全然違うことがここにきて判明
Firmata 焼けてないよ
この時点で割と走ってはいたのだけどなぜか実機は動かないので聞くと,Arduino にファームウェアを焼いてあげないといけないらしい
画像の手順で焼いてあげれば正常に動きました

無事キュイキュイ動かすことに成功

  • やはり物が動く瞬間は感動しますね……
  • それはそれとしてどうやって止めるんだコレ
  • これも ChatGPT に聞くことに……そのときはもう寝たかったんだ……

止める方法

以上

キュイキュイ動く動画が見たい場合,無期限で Twitter から見れます

Discussion