本体に内蔵しているのと同じSPI接続のST7735Sに160×80ピクセルの0.96インチOLEDを接続してみました。
※現時点の情報ですので、最新情報はM5StickC非公式日本語リファレンスを確認してください。
SPIとは?
3線+αの信号線を使って通信する通信方式です。I2Cに比べて高速通信が可能で、M5StickCでは画面表示などに利用しています。
Arduino | Master側 | Slave側 | 別名 | 用途 |
SCK | SCK | SCK | SCLK, SCL | データ送信のクロックをマスターが送信する |
MISO | SDI | SDO | DC, D/C | マスターの受信、スレーブの送信をする |
MOSI | SDO | SDI | SDA | マスターの送信、スレーブの受信をする |
SS | SS | CS | 特定スレーブのCSを0Vにすることで通信先を選択する |
基本は3線で通信を行い、複数の通信先(スレーブ)がいる場合には、マスター側が複数のSS用PINを操作して、通信先のCSを0Vにすることで通信先を選択する。
相手先が1つだけの場合には、配線の段階でCSをGNDに接続することで常に選択されている状態となる。
名称は接続先のデバイスによって命名が様々なので、接続先に注意する必要がある。またSPI以外の通信線も接続する必要があるデバイスもあるので混乱しやすい。
SPIサポート
M5StickCでは最大4系統のSPI通信をサポートしています。
- SPI0 : 内部Flashへの接続に利用済み
- SPI1 : 内部Flashへの接続に利用済み
- HSPI : 未使用
- VSPI : 内蔵画面への接続に利用済み
M5StickCで追加で利用できるSPIは1系統のみになります。ただし、そもそも4線しか使えるピンが無いので外部に2系統使うことはできません。
接続デバイス
手元にあったST7735Sと接続してみました。M5StickCに内蔵しているのと同じスペックの画面ですが、内蔵クラスはPIN番号などが固定化されているので、そのまま使えませんでした。
ST7735Sのピン配置
ST7735 | M5StickC | 内容 |
GND | GND | 共通GND |
VCC | 3V3 | 電源 |
SCL | 32 | SCK |
SDA | 26 | MOSI |
RES | 33 | リセット |
DC | 0 | MISO |
CS | GND | このデバイスを選択 |
BLK | 未接続 | バックライト制御 |
上記の接続にしました。CSはGNDに直結したので3線でSPI自体は通信できますが、画面のリセット用の1線必要になっています。
接続例
Groveはメス端子は販売していますが、ケーブルは自作できないので、この手の接続をするときにはきれいに接続するのは難しいかもしれません。
サンプルスケッチ
#include <M5StickC.h> #include <Adafruit_GFX.h> #include <Adafruit_ST7735.h> #include <SPI.h> Adafruit_ST7735 tft = Adafruit_ST7735(-1, 0, 26, 32, 33); // cs, dc, mosi, sclk, rst uint16_t color = 0; void setup() { M5.begin(); tft.initR(INITR_MINI160x80); } void loop() { tft.fillScreen(color); M5.Lcd.fillScreen(color); color += 0x0100; }
最低限のコードだけに削っているものになります。AdafruitとM5StickCでcolorの型が違うので、違う色が表示されますが、画面の色が塗り替わっているまでは確認できました。
Adafruit ST7735とその親クラスにあたるAdafruit GFXを利用させていただいています。
まとめ
M5StickCでSPI通信は使えました。しかし自由に使えるPINが4線しかないので、接続とかがいろいろ大変そうですね。
コメント
Hello.
Sorry for english only, my japanese language is not good enough to communication.
I hava one question:
Can SCK pin use PIN G26/G36/G0 ? Avoid using GROVE socket for convenient.
skyforce
G26 : [OK]
G36 : [NG] Input Only
G0 : [OK] Note, Bootstrap PIN(Pull UP). If it is LOW at startup, it will be in download mode.