ArduinoでI2CのLCDを制御する

森下功啓製作所 ONLINE


1. はじめに

SB1602はストロベリーリナックスから販売されているI2Cで制御するLCDで、3.3Vで駆動する非常に使い易い表示器です。 制御ICにST7032が使われています。 このLCDは電源を入れても5本の配線と少なくて済みますので、ハードウェアの制約の多いArduinoでこのLCDを使用すれば恩恵が大きいと思います。

AVRでの制御用プログラムが販売元から配布されています。 また、Arduino用の制御プログラムはSim's blogさんがリリースされています。 本ページではArduino用のライブラリを拡張したものを公開します。

Arduinoで作った2つ目の作品なのでそんなに洗練されていません。 あしからず。


2. 回路の様子

Arduinoで実験した時の様子を以下に示します。 使用したのはArduino Duemilanoveを使用しています。 LCDモジュールの定格は3.3Vですが、保障外の5Vで動かしても一応動きます。 手元にあるモジュールは10日程度連続稼働させていますが壊れてはいません。

LCD
図1 表示している様子

配線の様子1
図2 配線の様子 その1

配線の様子2
図3 配線の様子 その2

3. プログラムのダウンロード

サンプルプログラムを以下からダウンロードできます。 開発はArduino IDE 0022で行っています。


プログラムのダウンロード
リリース日 プログラムパッケージ 更新内容
2011/6/4
2011/7/14
I2C_LCD.zip 初公開です。
[2011/7/14追記]ファイルサイズが大き過ぎて自動削除されていましたので、同梱する写真を減らしました。

スケッチ
/*************************************************
 * [プログラム名]
 *  I2C_LCD
 * [プログラムの説明]
 *  ストロベリーリナックスより購入できるLCDモジュールをI2Cで制御するサンプルプログラムです。
 * [参考資料]
 *  [1]ArduinoでI2C液晶,http://blog.goo.ne.jp/sim00/e/ab138be751d447bcdb0eecaaca232214,2011/5.
 *  [2]ストロベリーリナックス I2C低電圧キャラクタ液晶モジュール,http://strawberry-linux.com/catalog/items?code=27001,2011/5.
 * [LCDモジュール説明]
 *  LDCモジュールは16文字×2行です。
 *  文字アドレスは、1行目が0x00-0x0f
 *  文字アドレスは、2行目が0x40-0x4f
 * [I/O port map]
 *  Arduino     i2c-lcd
 *  Dig 2 ----- 1pin rst (pull-up 10k Ohm)
 *  Ana 5 ----- 2pin scl (pull-up 2.2k Ohm)
 *  Ana 4 ----- 3pin sda (pull-up 2.2k Ohm)
 *  GND ------- 4pin
 *  5V -------- 5pin
 ***********************************************/

// ********** define宣言 **********
#define LED_PIN 13                        // LEDピン

/*--------------------------------- 
 Arduinoの初期化
 ---------------------------------*/
void setup()
{
  // 入出力設定
  pinMode(LED_PIN, OUTPUT);                // Lowで点灯
  // LCD初期化
  lcd_init();
  // LCDへテスト文字列を表示
  lcd_print("ST7032 I2C LCD.\nprog ver."); // 文字を表示
  lcd_print(1);                            // 数字を表示(整数を格納した変数でもOK)
}
// ********** メインルーチン **********
void loop()
{
  // LEDチカチカ
  digitalWrite(LED_PIN, HIGH);
  delay(100);
  digitalWrite(LED_PIN, LOW);
  delay(500);
}



4. 使い方

LCDを使うスケッチ(Arduino世界でのプログラムソースコードのこと)と同じフォルダに制御プログラムを置けば直ぐに利用できるようになります。 初めにlcd_init();を呼び出して、初期化して下さい。 その後は直ぐにlcd_print("Hollow.");などと表示させることができます。 引数には文字列の他、整数も渡せます。 引数が数値の場合は桁数の指定も可能です。 また、表示位置の指定機能や文字列中に"\n"の改行コードを見つけると自動的に改行する機能を搭載しています。


5. 最期に

最新のArduino Unoを使えばLCDの定格に合わせて使用できます。 Arduinoを購入した時点でUnoが既に販売されていたのですが、良く分からずに「Arduinoをはじめよう」で紹介されていた Duemilanoveを購入してしまいました。 これではSDカードシールドなども搭載できません。 と、ちょっと後悔。。
[2011/6/10 加筆訂正]Arduino Pro 328-3.3V/8MHzなら電源電圧が同じなので直接LCDに接続しても問題ないようです。 DIP版のレベルシフトICを使えば安心できますが、やっぱり実装面積が気になりますし安くはないですよね?

このサイトで紹介した方法はLCDを5Vで駆動させるものですが、当然推奨されません。 皆さんは定格に合わせた工作をしましょう。。

inserted by FC2 system