LCDのバックライト(5V)を制御する


Raspberry PiのGPIO出力は3.3Vです。
5V仕様のLCDでも文字を表示するだけなら、何も考えずに使えますが、
バックライトには5Vを供給する必要があるので、バックライトをON/OFFする場合には、トランジスタで5Vラインのスイッ チングを行う必要があります。
回路図を以下に示します。


トランジスタのBase(ブルーのライン)をONにすると、トランジスタのCollectorがGndに落ちてLCDのバックライトが点灯し ます。
バックライト制御付きのコードは以下の様になります。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <wiringPi.h>
#include <lcd.h>

/*
 cc -o lcd lcd.c -lwiringPi -lwiringPiDev
*/

#define BACKLIGHT 6
#define DEBUG    0

int main(int argc, char **argv) {
    int fd_lcd;
    int stlen;
    int i;
    char string1[17];
    char string2[17];

    if(wiringPiSetup() == -1) {
        printf("Setup Fail\n");
        exit(1);
    }
    pinMode(BACKLIGHT,OUTPUT);
    fd_lcd = lcdInit(2,16,4,4,5,0,1,2,3,0,0,0,0);

if(DEBUG)printf("argc=%d\n",argc);
    if(argc == 1) {
        lcdClear(fd_lcd);
        digitalWrite(BACKLIGHT,0);
    } else {
        digitalWrite(BACKLIGHT,1);
if(DEBUG)printf("argv=%s\n",argv[1]);
        memset(string1,0,sizeof(string1));
        memset(string2,0,sizeof(string1));
        stlen=strlen(argv[1]);
if(DEBUG)printf("stlen=%d\n",stlen);
        if (stlen < 17) {
            strcpy(string1,argv[1]);
        } else if (stlen < 32) {
            strncpy(string1,argv[1],16);
            argv[1]=argv[1]+16;
            strncpy(string2,argv[1],stlen-16);
        } else {
            strncpy(string1,argv[1],16);
            argv[1]=argv[1]+16;
            strncpy(string2,argv[1],16);
        }
        lcdClear(fd_lcd);
        lcdPuts(fd_lcd,string1);
        lcdPosition(fd_lcd,0,1);
        lcdPuts(fd_lcd,string2);
    }
}

引数つきで実行するとバックライトをONにした上で、LCDに文字を表示します。
引数なしで実行するとLCDの表示をクリアしてバックライトをOFFにします。
$ sudo ./lcd "Hello World"
$ sudo ./lcd



最近、電流制限用の抵抗が内蔵されているディジタル・トランジスタという製品を知りました。
こちらに ディジタル・トランジスタの概要が紹介されていますが、ディジタル・トランジスタを使うと、電流制限用の抵抗が不要になります。
トランジスタと同様にBackLightのCathode側(マイナス側)をON/OFFします。
回路図を以下に示します。

なお、ディジタルトランジスタについてはこ ちらにも詳しい解説があります。