1. 概要
    Arduinio IDE配下のATtiny85からI2C-LCDを使う方法については先行事例が沢山ありますが,配線接続やライブラリの使用について肝心なところの記述があいまいで,先行事例を複数参照して何とかできるようになりました。これは,その成果をまとめた記事です。以下の記述をトレースすれば簡単に動かすことができます。
  2. ハードウェア
    1. SCL,SDAのピンは固定
      後述のTinyWireMライブラリはATtinyが持っているUSI(Universal Serial Interface)を用いるため使用するピンは固定されます。
      ATtiny85の場合 PIN5–SDA,PIN7–SCL です。
    2. ATtiny85とI2C-LCDの接続
      下の図のとおりです。(場合によってはリセットを配線しておくと便利かも)
      SCL,SDAがI2C-LCD内でVccにプルアップされていない場合は10kΩ程度の外付け抵抗でVccにプルアップします。
  3. ライブラリ
    1. TinyWireM
      ATtinyをI2Cのマスターとして動かすためのライブラリです。

      1. Arduino IDEのライブラリマネージャからインストールします。
      2. インストールが終ったらArduino IDEを再起動します。
    2. Arduino-ST7032改
      I2CライブラリのWireやTinyWireMを利用してI2C-LCDを動かすためのライブラリです。

      1. 下のURLをクリックしてarduino_ST7032-master.zipをダウンロードします。
        https://github.com/kimio-kosaka/arduino_ST7032/archive/master.zip
      2. Arduino IDEのメニュー「スケッチ」→「ライブラリをインクルード」→「.zip形式のライブラリをインストール」と進みます。
      3. ファイル選択画面になるのでダウンロードしたarduino_ST7032-master.zipを選択します。
      4. ライブラリにarduino_ST7032-masterが追加されます。
      5. インストールが終ったらArduino IDEを再起動します。
    3. ライブラリ Arduino-ST7032改オリジナルArduino-ST7032 をWireライブラリとTinyWireMライブラリの両方に対応するよう改編したものです。
      1. ATtinyを用いる場合はTinyWireMを,ATtinyでないときはWireを利用するようプリプロセッサの#if〜#else〜#endifで記述しています。
      2. I2C制御メソッドの接頭句がWire.で記述されているので,TinyWireMの場合は#define Wire TinyWireMの記述で接頭句の置換をしています。
      3. 詳細は下のURLのソースコードで。
        https://github.com/kimio-kosaka/arduino_ST7032/blob/master/ST7032.cpp
  4. スケッチ
    ATtiny85 から 小型I2C-LCD AQM0802A に”hello” を表示します,

    #include <TinyWireM.h> 
    #include <ST7032.h>
    
    ST7032 lcd;
    
    void setup() {
      // set up the LCD's number of columns and rows: 
      lcd.begin(8, 2);
      lcd.setContrast(40);
      // Print a message to the LCD.
      lcd.print("hello");
    }
    
    void loop() {
      // set the cursor to column 0, line 1
      // (note: line 1 is the second row, since counting begins with 0):
      lcd.setCursor(0, 1);
      // print the number of seconds since reset:
      lcd.print(millis()/1000);
    }
    
    ※ 先頭行の #include <TinyWireM.h> を省略しても動きます。
  5. 参考
    ATtiny85をArduino IDEで使う方法→「Arduino IDEでATtiny他の開発