現時点の情報です。最新情報はM5StickC非公式日本語リファレンスを確認してみてください。
概要
M5StickC(ESP32)とATTiny85を接続し、USBキーボード制御を作りました。ATTiny85をパソコンに接続することで、M5StickC経由で好きな文字列を入力することができます。
今回はM5StickCと接続していますが、ESP32や他のArduino、Raspberry PiなどI2Cが使えるものであれば問題ないと思います。

ATTiny85とは?
下の記事でちょっとだけ触ったことがある、小さなArduino端末です。特徴としてUSB端子を持っていて、パソコンに差すとキーボードやマウスとして振る舞うことが可能です。
接続方法

今回はI2C接続にしました。キーボードとして動かすのでUARTでもいいのですが、複数接続できるI2Cの方が流用しやすいかなと、、、
端子 | M5StickC | ATTiny85 |
GND | GND | GND |
SDA | GPIO0 | P0 |
SCK | GPIO26 | P2 |
上記の3本接続しました。M5StickCがI2C Master、ATTiny85がI2C Slaveとして動かします。また、ATTiny85の5VからM5StickCの5V inに追加で接続することで、給電しながら動かすこともできます。
接続に利用しているのは秋月電子で購入した「スルホール用テストワイヤ TP-200 (10本入)」です。はじめて利用しましたが、便利ですね。
アマゾンだと結構高いのでちょっと手が出ませんでした。
ATTiny85側スケッチ
#include "DigiKeyboard.h" #include "TinyWireS.h" #define SLAVE_ADDR 0x50 void receiveEvent(uint8_t howMany) { // LED ON digitalWrite(1, HIGH); // Receive char sendText[256]; memset(sendText, 0, sizeof(sendText)); for ( int i = 0 ; i < howMany ; i++ ) { sendText[i] = TinyWireS.receive(); } // Keyboard Send DigiKeyboard.sendKeyStroke(0); DigiKeyboard.println(sendText); // LED OFF digitalWrite(1, LOW); } void setup() { TinyWireS.begin(SLAVE_ADDR); TinyWireS.onReceive(receiveEvent); } void loop() { TinyWireS_stop_check(); DigiKeyboard.delay(100); }
利用ライブラリ
開発環境は『USB直挿しマイコン Digispark(ATTINY85)』を参考に構築してください。I2C Slaveとして動かしますので、TinyWireSをライブラリフォルダに追加します。
コード自体は非常にシンプルです。受信した文字列をキーボード出力しているだけです。DigiKeyboard.delay()を定期的に呼び出さないと、パソコン側からキーボードとして認識しなくなるので注意しましょう。
LEDは必須ではないですが、本当に送れているのかがわからないので、光らせた方がいいです。また、キーボードの送信が完了したらI2Cで完了を送信したほうが、きれいな制御になると思います。
M5StickC側スケッチ
#include <M5StickC.h> #include <Wire.h> #define SLAVE_ADDR 0x50 void setup() { M5.begin(); Wire.begin(0,26); } const char str[] = "lang-ship.com"; void loop() { M5.update(); if (M5.BtnA.wasPressed()) { Wire.beginTransmission(SLAVE_ADDR); for ( int i = 0 ; i < strlen(str) ; i++ ) { Wire.write(str[i]); } Wire.endTransmission(); } }
BtnAを押すと、固定文字列をI2Cで送信するサンプルです。本当はこのスケッチを動かす前にI2C Scanner的なのを動かして、I2CとしてATTiny85が認識しているかを確認したほうがいいです。
まとめ
できそうだなと思ったので、目的もなく作ってみました。M5StickCに他のマイコンを接続するのは反則っぽくて、あまり好きじゃないのですが、ATTiny85だったら安いからいいかな。。。
M5StickCからUSBを制御できると、MQTTとかと連携することでリモートのパソコンなどのキーボードを遠隔から操作できるようになります。
ちなみに純正M5StickC Proto Hatだとちょっとだけ長さが足りなくて、入りませんでした。。。
コメント