LoginSignup
13
8

More than 3 years have passed since last update.

ATOM MatrixのセンサとIO

Last updated at Posted at 2020-04-15

Wi-Fiを繋げてるとLED Matrixがチラつく問題はまだわかってないですが、そもそもESP32はWi-Fiモジュールとして使っていて中まであまり調べてないのと、M5Stack系を触るの初めてなので、基本的なとこから調べてます。趣味の範囲なので、テキトーですがw

ATOM Matrixのファーストタッチからサードタッチぐらいまでやってきたので、ATOM Matrix自体を調べてみたいと思います。

image.png

途中の内容もあるので、この記事に追記していく形で纏めていきたいと思います。

ほかにもATOM Matrixに関する記事を書いています。
ATOM Matrixを触ってみた
ATOM Matrixに心拍センサを繋ぐ
ATOM MatrixをAmbientに繋ぐ
ATOM Matrixの消費電流を計測してみた

GPIOピン

ATOM Matrixの裏には電源と6ポートのGPIOがあります。単純なデジタル入出力以外にも機能を持ってそうなので、調べてみました。
ちなみに黄色い丸の部分は裏にM2のねじ穴があり、シールをはがずか、穴をあけることでネジ止めできます。

image.png

回路図(公開されてる?)をあまり調べられなかったので、間違いがあるかもしれません。
チップの情報はESP32-PICO
GPIOピンのレジスタは以下のソースコードのesp32_gpioMuxという変数で定義されています。
\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32\esp32-hal-gpio.c
そこから調べた結果なので、間違いないと思います。

ピン名 ポート番号 機能
G19 19 デジタル入出力
G21 21 デジタル入出力、内部で6軸センサMPU6886のI2C SCLに接続
G22 22 デジタル入出力
G23 23 デジタル入出力
G25 25 デジタル入出力、アナログ入力、アナログ出力、内部で6軸センサMPU6886のI2C SDAに接続
G33 33 デジタル入出力、アナログ入力、タッチセンサ

※GPIOマトリクス機能によりUARTやI2C、SPIは好きなピンに割り当て可能です。

アナログ入力

アナログ入力(G25、G33)にボリュームを接続し、確認しました。

image.png

プログラム


int analogIn = 25;  // 25 or 33

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.printf("analogRead() = %d\n", analogRead(analogIn));
  delay(100);
}

結果

ボリュームを回すと値が変化しました。

image.png

アナログ出力

タッチセンサ

スマホのタッチパネルのように静電容量を計って、指が触れているかまたは近いかを数値で取得できます。(指が近い、触れてるほど0に近づきます)
タッチセンサの機能はG33ピンに割り振られていますが、なぜかプログラム上では32を指定しないと反応しませんでした、おそらくGPIOの定義テーブルが間違っているんだと思います。

プログラム

int touch = 32;  // 物理的にはG33ピンだがプログラム上の指定は32となっている

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.printf("touchRead() = %d\n", touchRead(touch));
  delay(100);
}

結果

image.png

UART

Co2センサ(UART)の確認を参照ください。

I2C

BME680(I2C)の確認を参照ください。

SPI

ホールセンサ

ESP32のチップ自体にホールセンサが内蔵されている様なので、確認してみました。

プログラム

簡単にホールセンサの値を取得できる関数が用意されているので、それの値を取得しているだけです。

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.printf("hallRead() = %d\n", hallRead());
  delay(100);
}

結果

磁石を近づけると大きく変化するので動いてます。磁石でON/OFFするにはフィルタが必要そうです。
image.png

6軸センサ

プログラム

結果

13
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
8