ESP32 NOKIA5110 LCDの表示テスト

JH7UBC 2020.1.10


ESP32でNOKIA5110LCDの表示テストをします。
NOKIA5110LCDは、NOKIA携帯5110に使われていたモノクロ・グラフィック液晶モジュールで、現在もAmazonなどで入手可能です。
解像度は、48×84ドットでVcc=2.7V~3.3Vですので、ESP32に直結できます。コントローラチップは、モトローラのPCD8544です。
ArduinoやSTM32では、LCD5110_Basicというライブラリ(Rinky-Drink Electronicsというサイトからダウンロードできます)を使いましたが、
ESP32では、コンパイル時にエラーがでてしまい、利用できません。
そこで、GitHubからAdafruit PCD8544 Nokia 5110 LCD LibraryAdafruit GFX Libraryをダウンロードして、
Arduino IDEのライブラリーにインストールして利用しました。
ESP32-DevKitCとNOKIA5110の接続は、次の通りです。

 ESP32 DevKitC  NOKIA5110
 GPIO14(HSPI SCK)  CLK
GPIO13(HSPI MOSI)   DIN
 GPIO27  D/C
GPIO15(HSPI SS)   CE(CS)
 GPIO26  RST
 3V3  Vcc
 GND  LIGHT,GND

5110のLIGHTは、GNDに接続するものとVccに接続するものがあるので要確認

接続回路図です。

定番の「Hello world!」の表示をやってみます。スケッチです。

このスケッチでは、まず花のようなイメージが表示され、「Hello world!」が 表示されます。

以下に表示関係の各関数についてまとめます。

 関 数  説  明  画像例
 display.begin();  初期化します。  
 display.clearDisplay();  screenとbuffaをクリアします。  
 display.display();  buffaのデータをNOKIA5110に送り、screenに表示します。  
 display.setContrast(n);  コントラスト調整、n=50程度ですが、見やすいように調整します。  
 display.setRotation(n);  画面を反時計回りに回転させます。n=1で90°、n=2で180°、n=3で270°、n=0で回転なし。  display.setRotation(1);
 
display.setCursor(x,y);   カーソルをx,yにセットします。  
 display.TextSize(n);  文字の大きさを指定します。n=1~5  
1行目TextSize(1)、2行目TextSize(2)、3行目TextrSize(3)です。

左側TextSize(4)、右側TextSize(5)です。
 display.setTextColor();  BLACKの場合、黒文字。WHITE,BLACKにすると白黒反転します。  
 display.print(n);
diplay.println(n);
 nは文字列または数値、変数で、print()は改行なしで表示します。
println()は文字を表示後改行します。
ただし、nが実数(浮動小数点)の場合、小数点以下2桁までしか表示しません。
 

1行目は、display.println("3.141592");で表示

 2行目は、display.println(3.141592);で表示

 display.write(n);  nはアスキーコード。でアスキーコードに対応した文字を表示することができます。  
display.drawPixel(x,y,BLACK);  (x,y)にドットを表示します。  
display.drawPixel(10, 10, BLACK);
座標(10,10)にドットを表示します。
display.drawLine(x1,y1,x2,y2,BLACK);  (x1,y1)から(x2,y2)まで直線を描きます  
display.drawLine(0, 0, 83, 47, BLACK);
座標(0,0)から(83,47)まで直線を描きます。
 display.drawCircle(x,y,r,BLACK);  (x,y)を中心に半径rの円を描きます。  
display.drawCircle(42, 24, 20, BLACK);
座標(42,24)を中心にして、半径20の円を描きます。
 display.fillCircle(x,y,r,BLACK);  (x,y)を中心に半径rの円を描き、中を塗りつぶします。  
display.fillCircle(42, 24, 20, BLACK);
(42,24)を中心に半径20の円を描き、中を塗りつぶします。
 display.drawRect(x,y,w,h,BLACK);  (x,y)を始点(左上)として、幅w、高さhの矩形(rectangle)を描きます。  
display.drawRect(20,10,30,20,BLACK);
(20,10)を始点として、幅30、高さ20の矩形を描きます。
 display.fillRect(x,y,w,h,BLACK);  (x,y)を始点として、幅w、高さhの矩形を描き、中を塗りつぶします。  
display.fillRect(20, 10, 30, 20, BLACK);
(20,10)を始点として、幅30、高さ20の矩形を描き、中を塗りつぶします。
 display.drawRoundRect(x,y,w,h,r,BLACK);  (x,y)を始点として、幅w、高さh、角の半径rの角の丸い矩形を描きます。  
display.drawRoundRect(20, 10, 30, 20, 5,BLACK);
(20,10)を始点として幅30、高さ20、角の半径5の角の丸い矩形を描きます。
display.fillRoundRect(x,y,w,h,r,BLACK);  (x,y)を始点として、幅w、高さhの角半径rの角の丸い矩形を描き、中を塗りつぶします。  
display.fillRoundRect(20, 10, 30, 20, 5,BLACK);
(20,10)を始点として幅30、高さ20、角の半径5の角の丸い矩形を描き、中を塗りつぶします。

練習問題として、sinカーブを描いてみます。
スケッチです。

sinカーブが表示されました。

inserted by FC2 system