6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ArduinoとESP32(M5Cameraとか)間でI2C通信する方法

Last updated at Posted at 2020-08-15

I2C communication method between Arduino and ESP32 (M5Camera etc.)
Click here for English commentary and sample code.

前提

下記については説明を省略します。

  • Arduino IDEでのESP32(M5Camera含む)の開発環境の構築
  • C言語の基礎知識

Arduino同士でI2C通信する方法を先に読むと理解しやすいです。

解決する課題

ArduinoとESP32(M5Cameraとか)を接続(今回はI2C)してデータをやり取りしたい!

対応後のイメージ
I2C_Code.png

左側がMaster(以後、Main)のESP32(M5Camera)
右側がSlave(以後、Sub)のArduino(M0 PRO)
の間でデータを送受信している様子

手順概要

  1. 2つのマイコンをI2Cで接続する
  2. スケッチ例を参考にしてESP32に対応する
  3. スケッチを環境に合わせて編集する
  4. I2C経由でのデータの受け渡しを確認する

手順詳細

1. 2つのマイコンをI2Cで接続する

circuit_diagram.jpg
両方ともUSB経由でPCに接続しています。

  • M5CameraはGroveコネクタを利用
  • M5CameraからArduinoへ電源を供給
ESP32 M5Camera Arduino M0 PRO
GND GND
5V Vin
SDA (13) SDA (16)
SCL (4) SCL (17)

2. スケッチ例を参考にしてESP32に対応する

  1. 参考にしたライブラリたち
  2. 修正(数行レベル)したコードがこちら

3. スケッチを環境に合わせて編集する

3-1. アップロードするマイコンに合わせる

上記3ファイルすべてに下記の定義があるので、

#define MICON_ESP32              // undefined if Arduino

Arduinoの場合は、コメントアウトする。

// #define MICON_ESP32              // undefined if Arduino

3-2. サブマイコンのアドレスを変更する

I2C_Sub.inoの下記定義を変更する。

#define ADDRESS 0x8

4. I2C経由でのデータの受け渡しを確認する

4-1. I2Cで接続できていることを確認する

  1. 下記の通り、スケッチをアップロードして実行
  2. I2C_Sub.ino で定義したアドレスが見つかればOK
(Main) ESP32 M5Camera (Sub) Arduino M0 PRO
I2C_Scanner.ino I2C_Sub.ino
I2C_Scanner.png
Main側のシリアルモニタ出力の抜粋
I2C device found at address 0x08  ! ← Sub
I2C device found at address 0x28  ! ← Main

4-2. マイコン間でデータを渡せるか確認する

  1. 下記の通り、スケッチをアップロードして実行
  2. Main、Subのシリアルモニタに期待した出力が表示されればOK
(Main) ESP32 M5Camera (Sub) Arduino M0 PRO
I2C_Main.ino I2C_Sub.ino

Arduino IDEでのコードとシリアルモニタの様子
I2C_Code.png

Main側のシリアルモニタ出力の抜粋

writer:                   ← write("x is 16");
reader: hello             ← read();

Sub側のシリアルモニタ出力の抜粋

receiveEvent: x is 16     ← read();
requestEvent:             ← write("hello\n");

まとめ

MainとSub、各1ファイルで下記の対応を実施した。

  1. ArduinoとESP32の両方に対応
  2. Writer/ReceiverとReader/Senderの両方に対応

但し、ESP32は標準ライブラリ(TwoWire)にI2C Slave機能が搭載されていないため1、対応はしていない2

どうしても使いたい場合は、下記ライブラリを利用するとよい。

  • ESP32 I2C Slave
    • 合わせて、I2C Slave機能が公式サポートされるかの議論へのリンクが下の方に掲載されている
  1. 2020/08/15時点

  2. コンパイルエラーが出力される

6
2
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
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?