スタンプ型デバイス(1) ~M5StickCでデバイスを試作する~

####まえがき
[前回](https://qiita.com/T170521/items/68e0c658ec41f9867bc9)使用したATOM Matrixはバッテリーを内蔵しておらず，有線接続が必須であると判明した．無線化するにしてもボタン電池などを別途用意して接続する必要がある．ケースを3Dプリンターで作ったりしている人もいたようだが面倒なのでやめた😢

Bluetoothを用いてワイヤレス化させたい，バッテリー内蔵がよいということで急遽M5StickCを利用することにした

####本題
前回と同じくON/OFFスイッチを作製する

#####機器概要
- M5StickC
- キャップレスのハンコ入れ
- スイッチ
- 被膜付き銅線
- はんだごて，はんだ

####手順
#####1.スイッチを作製
今回はスイッチをはんだ付けした
![IMG_20200806_103633.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/06b1c6e0-91c1-b63a-5f7e-4de6194eda77.jpeg)


#####2.IDEでプログラム作成
前回のATOM Matrixを参考にしてプログラムを作成する
IDEをインストールして設定する
スケッチ/ライブラリをインクルード/ライブラリを管理...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/9c83c8ba-e46c-94c6-a510-76dcd1235982.png)
M5StickCと検索してインストールする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/88b30d58-3e1c-1737-2f52-982511705d5d.png)
これでライブラリを使えるようになった
実装する機能は以下の通り
・ON/OFF機能実装
・Bluetoothで接続設定
・リセットボタンで再接続

```c:StampDevice.ino
#include <M5StickC.h>
#include <BluetoothSerial.h>

BluetoothSerial SerialBT;
uint64_t chipid;
char chipname[256];
const int buttonA = 26; //pinの番号

void set(){
  chipid = ESP.getEfuseMac(); //idの読み取り
  M5.Lcd.setCursor(0*0, 0*0);
  sprintf( chipname, "M5StickC_%04X", (uint16_t)(chipid >> 32));  //chipnameに上書き
  M5.begin();
  M5.Lcd.setRotation(3);
  M5.Lcd.fillScreen(BLACK);
  M5.Lcd.printf("Bluetooth: %s\n", chipname);
  M5.Lcd.printf("Ver: %s %s\n", __DATE__, __TIME__);
  M5.Lcd.println();
  M5.Lcd.printf("State:");

  SerialBT.begin(chipname); //Bluetooth開始
  pinMode(buttonA,INPUT_PULLUP);  //指定のpinを入力に設定
}

void setup() {
  set();
}

void loop() {
  if( M5.Axp.GetBtnPress() == 2 ){  // 電源ボタンクリック
   M5.Axp.DeepSleep(1000000); // 1秒スリープ(リセット)
   set();
  } 
  int val = digitalRead(buttonA); //pinの信号を01で受信

  if(val == 0){ //ONの時
    //Serial.println("ON "); //USBのポートに「ON」送信
    SerialBT.println("ON"); //Bluetoothのポートに「ON」送信
    M5.Lcd.setCursor(8*5, 8*3); //本体画面のカーソルを調整
    M5.Lcd.printf("ON "); //本体画面に「ON」表示
  }
  else{
    //Serial.println("OFF"); //USBのポートに「OFF」送信
    SerialBT.println("OFF"); //Bluetoothのポートに「OFF」送信
    M5.Lcd.setCursor(8*5, 8*3); //本体画面のカーソルを調整
    M5.Lcd.printf("OFF"); //本体画面に「OFF」表示
  }
  delay(100); //0.1s時間を空ける
}
```
M5StickCをUSBで接続する
ツール/シリアルポートから書き込むポートを選択(今回はCOM6)
※右下，デバイスマネージャーから確認できる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/d39a70f8-6b8f-fec9-fd30-7f4196a69262.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/e9cc5f79-4c1a-fcab-dc28-7383870013c4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/d288c355-5e7a-2056-f255-b7c2bd4e9d87.png)
シリアルポートに書き込む

pinを確認してスイッチと接続する
ペアリングをしてBluetoothで接続
ツール/シリアルポートからBluetoothのポートを選択
ここで動作確認をしておく
デバイスが接続できるようにシリアルモニタを開いておく

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">ON/OFFスイッチ2 <a href="https://t.co/8QJGhEuKzx">pic.twitter.com/8QJGhEuKzx</a></p>&mdash; ゆーま (@sagirin262) <a href="https://twitter.com/sagirin262/status/1291290382987231232?ref_src=twsrc%5Etfw">August 6, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

#####3.デバイス作製
スイッチをハンコ入れの中へ
本体に穴をあけて銅線は通す
pinに再度接続
これでデバイスは完成
![IMG_20200806_111021.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/b7eb5fe9-e8f0-ad80-c7ff-5ffeab8d15d5.jpeg)
![IMG_20200806_114345.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/deedda13-a4c2-709f-e9be-e1c37595a41a.jpeg)


※電源ボタンを6s以上長押しすると電源が切れる
　その後すぐには電源がつかないから注意
　しばらくして再度電源ボタン or USB接続でついた

####実行例
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">デバイスいい感じ <a href="https://t.co/P5YQBkYkdz">pic.twitter.com/P5YQBkYkdz</a></p>&mdash; ゆーま (@sagirin262) <a href="https://twitter.com/sagirin262/status/1296648858328391683?ref_src=twsrc%5Etfw">August 21, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

####あとがき
次はUnityのアプリケーションと連携して使えるようにする予定です
![IMG_20200806_171646.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/01bb9436-71ab-7d7b-9c73-48df13fb96c4.jpeg)
イメージ![line_254673779585972.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/45050252-6bfd-b1bf-f3cf-0e020dbee601.jpeg)


####参考
[HoloLens 2 の環境構築をして実機で動かす](https://medium.com/kadinche-engineering/hololens-2-%E3%81%AE%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E3%82%92%E3%81%97%E3%81%A6%E5%AE%9F%E6%A9%9F%E3%81%A7%E5%8B%95%E3%81%8B%E3%81%99-7a15bfe5e088)
[M5stickCを動かしてみる](https://qiita.com/itiB_S144/items/7a232c1a31151fcb5e5b)
[M5StickC非公式日本語リファレンス]()
[M5StickCでBLEデバイスを検索する](https://lang-ship.com/blog/work/m5stickc-ble-device/)
[M5StickCのButtonクラスを調べてみた](https://lang-ship.com/blog/work/m5stickc-button-class/)
[M5StickCでBluetooth接続のマウスを作成する](https://qiita.com/norikawamura/items/162ccba193fe0c964237)
[ルンバをESP32でBluetooth通信で動かす方法](https://www.media.lab.uec.ac.jp/?page_id=1507)