ストロベリー・リナックスや秋月電子からI2C接続のキャラクタ液晶/OLEDが発売されています。 I2C接続だと配線が少なくて便利です。そこで ArduinoのLiquidCrystalライブラリに少し変更を加えて I2CLiquidCrystalライブラリとして準備してみました。
Arduinoと液晶間の接続は4本だけです。2本のプルアップ抵抗を忘れないようにします。 この液晶は3.3V動作ができることが売りの一つですが、 Arduino側の電源が5Vのときには、それにあわせて5Vで利用します。もちろん Arduno Proなどで 3.3V動作の時には3.3Vで接続します。
Arduino LeonardなどSDA, SCLピンがある場合には、A5, A4ではなく、それらのピンへつなぎます。 対応する液晶は
Arduinoと液晶間の接続は4本です。2本のプルアップ抵抗を忘れないようにします。 液晶のコントラストは外付けの半固定抵抗で調整します。 この液晶は3.3V動作ができることが売りの一つですが、 Arduino側の電源が5Vのときには、それにあわせて5Vで利用します。もちろん Arduno Proなどで 3.3V動作の時には3.3Vで接続します。 5Vのときにはバックライト用 LED の電流制限抵抗を忘れないようにします。
Arduino LeonardなどSDA, SCLピンがある場合には、A5, A4ではなく、それらのピンへつなぎます。 対応する液晶は
ArduinoとOLED間の接続は4本です。2本のプルアップ抵抗を忘れないようにします。 OLEDのコントラストはソフトウェアで設定します。 OLEDの電源は 3.3V ですので、プルアップ抵抗の接続先も 3.3V にします。ほかに I2Cデバイスがあるときなど条件が悪いとうまく動作しないかもしれません。 SA0はL(GND)もしくはH(3.3V)へ固定します。下の回路図ではLです。 CS, SA0, SDA in/out の配線などは OLED モジュール上で済ませてもよいでしょう。
Arduino LeonardなどSDA, SCLピンがある場合には、A5, A4ではなく、それらのピンへつなぎます。 対応するOLEDモジュールは
Grove のケーブルを使って I2C のコネクタへ接続するだけです。電源電圧は5Vです。対応する液晶モジュールは
です。ライブラリの使い方はLiquidCrystalライブラリとほぼ一緒です。LiquidCrystalライブラリで
// include the library code: #include <LiquidCrystal.h> // initialize the library with the numbers of the interface pins LiquidCrystal lcd(12, 11, 5, 4, 3, 2);となっていたところをST7032iタイプ(液晶)では
// include the library code: #include <I2CLiquidCrystal.h> #include <Wire.h> // initialize the library I2CLiquidCrystal lcd(20, (bool)true); // | +--- set true if the power suply is 5V, false if it is 3.3V // +-------- contrast (0-63)とします。ライブラリの名前の先頭にI2Cがつき、Wire(I2C)ライブラリを読み込んでいます。またピンの設定の代わりに、コントラストと電源電圧の設定になっています。コメントにあるように上記のlcd(20, true)の20がコントラストを表す数値(0から63で、大きいほど濃い)で、trueが電源電圧が5Vのときの設定です。3.3Vのときにはfalseにします。
ACM1602NIタイプ(液晶)では
// include the library code: #include <I2CLiquidCrystal.h> #include <Wire.h> // initialize the library I2CLiquidCrystal lcd;とします。コントラストは外付けボリュームを使うので宣言するだけです。
SO1602Aタイプ(OLED)では
// include the library code: #include <I2CLiquidCrystal.h> #include <Wire.h> // initialize the library I2CLiquidCrystal lcd(0x3c, (uint8_t)127); // | +--- contrast (0-255) // +-------- I2C ADDR (SA0=L: 0x3c, SA0=H: 0x3d)とします。0x3cの部分はSA0をLにする(0x3c)かHにする(0x3d)かで変えます。127はコントラスト(輝度)で0から255(0xff)の値です。0にしても消灯はしません。 Grove LCD RGB backlight(液晶)では
// include the library code: #include <I2CLiquidCrystal.h> #include <Wire.h> // initialize the library I2CLiquidCrystal lcd(LCD_GROVE_RGB);とします。
バックライトの色を変えるには lcd.begin() より後で lcd.setRGB()を使います。次の例では
lcd.begin(16, 2); lcd.setRGB(0, 255, 0);バックライトを緑にしています。色の指定は R, G, B の順で 0から255が有効な値です。
Arduino Due などで Wire1 を使いたいときには
lcd.setWire(&Wire1);と書く事で Wire1 を利用できます。なお、Arduino Due 内蔵のI2Cバス0のプルアップ抵抗が小さすぎる場合があるそうです。その場合にはバス1 (Wire1) を試すか、プルアップ抵抗を外して外付けにしてみてください。
半角カナを利用したいときには Konnichiwa スケッチを参考にしてください。UTF-8形式でスケッチを保存(デフォルト)すれば、kana()関数で半角カナを表示できます。kana()関数は英数字も扱えるので print 関数代わりにも使えます。ただし文字コード変換のため遅くなります。
例:
lcd.kana("コンニチワセカイ");
LiquidCrystalライブラリのスケッチの例については、この液晶で動作することを確かめています。どんなことが出来るかは動かして確かめてください。
自由になるピン数が多いことを生かして、すべてのピンについてデジタル入力(出力)の状態を表示するスケッチを作ってみました。写真のように上の段にピンの番号、下の段に値(H/L)を表示します。そのまま使ってテスターのようにしてもいいですし、自分のスケッチに組み込んでも、よいと思います。
アナログ入力の値を表示するスケッチを作ってみました。写真のように上の段にピンの番号(A0からA3)を、下の段に値(0から1023)を表示します。テスターのように使ったり、自分のスケッチに組み込んでも、よいと思います。Arduinoのアナログ入力は電源電圧によって値が少し変化するので、その点には注意して下さい。
電子ピアノのスケッチにpinTestDigitalを組み込んだ例です。電子ピアノとしてスイッチを押すと音が鳴ります。pinTestDigitalの機能は、そのまま使っていてスイッチを押すとピンの表示がLに変わります。デジタル出力ピン(LEDとtoneに使っている)の値も表示されます。
ファイルをダウンロードしたら、Arduino IDE のメニュー「スケッチ」→「ライブラリーをインクルード」→「.ZIP形式のライブラリーをインストール...」をクリックし、ダウンロードしたファイルを追加するか、Arduinoフォルダ(デフォルトではマイドキュメント(Windows)もしくは、書類(Mac OS X)にある)の中のLibrariesフォルダ(ない場合には作る)に、zipファイル内のI2CLiquidCrystalフォルダをコピーします。
1.5以降のライブラリには MGLCD ライブラリ (モノクログラフィックLCDモジュールを Arduino で使うためのライブラリ)用に作られた mglcd.cpp と mglcd.h を利用しています。それらのファイルのライセンスは LGPL バージョン2.1以降です。