I2C液晶のArduinoライブラリ – ST7032

ストロベリーリナックスや秋月電子のI2C液晶で使える、Arduinoのライブラリを作りました。

コントローラにST7032iが使用されているLCDなら使えると思います。

2014.10.13 追記:

  • コンストラクタ引数でI2Cスレーブアドレスを設定出来るようにしました。秋月電子、ストロベリーリナックスのモジュールを使う限りは変更不要です。
  • コントラスト値に64以上を設定するとBONビットに影響する不具合を修正しました。(注:BONは常に1なので実際の動作には影響しません)

2013.10.31 追記:

  • ダウンロード先のリンクが分かりにくいので追加しました。また、秋月のAQM0802A-RN-GBWを動作確認済みにしました。

2013.05.19 追記:

SB0802G

Arduino標準ライブラリのLiquidCrystalをベースにしているので、LiquidCrystalを使っているスケッチならクラスを差し替えて、初期化コードを少し変更するだけで使えます。

動作確認済みのLCDモジュール

動作すると思われるもの

スケッチはこちら:arduino_ST7032 (via tomozh/arduino_ST7032@GitHub)

zipファイル内の「arduino_ST7032-master」を「ST7032」にリネームし、arduinoの「libraries」フォルダにコピーして下さい。

ST7032 独自の機能があるので、以下のメンバ関数を追加しています。

コンストラクタ

ST7032 lcd(int i2c_addr);
i2c_addr: スレーブアドレス
コンストラクタ引数を省略した場合は 0x3E

コントラスト設定

void setContrast(uint8_t cont)
cont: コントラスト値 (0~63)

アイコン表示 (※アイコン表示機能の無いLCDではなにも起きません)

void setIcon(uint8_t addr, uint8_t bit)
addr : アイコンアドレス (0~15)
bit  : アイコン表示ビット (0x00~0x1F)

簡単な使い方

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

ST7032 lcd;

lcd.setContrast(30);            // コントラスト設定
lcd.print("hello, world!");

接続図はこんな感じ。I2Cは配線が少ないのが良いですね。
SB0802GやAQM0802A-RN-GBWの場合は、コンデンサ(1uF×3)を別途付ける必要があるので注意です。

接続図

左:SB1602B、右:SB0802G

SB1602BとSB0802G

SB1602Bのアイコン表示テスト

SB1602B

おまけ。I2Cつながりで、INA226モジュールと接続してみる。

参考:INA226でお手軽電圧・電流測定(ついでにBit-BangでI2C) | オレ工房

スケッチはこちら:ina226_lib.zip

INA226に接続

24 comments

  1. arduinoで無線(Morse)系のガジェットを作り始めました。
    秋月の小型のLCDでは何の問題もなかったのですが、バックライト付きの液晶でてこづっていましたが、要はスレーブアドレスが異なることがわかりました。
    アドレスを変えるのは、どの関数でできるのでしょうか。
    ライブラリーを維持つ必要がありますか?
    初歩的な質問で申し訳ありません。

  2. すみません、アドレスは固定です。
    取り急ぎ、ST7032.cppの「#define ST7032_I2C_ADDR 0x3E」のところを変更して対応いただけますでしょうか。
    後日、アドレスを変更できるようにライブラリを改修します。

  3. 早速お返事ありがとうございました
    月末バタバタしていて、お礼が遅れました。申し訳ありません。
    教えていただいたやり方でやってみます
    重ねてありがとうございました。

  4. お初にお目にかかります。コントラスト周りを調べていてスケッチを拝見しました。
    随所で引用されているようなので一応と思いまして。
    尚、既にご存知で行き違いでしたらご容赦下さい。m(__)m

    setContrast関数にて、「((cont >> 4) & 0x07))」は「((cont >> 4) & 0x03))」ではないでしょうか?
    貰ったパラメータが6ビットで収まっていればなんら問題にならないと思いますが、
    7ビット目で「booster circuit」を変えてしまう(最もブーストオン設定でor条件では永縁に’1’なのですが…)かもしれないので一応。
    ブーストオフして使う人で間違ったコンストラクトを設定した場合にしか発覚しないのですが、念の為と言う事で。
    今更1年以上前の記事にあやつけてるみたいで恐縮の限りなのですが、なにとぞご容赦の程。

  5. コメントに気付くのが遅くなり申し訳ございません。
    コントラストの件、ご指摘ありがとうございました。このように教えて頂けると、とても助かります。
    確かにビットマスクの値、間違っていますね。早速修正しました。

  6. 公開されている、Arduinoライブラリ– ST7032 を ESP8266 用に改変した物を
    当方の Web Site で公開しました。
    公開に関して何か不都合があれば御連絡下さい。
    公開を取止めます。
    又、当方の Web Site から 当ページへのリンクを貼りました。
    この件に関しても何か不都合があればご連絡ください。

    • ライブラリをご利用いただきありがとうございます。
      公開とリンクですが、もちろん問題ありません。
      ESP8266 は面白そうですね。興味があるのですが、なかなか取り掛かれてません。

      • ご快諾有難うございます。
        ESP8266 は、私も始めて1週間程度です。
        物自体は結構前から入手していたのですが、取り掛かれていませんでした。
        やっと遊び始めた所です。結構楽しめそうです。

  7. 有益なライブラリありがとうございます。 便利に使わさせていただいています。
    ところで、Serial.print(ln)との併用はできないのですか? デバグにSerial.printをつっこんでいるので、両方利用できると助かるのですが、どうも使えないような、、、。 私の使い方が悪いのでしょうか?

    • ライブラリのご利用ありがとうございます!
      Serial.printlnと併用できないのは認識していませんでした。
      いま手元にArduinoが無いのですぐ試せないのですが、近いうちに確認してみます。

    • Arduinoの準備ができたので試してみたのですが、Serial.printlnも同時に使えました。
      他に原因があるのかもしれませんね。ちなみに、私の環境は、Arduino UNO+Arduino 1.6.8です。

  8. 教員志望の学生です。
    中学校技術科の授業教材としてライブラリとスケッチを参考にさせていただきました。
    本トピックのスケッチを参考にし作製したスケッチを公の場で紹介してもよろしいでしょうか?
    教材紹介の場で学会などではないのですが、可能であれば参考ページと共に紹介させて頂きたいです。
    よろしくお願いいたします。

    • yasuさん、初めまして。
      公開や改変は特に制限ありませんので、自由に行っていただいて結構です。
      それにしても、今の中学技術家庭ではArduinoを使うんですね。
      僕が中学生の頃はインターフォンだったので、時代の変化を感じます。^^;

      • ありがとうございます。

        私は専門知識が薄いので、TOMOさんのサイトは簡潔にまとめてあり、初心者の私でも良くわかり、ありがたいです。
        Arduinoだけでなく、rasberry piの教材としての導入も考えているので、
        今後ともよろしくお願いいたします。

  9. Tomozhさま

    Arduino スターターキットをはじめたばかりのまったくの初心者です。
    下記スケッチをコンパイルしたところエラーになってしまいました。

    スケッチ→ライブラリーを使用→ST7032
    は 表示されています。

    何が悪いのか お教えいただけたら幸いです。よろしくお願いします。
    ********************************************
    #include
    #include

    ST7032 lcd;

    lcd.setContrast(30); // コントラスト設定
    lcd.print(“hello, world!”);
    *******************************************

    ”表示されたエラー”です。
    ビルドオプションが変更されました。全体をリビルドしています。
    sketch_st7032.ino:6:1: error: ‘lcd’ does not name a type
    sketch_st7032.ino:7:1: error: ‘lcd’ does not name a type
    コンパイル時にエラーが発生しました

    • こんにちは。
      コードを、以下のように変更してみてください。
      —-
      ST7032 lcd;

      void setup()
      {
      lcd.setContrast(30); // コントラスト設定
      lcd.print(“hello, world!”);
      }
      —-

  10. 秋月のバックライト付き小型LCDの AQM1602Y-NLW-FBW でも動作しました。
    便利に使わせていただいています。
    ライブラリをご提供いただき、どうもありがとうございます。

  11. ソースを見てbooster circuitオン固定?と頭を捻ったのですが、電源を3.3Vから取ること前提なのですね
    Vcc>4.5Vあたりからbooster circuitをオフにしないとうまく表示できないので
    電源電圧が変動しても(USB給電が途切れると電池駆動に切り替わる)コントラストを自動調整する小物を作ってたためうっかり標準的なArduino環境を忘れてました
    普通のArduino環境なら3.3V安定化電源が乗ってますもんね

    • コメントありがとうございます。
      自分のArduinoはUNOなので3.3Vではなく5Vです。それでも問題無く表示できていたので、BON=ONで良いのかなと思っていたのですが…。
      電源電圧に合わせて設定しなければいけないのは少々面倒ですね。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です