概要
M5Stack社の商品紹介です。今回はM5StickC用のJoyC HATです。結構昔に販売開始していますが最近購入してみました。
JoyC HATとは?
- JoyC(スイッチサイエンス)
- JoyC (W/O M5StickC) Omni-directional Controller(本家ストア)
スイッチサイエンスさんで2000円ちょっとで購入できるデュアルジョイスティックです。左右にある2つのジョイスティックとどちらの方向に倒れているのかがわかるLEDが搭載されています。さらに16340バッテリーが内蔵されています。
スケッチ例
/* * @Author: Sorzn * @Date: 2019-11-22 14:48:10 * @LastEditTime: 2019-11-22 15:45:27 * @Description: M5Stack project * @FilePath: /M5StickC/examples/Hat/JoyC/JoyC.ino */ #include "M5StickC.h" #include "JoyC.h" JoyC joyc; TFT_eSprite img = TFT_eSprite(&M5.Lcd); uint8_t show_flag = 0; void setup() { M5.begin(); Wire.begin(0, 26, 400000); img.createSprite(80, 160); } void loop() { char text_buff[100]; M5.update(); img.fillSprite(TFT_BLACK); if(show_flag == 0) { img.drawCentreString("angle right", 40, 6, 1); sprintf(text_buff, "%d", joyc.GetAngle(1)); img.drawCentreString(text_buff, 40, 20, 1); img.drawCentreString("dis right", 40, 34, 1); sprintf(text_buff, "%d", joyc.GetDistance(1)); img.drawCentreString(text_buff, 40, 48, 1); img.drawCentreString("x right", 40, 62, 1); sprintf(text_buff, "%d", joyc.GetX(1)); img.drawCentreString(text_buff, 40, 76, 1); img.drawCentreString("y right", 40, 90, 1); sprintf(text_buff, "%d", joyc.GetY(1)); img.drawCentreString(text_buff, 40, 104, 1); img.drawCentreString("press right", 40, 118, 1); sprintf(text_buff, "%d", joyc.GetPress(1)); img.drawCentreString(text_buff, 40, 132, 1); } else { img.drawCentreString("angle left", 40, 6, 1); sprintf(text_buff, "%d", joyc.GetAngle(0)); img.drawCentreString(text_buff, 40, 20, 1); img.drawCentreString("dis left", 40, 34, 1); sprintf(text_buff, "%d", joyc.GetDistance(0)); img.drawCentreString(text_buff, 40, 48, 1); img.drawCentreString("x left", 40, 62, 1); sprintf(text_buff, "%d", joyc.GetX(0)); img.drawCentreString(text_buff, 40, 76, 1); img.drawCentreString("y left", 40, 90, 1); sprintf(text_buff, "%d", joyc.GetY(0)); img.drawCentreString(text_buff, 40, 104, 1); img.drawCentreString("press left", 40, 118, 1); sprintf(text_buff, "%d", joyc.GetPress(0)); img.drawCentreString(text_buff, 40, 132, 1); } img.pushSprite(0, 0); if(M5.BtnA.wasPressed()) { joyc.SetLedColor(0x100010); show_flag = 1 - show_flag; } delay(10); }
上記はM5StickCのスケッチ例にあるJoyCのスケッチ例です。
関数 | 取得値 |
joyc.GetAngle(0) | ジョイスティックを倒している方向 |
joyc.GetDistance(0) | 倒している角度 |
joyc.GetX(0) | X座標の傾き |
joyc.GetY(0) | Y座標の傾き |
joyc.GetPress(0) | ボタン(0:押されていない, 1:押されている) |
上記の関数群が実装されていました。引数の0が左側のジョイスティックで、1を指定することで右側を取得します。
仕組み
M5StickCに隠れる場所になるのですが、電源スイッチがあります。これを入れ忘れて動かないって思う人が多発しているみたいです。
裏側にはバッテリーがあります。このバッテリーを充電する方法はM5StickCに給電するか、取り外して充電器で充電します。
おすすめは専用の充電器です。できれば容量を計測できるタイプがあると便利です。M5Stack社の電池は基本的に問題ありませんがAmazonとかで販売している電池は容量が非常に小さなものが多いです。
また、この電池をはずすと下にICが出てきます。STM32F030F4ですね。この石でジョイスティックの値取得とLEDの制御、M5StickCからのI2C通信を行っています。
バッテリーはこの石とLEDの動作のために準備されていました。ちなみにM5StikCからバッテリーへの方向しか流れないようになっています。つまりこのバッテリーを使ってM5StickCを動かすことはできません。
M5StickC系のHATはみんなこの構成ですね。充電回路を付けていないのでM5StickCからの給電の方向のみになっています。個人的には充電回路もHATに内蔵してM5StickCに給電してくれると長期稼働ができて嬉しいんですけれどね。
そして特徴として、箱のサイズがでかいです。2000円ちょっとでこの大きさだと送料が結構かかりますよね(笑)
まとめ
M5StickCに操作を追加したいときにはかなりおすすめだと思います。Rover系の乗り物の操作として使われる事が多いですが、単体でも使うことが可能です。
M5StickC PlusでもJoyC.cppとJoyC.hをコピーすれば利用可能なのですが、ライブラリ形式になっていないのがちょっと不便ですね。時間があるときにESP32 Lite Packあたりでライブラリ化しておきたいと思います。
コメント