現時点の情報です。最新情報は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だとちょっとだけ長さが足りなくて、入りませんでした。。。







コメント