2017/6/16

LiquidCrystal_I2C (LCM6102) 顯示器


記得在筆者很久以前的文章「App簡訊廣告看板」中, 我們有展示過將手機簡訊傳送至Arduino並透過LCD顯示出來. 然而隨著Arduino編譯器與開發環境不斷進化與改版(2017年六月已經來到Arduino IDE v1.8.3), 於不久前想把它拿出來顯示透過Alexa語音助理(Echo Dot)從雲端傳來的指令, 發現驅動程式已經無法使用了. 因此, 在筆者解決問題之後也順便把這篇筆者之前漏掉的內容補齊. 若讀者的Arduino IDE也是最新版的, 希望本篇文章可以幫到你.


LiquidCrystal_I2C接腳定義
整合成串列埠的LCD(背板上顯示為LCM1602控制器)只需四支腳, 定義如下如所示, 分別為GNDVCCSDASCL. 面對這種DHT11ESP8266LCM1602等之類的排針, 筆者一樣施展慣用的技倆: 用杜邦線先將它們全部接出來.





安裝LiquidCrystal函式庫
筆者安裝的是2015年版之後的NewliquidCrystal(v1.3.4)驅動程式, 經過測試它可以很順利在筆者的Arduino v1.8.2免安裝版上執行. 下載之後解壓縮, 再將NewliquidCrystal整個目錄搬到Arduino IDElibraries路徑下即可, 如下圖所示.





細部接線
Arduino與整合串列埠的LCM1602控制器接線如下圖, GND(Arduino GND)VCC(Arduino 5V輸出)SDA(Arduino A4)SCL(Arduino A5). 圖中省略液晶顯示面板部份.







Arduino程式
筆者的Arduino IDE開發環境是1.8.2 ZIP免安裝版. LCM6102的程式部份, 我們按照官方的初始化設定即可使用所提供的backlight函式點亮面板, 當螢幕不需要時可以呼叫noBacklight函式把燈關掉以節省電源.

// include external package https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
// This driver works well with Arduino v1.8.2
#include <LiquidCrystal_I2C.h>

// Addr, En, Rw, Rs, d4,d5,d6,d7 backlight, polarity
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3,POSITIVE); // initialize LCM1602 I2C module

void setup() {
    Serial.begin(9600); 
  
    lcd.begin(16, 2); // init LCD : 2 rows x 16 columns
    lcd.backlight();
    lcd.clear();
    lcd.print("Hello World!");
    delay(2000);
    lcd.noBacklight(); // turn off back light and wait for user input
}

void loop() {
    if( Serial.available() ) { // display user input through the serial console
        delay(100);
        lcd.backlight(); // turn on back light
        lcd.clear();
        while( Serial.available() ) {
            lcd.write(Serial.read());
        }
        delay(2000);
        lcd.noBacklight(); // turn off back light
    }
}



我們可以在串列埠監控窗中輸入文字並透過print函式將該文字秀在LCD螢幕上, 如下圖所示. 在串列埠監控窗下方, 請選擇「沒有行結尾」以避免LCD顯示\r\n這兩個字元.