16
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

Arduino-ESP32 I2C <LCD ST7032>

WROOM-32のArduino開発環境でI2Cを行う方法を確認します。
理解が必要な事項は以下です。

  • I2Cのデフォルトピンの確認
  • Wireライブラリ

I2Cのデフォルトピンの確認

esp 32 のI2C ピンアサインは以下にあります。
https://github.com/espressif/arduino-esp32/blob/master/variants/nano32/pins_arduino.h

以下の表記があります。
static const uint8_t SDA = 21;
static const uint8_t SCL = 22;

ここはWROOM-32のピンが各社のモジュール上でどこにアサインされているかで変わるのでモジュールの回路図などを参考にしてください。
ちなみに秋月のDev-Moduleであればここ、Esprモジュールの場合はここ
どちらも普通にIO21,22に表示されているので、特に問題はないです。

Wireライブラリ

I2Cを使用するにはWireライブラリを使用します。
公式のリファレンスを参照しましょう。
https://www.arduino.cc/en/Reference/Wire

・使用するピンの設定はWire.beginでピン番号を指定します。
Wire.begin(21,22); //Wire.begin(SDA, SCL)

・I2Cの動作周波数の指定はsetClock()でできます。設定できる値はスタンダード100kbit/s、ファスト400kbit/sがあるようです。デフォルト値はfrequency=100000となっています。
Wire.setClock(100000);

image.png
ESP32 data sheet p.26

補足
・Wireライブラリではありませんが、内部プルアップの設定はpinModeで指定します。(外部プルアップの有無などに応じて設定が必要)

pinMode(21, INPUT_PULLUP); //デファルトのSDAピン21 のプルアップの指定
pinMode(22, INPUT_PULLUP); //デファルトのSDAピン22 のプルアップの指定

INPUT_PULLUPで内部プルアップ有効、INPUTで内部プルアップ無効です。
公式のpinModeマニュアルはこちらです。

♯注 ESP32の内部プルアップですが、GPIO34 から GPIO39では使用できないようです。→ 参考

I2C テスト <LCDコントローラ ST7032>

I2Cのテストとして、LCDコントローラのST7032で確認しました。
Arduinoのライブラリは作成してくださっている方がいましたので、以下を参考にしました。
http://ore-kb.net/archives/195

上記をそのまま使用するとエラーが出ました。
ESP32向けには若干の修正が必要なようで、以下を参考にさせていただきました。
http://blog.boochow.com/article/424685995.html

Arduino\libraries\arduino_ST7032-master\ST7032.cpp

#include "ST7032.h"
#include "Arduino.h"
#include <Wire.h>
#if defined(__AVR__)  ← 追加
#include <avr/pgmspace.h>
#endif          ← 追加

サンプルで動作させたコード

sample_st7032.ino
#include <Wire.h>
#include <ST7032.h>

ST7032 lcd;

void setup() {
  // put your setup code here, to run once:
  lcd.begin(8, 2);
  lcd.setContrast(30);            // コントラスト設定
  lcd.print("hello !");
}

void loop() {
  // put your main code here, to run repeatedly:

}

ST7032ライブラリの使い方を少し確認します。
READMEを確認すると、Examplesにサンプルがありました。
- Autoscroll ()
- Blink (
)
- Cursor ()
- CustomCharacter (
)
- Display ()
- HelloWorld (
)
- Scroll ()
- SerialDisplay (
)
- setCursor ()
- TextDirection (
)

文字の操作などはArduino本家のLiquidCrystalライブラリのコマンドとして使えるようなので、操作方法はLiquidCrystalライブラリを確認しましょう。
https://www.arduino.cc/en/Reference/LiquidCrystal

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
16
Help us understand the problem. What are the problem?