~家族のためのモノづくり~8歳の娘と、6歳の息子(脳性麻痺)を持った父親エンジニアの備忘録。M5Stack前回のおさらい前回記事で記載した通り、息子などの電動乗り物への搭乗機会を増やすため、子供用電動乗り物「mottoy」を改造してみました。ogimotokin.hatenablog.com今回は前回で書ききれなかったソフトウェアの話を簡単にします。今回のMottoy改造の様に「コントロール部」と「モータ部」に異なるマイコンに分かれている場合、そのマイコン間で通信のやりとりが必要になってきます。そのため、その通信メッセージのルールを決めてやる必要があります。この検討で大事なのは、「今後に接続デバイスを増やす事を想定して拡張しやすくしておくか」という拡張性と、「いかに複雑にしすぎず分かりやすいルールにするか」という開発速度とのバランスです。開発時間の限られる個人製作物においてその細かい箇所に時間をかける事自体が本質ではないため、必要最低限の絞り込みを実施した感じです。「あれこれ悩む前にまずはざっと作ってみる」こういう判断も、ラピットプロト開発ならではかな、と思います。_独自通信メッセージルールの例という訳で、今回のやりたい事を実現するための「独自伝送メッセージルール」を定義してみました。今回は、操作デバイスから「モビリティの移動したい方向」を伝える独自ルールになります。(ETX:テキスト終了文字)これだけでは分かりにくいので、一例をあげます。コントローラから、『最大速度で前進』する場合、以下の12byteを転送します。ETX英語&数字&記号はASCIIコードで表現できるので、その値を伝送するイメージです。変換表は以下のサイトを参考ください。独自ルールを決める上で気にすべきは、「メッセージの先頭&終わりをどうやって判別させるか」です。デバイスの送信側はかならず一定間隔でメッセージ先頭からデータを投げますが、受信側は必ずしもきっちりメッセージ先頭から取れるとは限りません。受信側が別の処理をするのを頑張っていた場合、受信バッファ(郵便受けのポストの様なもの)が溢れてしまいメッセージが途中で切れてしまう事は実使用上でありえます。「どこまでが一つのメッセージなのか判別できる様にする仕組み」は最低限必要かなぁ、と思います。判別のさせ方は色々ありますが、私は『普通の文字通信では絶対に使わない値を先頭/末尾に置く』というやり方がよいかな、と思い、ASCII制御コードであるSTX/ETXを使いました。『ジョイスティック』&『段ボールトイコン』から操作できますが、これに別の第三のコントローラを作ってもすぐにモビリティが動かせるし、また別の新しい二輪ロボットを作った場合でも、すぐにこの3つのコントローラがすべて対応してくれる訳です!リソースのない個人開発に置いては、なかなかの効率化ですね♪ちなみに、無線の場合はWifi(UDP)通信、有線の場合はUART通信(Serial)で、同じプロトコルが使いまわせられるので、超便利!!ソースコード以下のGithubに置きました。汚いコードですが、ご参考までに。}}まとめ今回は、「モビリティ部」と「コントローラ部」の通信メッセージについて、少し書いてみました。今回は「移動させたい方向を指示するだけ」のシンプルなメッセージですが、当然ながら細かい速度量等を設定できるメッセージも別途設定しようと思っています。(アナログジョイスティックの傾き量に応じてモビリティの速度を変える等)この様に、個人製作物で設計思想を統一しておくのは、今後モノをたくさん作っていった時に威力を発揮するかなぁ、と思います。Switchゲームを物理スイッチで操作できるコントローラを作ってみた【かんたん工作】100均グッツで可愛く光る意思伝達スイッチを作ってみた月別アーカイブはてなブログをはじめよう!motokiinfinity8さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。