2019年9月29日日曜日

ST7032が載ったLCDをArduinoで動かしてみた


背景

Arduinoとは、プログラムを書き込めるマイコンボードです。

LCDとは Liquid Clystal Display の略で液晶画面のことです。
この記事で利用するLCDは、16x2や8x2で文字を表示できるものです。

今まで利用させてもらっていたライブラリがMITライセンスだったので、自分が欲しい機能を追加して、Arduino IDEのライブラリマネージャーからダウンロード出来るライブラリとして公開してみました。

便利だと思うので、使い方を共有します。

使ったもの

  • Arduino IDEが使えるPC
    Ardiino IDEは下記のページからダウンロードできるので、PCにインストールしてください。
    Arduino - Software
  • AE-AQM0802
    3.3Vで動く8x2のLCDです。
    5Vしか供給できないArduinoで使う場合は、3.3Vレギュレータなどを利用して3.3Vを作って供給してください。
  • AE-AQM1602
    3.3〜5Vで動く16x2のLCDです。
  • Arduino Uno
    標準的なArduinoです。
  • ブレッドボード
    LCDから線を引き出すための部品です。
  • ジャンパワイヤ
    LCDとArduinoを配線するための部品です。

配線

それぞれ配線します。

AQM0802の場合

秋月電子やスイッチサイエンスで売られている8x2のLCDは3.3Vで動作するので、5Vではなく3.3Vを給電します。

Arduino LCD
3.3V VCC
GND GND
SDA(Uno: A4) SDA
SCL(Uno: A5) SCL

PULL UP抵抗ははんだを盛って有効にしておきます。


接続するとこうなりました。


AQM1602の場合

秋月電子で売られている16x2のLCDは3.3〜5Vで動くので、今回は5Vを給電します。
電圧によって適切なコントラストの設定値が変わるので、字が表示されなかったり薄かったらコントラスト値を大きく、字が濃かったり画面が真っ黒だったらコントラスト値を低くしてみてください。

Arduino LCD
5V VCC
GND GND
SDA(Uno: A4) SDA
SCL(Uno: A5) SCL

PULL UP抵抗ははんだを盛って有効にしておきます。


接続するとこうなりました。


ライブラリをインストール

スケッチ -> ライブラリをインクルード -> ライブラリを管理 を選んでライブラリマネージャーを開きます。


ライブラリマネージャーの検索欄にST7032_asukiaaaと入力し、「ST7032_asukiaaa」を選んでインストールしてください。


プログラムを書き込み

ライブラリに含まれるサンプルプログラムを利用して、LCDに文字を表示してみます。

プログラムを開く前に、ツールのボードとシリアルポート を書き込む対象のArduinoのボード情報とポートにして、Unoにプログラムを書き込める状態にします。
ボードはArduino Uno、ポートはArduinoをUSBで接続した時に出てきたものを選びます。
(ArduinoはPCにUSB接続しておいてください。)


ファイル -> スケッチ例 -> ST7032_asukiaaa -> HelloWorldを選んでサンプルプログラムを開きます。


記事を書いている時点でのHello Worldのコードはこちらです。
#include <ST7032_asukiaaa.h>

ST7032_asukiaaa lcd;

void setup() {
  lcd.begin(16, 2); // columns and rows

  lcd.setContrast(30);
  // If lcd become black, try reduced value for contrast
  // lcd.setContrast(10);

  lcd.print("hello!");
}

void loop() {
  lcd.setCursor(0, 1);
  lcd.print(millis()/1000);
}

概要を説明します。

「begin(16, 2)」でLCDの幅と高さを指定しています。
8x2のLCDを使う場合はbegin(8x2)とするのが良いですが、1行あたりの文字数は記事を書いている時点ではライブラリ内部で利用していないので、LCDの行数さえ合っていれば良いです。

「setContrast」でコントラスト(文字の濃さ)を決めています。
適切なコントラストの設定値は駆動電圧によって変わります。

コントラストの値が小さすぎると文字が表示されないので、「文字を表示しているはずなのに何も表示されない」という場合はsetContrastに渡す値を大きくしてみてください。
逆に、画面が真っ黒だったらコントラスト値を小さくしてください。

Arduino IDEの右矢印ボタンを押すと書き込みが行われるので、配線が成功していればLCDに文字が表示されると思います。


3.3Vコントラスト30で動かしたAQM0802


5Vコントラスト30で動かしたAQM1602


5Vコントラスト10で動かしたAQM1602


なお、コントラストは電圧に依存するようなので、AQM0802同様3.3Vで動かせば、AQM1602もコントラスト30で読み取れる文字の濃さになります。

3.3Vコントラスト30で動かしたAQM1602


他の機能: 利用するWireを変える

このライブラリは元のライブラリをフォークしただけではなく、Wire(I2Cのポート)を変える機能を追加しています。

Arduino Due、ESP32、TeensyなどWireの他にWire1などが利用できるボードでWire1でLCDを使いたい場合は、beginの前にsetWireという関数で利用したいWireを設定できます。
setWireにはbeginしたWireのを渡してください。

void setup() {
  Wire1.begin();
  lcd.setWire(&Wire1);
  lcd.begin(16, 2); // columns and rows
}

まとめ

Arduinoでライブラリを通してLCDを制御して文字を表示できました。

2 件のコメント :

パオさん さんのコメント...

Arduino UNO R4で、秋月電子のAQM1602Yに表示するために使用できるライブラリを探していましたが、「ST7032_asukiaaa h」を使わせて頂いたところ無事表示できました。
電源は5Vで、コントラストは「15」で良い感じです。

Asuki Kono さんのコメント...

記事の情報とライブラリが役に立ったようで良かったです