M5StackとATTiny85でI2C通信をする
M5StickCでPM2.5センサーを使った花粉測定システムを構築していたのですが、M5StickCの5VOutは、DeepSleepでも常にHIGHのため5Vファンの制御ができませんでした。そのため、GPIOも足りないこともありI2C通信してATTiny85から制御することにしました。
開発と実験はM5StackとATTiny85で行いました。何かの役に立つかもしれないので記事にしておきます。
もくじ(Index)M5Stack関連の目次へ戻る
用意した環境
ハードウェア
- M5Stack
今回はFireを使いましたがBasicでもGrayでも大丈夫です。 - Digispark ATTiny85
- GROVE – 4ピン-ジャンパメスケーブル (5本セット)
今回はFireで行いましたがBasicでもGrayでも大丈夫です。
ソフトウェア
ArduinoIDEのバージョンはなんでもいいと思います。ATTiny85がVMWareで認識できなかったのでWindows10を使っています。
M5Stack側
- OS:Ubuntu 18.04 amd64(VMWare上に構築)
- ArduinoIDE 1.8.10
- M5Stackライブラリ(0.2.9)
https://github.com/m5stack/M5Stack - M5StackUpdaterライブラリ(0.5.1)※必須ではありません。
https://github.com/tobozo/M5Stack-SD-Updater
ATTiny85側
- OS:Windows10 Pro 64bit
- ArduinoIDE 1.8.10
- ATTiny85のI2C Slaveライブラリ
https://github.com/rambo/TinyWire
ATTiny85の開発環境について
ATTiny85はArduinoIDEで開発できますが、M5Stackとは別にしたほうがいいと思います。ArduinoIDEのポータブル環境であれば同じOS上に別の環境を作成できるので便利です。詳しくはArduinoIDEの便利技を見てください。
ドライバのインストール
https://github.com/digistump/DigistumpArduino/releases から「Digistump.Drivers.zip」をダウンロードします。2020/3時点では1.6.7(2016年リリース)が最新のようです。
USBポートによって認識しない場合があるので色々試してください。デバイスマネージャーに「Digispark Bootloader」というのが増えれば認識されています。
ArduinoIDEの使い方
①環境設定
追加のボードマネージャーのURLに「http://digistump.com/package_digistump_index.json」と書き込みます。
②ボードの追加
ボードマネージャーを開いて「digispark」を検索して「Digistump AVR Boards by Digistump」をインストールします。
③ボードの変更
「ツール」→「ボード」で「Digispark(Default 16.5mhz) 」を選びます。
④書き込み装置の変更
「ツール」→「書き込み装置」で「Micronucleus」を選びます。
⑤スケッチの書き込み
- ATTiny85をPCに「接続しないでおく」
※接続した状態で書き込むと「Assertion failed: res >= 4, file library/micronucleus_lib.c, line 100」というエラーが出ます。 - マイコンボードに書き込み(Ctrl+U)を実行します。
- 「Plug in device now…」と表示されたらUSBに接続します。
- 完了です。
テストプログラムについて
M5StackとATTiny85を接続してM5StackのボタンA~Cを押したらLEDの光るパターンが変化するようにしました。
- ボタンA:(1を送信)1秒おきに0.1秒点滅1回を繰り返す
- ボタンB:(2を送信)1秒おきに0.1秒点滅2回を繰り返す
- ボタンC:(0を送信)1秒おきに0.25秒点滅を2回を繰り返す(初期状態)
ソース
GitHubにて公開しています。
配線図
下記の図のように配線します。
参考にしたHP
まとめ
これでM5StackやM5StickCがDeepSleep中にファンを時間差で止める/動かすといった制御が可能になります。応用できると思うので活用してみてください。
実はMaster→Slaveは上手く行っているのですが逆がまだです(爆)上手く行ったら更新します。