鳥なき里のマイコン屋(117) M5ATOM Lite、ブレッドボード接続のお供

Joseph Halfmoon

M5Stack社の超小型デバイス ATOM Lite、ボタン、LEDと、WiFi接続(でMQTT)あたりの単体で出来そうなことは大体動かしてしまった感じです(まだBLE残っているのが気になってますが。これは別件扱い。)いよいよ外部接続端子に外の回路なりを接続して行こうと思います。今回は「接続準備」ということでブレッドボードのお供の治具を作ってみました。

ATOM Lite、「とても小さくて組み込むとき楽そう」ということで、購入させていただいたので、「小さい」などと文句を言う筋合いはまったくないのです。しかし、ブレッドボードに取り付けて工作しようとすると微妙な大きさと裏面ソケットで配線間違えてしまいそうです。そこで「例によって」装置裏面の拡張用のピンソケットに出ている信号をジャンパ線で刺しやすい位置に持ってくる治具をば、作成してみました。これで、ジャンパ飛ばしながらもLEDも見えるしボタンも押せるし、USBやGroveポートも刺さる、と。

治具を作ったからには導通テストなどせにゃなりません。今回は、出ている端子の機能のおさらいを兼ねて治具用の簡単なテスト・プログラムを作って走らせてみました。

まず裏返したときに左側の5本から。

  • 3v3
  • G22
  • G19
  • G23
  • G33

3.3Vのレギュレータ出力があります。レギュレータ出力には特に逆流防止用のダイオードなどは無いので外が供給するのはマズイと思います。つづいて信号4端子が出ています。G22とG19は純粋デジタル端子だと思います。今回はとりあえずデジタル入力可能かどうか実際に確かめてみます。一番下のG33はADコンバータの入力端子を兼ねているのでアナログ入力が可能な筈。こちらはアナログ入力ができることを確認したいと思います。ちょっと微妙な回路なのが、下から2番目G23です。以下のページの下の方にあるM5Stack社の「Schmatic」を見ると

ATOM_Lite

G23端子にはG23端子に加えて、100Ω抵抗を介してG34端子も接続されています。何故このような回路になっているのかその設計意図を知りたいところです。とりあえず今は不明。そこで今回はG23のみ、デジタル端子ということでデジタル入力だけを確認したいと思います。G34側ではアナログ入力も可能な筈であります。ここの機能はまた後で確認したいと思います。なお不用意に両方を出力設定するとぶつかるので危ないです(100Ω入っているので多少はマシかもしれないですが。)

次に右側の4本です。ここに5V電源とGNDが出ています。USBの5V電源には逆流防止用と思われるダイオードが入っているようです。

  • G21
  • G25
  • 5V
  • GND

G21はデジタル端子なので、ここではデジタル出力ができることを確認したいと思います。G25はデジタルに加えてアナログ入出力を兼ねた端子です。ここでアナログ出力はArduino式のPWM出力ではなく、DACの出力です。もともと2本しかないDAC出力ですが、拡張端子にはこれ1本しか出ていないようなので、ここではアナログ出力を確認したいと思います。また、G21、G25端子には他にも気になることがあります。兄弟機種のATOM Matrixではこの2端子をI2Cバスとして使ってMPU6886 IMU(モーションセンサ)に接続しています。Grove端子に出ているI2Cとは異なるチャネルのようです。それからするとATOM Liteでもこの2端子をI2Cとして使えそうに思えます。接続するものを準備しないとならないのでこれもまた後で確認するつもりです。

さてここまでの各端子の動作を確認するために、その辺の在りもので作ったブレッドボードの回路を以下に示しました。G21にはLEDを接続してデジタル出力で光らせます。G25はDAC出力、直接ハンディDMMに接続し出力電圧を測定します。G22,19,23はデジタル入力としてタクトスイッチの様子を読み取らせます。G33はアナログ入力(ADC)として可変抵抗の電圧を読みとらせます。なお、テストに使ったソースコードは簡単なものですが、念のために末尾に全文掲げました。

ATOMLite DUT SCHEMATIC実際にATOM Liteを治具ボードに載せ、ブレッドボード上のスイッチやらボリュームやらと接続したところがこちら。

ATOMLite2BB結果をまとめるとこんなところです。

  1. analogRead()で0から4095までボリューム位置に応じた12ビットの値が読めた。
  2. dacWrite()は8ビット引数で出力電圧指定。128を与えると1.646V、0を与えると0.07Vが観察できた。
  3. digitalRead()で3個のスイッチの状態1/0が読めた。
  4. digitalWrite()でLEDを点滅できた。

なお、下のソフトで1ループ10秒というゆるゆるした値で回しているのは、電圧測定につかったハンディDMMの測定が遅く1秒とかにすると数字が安定する前にDAC出力が変わってしまうためです。

鳥なき里のマイコン屋(116) M5ATOM Lite到着、ビルド環境セットアップ に戻る

鳥なき里のマイコン屋(118) M5ATOM Lite、UART、I2C接続 へ進む

ATOM Liteの外部接続端子、通りいっぺんの接続確認用コード
// M5ATOM Lite, EXT IO TEST
#include "M5Atom.h"
#define EXT_LED  (21)
#define DAC_OUT  (25)
#define EXT_SW0  (22)
#define EXT_SW1  (19)
#define EXT_SW2  (23)
#define ADC_IN   (33)

int loopCounter;
bool extON;
uint16_t ain;
uint32_t din;

void setup() {
  Serial.begin(115200); 
  while(!Serial) {};
  Serial.println("Start Serial:");
  loopCounter = 0;
  extON = false;

  pinMode(EXT_LED, OUTPUT);
  pinMode(EXT_SW0, INPUT);
  pinMode(EXT_SW1, INPUT);
  pinMode(EXT_SW2, INPUT);
}

void loop() {
  if (extON) {
    digitalWrite(EXT_LED, HIGH);
    dacWrite(DAC_OUT, 128);
    extON = false;
  } else {
    digitalWrite(EXT_LED, LOW);
    dacWrite(DAC_OUT, 0);
    extON = true;    
  }
  ain = analogRead(ADC_IN);
  Serial.print("Analog Read = ");
  Serial.println(ain);

  din = digitalRead(EXT_SW0);
  din |= digitalRead(EXT_SW1) << 1;
  din |= digitalRead(EXT_SW2) << 2;
  Serial.print("Digital Read = ");
  Serial.println(din);
  
  Serial.println(loopCounter++);
  delay(10000);
}