概要

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あたりでライブラリ化しておきたいと思います。

























コメント