![見出し画像](https://assets.st-note.com/production/uploads/images/112301206/rectangle_large_type_2_b47d124cabada734083f5d274f6c2e4b.png?width=1200)
(5)M5Stack BasicとM5Stamp Pico 、UIFlowでダイソー「ピンポンブザー」を早押し対応にする - 改良の方針と子機の名前表示対応
※本記事は、ダイソー製品に関する改造記事です。本記事を参考にして同様の改造を行い、何が起こったとしても責任はとれませんので、もし参考にする場合は、自己責任でお願いします。予めご了承の上、お読みください。なお、該当製品の「使用上の注意」には、「分解や改造をしないでください。」とありますので、(株)大創産業の想定していない使用方法であることを付記しておきます。完全自己責任です。
前回はこちら
改良の方針
前回までで、最低限の機能は実装しました。
子機は親機に「Push」を送る
親機は最初に「Push」を送ってきた子機のMacアドレスを表示する
ただ、このままだと、誰が送ってきたのかは分かるようになりましたが、表示されるのはMacアドレスです。これだと分かりづらいので、子機に名前をつけ、親機に子機のMacアドレスと名前の対応をあらかじめ教えておき、Macアドレスをもとに、名前で表示する方が一目で分かるようになります。
あと、子機側は、果たして自分が自分が一番早く押したのかどうなのかが分かりません。司会者が「おおっと、○番が早かった!」みたいな感じで当てるのもよいですが、なんだったら、子機側でもわかるようにしておくとよいでしょう。
更に、今は、一番早かった人のみ表示しています。(以降は信号を送ってきても無視)
これを、送ってきた順を保持するようにすると、1番早かった人が不正解だった場合に2番目の人に解答権が移るような動作が可能になります。
したがって、改良の順はこのようになります
親機の表示を子機の名前にする
子機側に早押しの結果、解答権があるかどうかを表示させる
送ってきた順を保持するようにする
子機の名前表示対応
簡単なところからいきましょう。
まずは、親機の名前表示からです。
基本的には
で行ったときのように、親機であるM5Stack BasicのEEPROMに子機のMacアドレスをkeyとして、名前を書き込んでおき、子機側からデータを受信した際に、送ってきた子機のMacアドレスが分かるため、データを送ってきたMacアドレスをEEPROMのkeyで照合すれば名前が表示できるという寸法です。
![](https://assets.st-note.com/img/1690978215566-Rvjz24K8C9.png)
子機の名前は、「A、B、C、…」にしました。「1、2、3、…」だと1番早かった、2番目に早かったなどと混同するかな、と思ったからです。また、クイズ番組だと「赤、青、緑 …」などの色で分けるパターンも多いのですが、子機が増えたときに色を割り当てるのが大変かな、と考えてアルファベットを採用しました。色のほうがもしかしたら分かりやすいかもしれませんが、娯楽ならともかく、授業で使うとなると、色覚多様性とかいろいろ考える必要もあり、まぁアルファベットが無難かもしれません。
前回、Pushが0(押されたことがない)なら、子機のMacアドレスをPushに入れた部分を、EEPROMから読んだ名前に変更します。
![](https://assets.st-note.com/img/1690978693570-kGCDkTNl73.png)
![](https://assets.st-note.com/img/1690978533565-f4tMlVdpjI.png?width=1200)
Macアドレス部分は、EEPROMに保存したときに大文字で保存してしまっていますが、EspNowで送られてくるアドレスは小文字のため、大文字に直してから照合しています。EEPROM保存時に小文字にしておけば問題なかったのですが、M5Stamp Picoに表示されているMacアドレスの表記が大文字だったので、大文字で保存してしまいました(Macアドレス自体は規格上、大文字でも小文字でもよいことになっています)。自分でプログラムを組んでいて、多少つまずいたところです(「なぜEEPROMから読んでこない?」となった)。
小文字でEEPROMに覚え直させてもよいかもしれません。
次回は、それ以外の改良にとりかかります。
この記事が気に入ったらサポートをしてみませんか?