esp-open-rtosを使ってみる

hd44780_lcd(16x02 LCD)

exampleディレクトリーには、センサーやTFT/LCDを扱うための沢山のサンプルコードが含まれています。
今回は、その中からhd44780_lcdのサンプルを紹介します。
hd44780_lcdと言われても何のことか分かりませんでしたが、GPIOで接続する16x02のLCDのことです。


HD44780に関するライブラリは、extras/hd44780の関数群として提供されています。
この関数群はGPIO/i2c兼用になっていて、「HD44780_I2C」の値に応じて、GPIOかi2cを切り替えますが、
提供されているMakefileにバグが有り、i2cとしてビルドされてしまいます。

以下がexamples/hd44780_lcd/Makefileですが、ここで定義されている「HD44780_I2C = 0」が有効になっていません。
これが分かるまで、ものすごく時間がかかりました。
PROGRAM = hd44780_lcd
EXTRA_COMPONENTS = extras/hd44780

HD44780_I2C = 0

include ../../common.mk

examples/hd44780_lcd/main.cの以下の部分にdefineを追加する必要が有ります。
esp-open-rtosのgithubに報告しているので、暫くしたらFIXされるかもしれません。
#define HD44780_I2C 0
#include <hd44780/hd44780.h>

LCDモジュールとの接続は以下の通りです。
LCDのピン番号 LCDのピンのSymbol ESP8266のGPIO番号
1 Vss(GND) GND
2 Vdd(※1) 5V(※3)
3 Vo(Contrast Adj) コントラスト調整用の可変抵抗器の出力
4 RS(Register Select) GPIO5
5 R/W(Read/Write) GND
6 Enable Signal(Clock) GPIO4
7 DB0 N/C
8 DB1 N/C
9 DB2 N/C
10 DB3 N/C
11 DB4 GPIO0
12 DB5 GPIO2
13 DB6 GPIO14
14 DB7 GPIO12
15 BackLight A(※2) 5V(※3)
16 BackLight K GND

(※1)LCDには駆動電圧が3.3Vのモジュール(低電圧版)と5Vのモジュールが有ります。5V版は3.3Vでは動きません
(※2)低電圧版は3.3V、5Vモジュールは5Vが基本ですが、5Vモジュールでも3.3Vで点灯するものとしないものがあります。
(※3)NodeMCUには5Vピンが無いので、USB-TTL変換器から供給し、GNDを共有しています。



HD44780に関するライブラリは、extras/hd44780の関数群として提供されています。
この関数群はGPIO/i2c兼用になっていて、「HD44780_I2C」の値に応じて、GPIOかi2cを切り替えます。
examples/i2c_lcd_testがi2c接続の場合のサンプルで、IO-ExpanderとしてPCF8574、または PCF8574Pを使います。
よく似たチップにPCF8574APが有りますが、これを使うときはi2cアドレスを0x3Fに変える必要が有ります。

こちらも、提供されているMakefileにバグが有り、「HD44780_I2C」の値が有効になっていませんが、
「HD44780_I2C」の値が未定義の時は、(たまたま)i2cとしてビルドされるので、何も変えなくても動きます。

LCDモジュール、PCF8574との接続は以下の通りです。
NodeMCUのパーツ図が無かったので、WeMosを使っています。
PCF8574の駆動電圧は3.3V、LCDの駆動電圧は5Vです。

PCF8574は拡張ポートへの出力と、拡張ポートからの入力を同時に行うことができます。
試しに、PCF8574を5Vで駆動してみましたが、拡張ポートからの入力が正しく動きませんでした。
SCL/SDAの入出力電圧と駆動電圧が一致していないと、このチップを使った入力動作は正しく動きません。
WeMos/NodeMCUの回路図を見ても、GPIO4/5はPullUpされている様には見えないのですが、
(なぜか)SCL/SDAのPullUp抵抗はなくても動きました。でも、PullUpした方が安定すると思います。


ソースを見ると、PCF8574のP3をBackLightの制御(ON/OFF)として使っていますが、
PCF8574の3.3V出力ではBackLightは点灯しません。
トランジスターを1つ加えて、LCDのCathode側(マイナス側)をON/OFFすれば動きます。
Baseの電流制限用抵抗は付けていませんが、出力電流が小さいので特に熱くなることもありません。


続く....