ラズパイでモニター出力

raspberry pi zero 2 w を使って,モニターに 「Hello World!」を出力します.

Pythonを使うとちゃっちゃとできるんですが,今回”ハード”を実感してみたかったのでC言語でプログラミングしてみました.

準備するもの

まずはraspberry pi 本体を準備します.ワシはzero 2 w を使いました.

次にジャンプワイヤー.ワシのマシンにはピンヘッダをはんだ付けしているので,メス-メスのジャンプワイヤーを使いました.

次に出力モニターとなるI2C LCD 1602モジュール.Amazonで1500円くらいで売っていると思います.

ジャンプワイヤー接続

razpberry pi の GPIOについてみてみましょう.

今回使用するピンヘッダーは SDA, SCL, 5V power, Ground を用います.

接続する全体像は次の図のようになりました.

Hello World を出力するプログラム

今回,C言語とWiringPiを使ってプログラムを書きました.

WiringPiをインストールしていない場合,

sudo apt-get update
git clone https://github.com/WiringPi/WiringPi
cd WiringPi
./build

これでWiringPiが使えるようになると思います.

HelloWorldを出力するCコードを書きましょう.

#include <stdio.h>
#include <wiringPi.h>
#include <wiringPiI2C.h>
#include <string.h>

int LCDAddr = 0x27;
int BLEN = 1;
int fd;

void write_word(int data){
	int temp = data;
	if ( BLEN == 1 )
		temp |= 0x08;
	else
		temp &= 0xF7;
	wiringPiI2CWrite(fd, temp);
}

void send_command(int comm){
	int buf;
	buf = comm & 0xF0;
	buf |= 0x04;			
	write_word(buf);
	delay(2);
	buf &= 0xFB;			
	write_word(buf);

	buf = (comm & 0x0F) << 4;
	buf |= 0x04;			
	write_word(buf);
	delay(2);
	buf &= 0xFB;			
	write_word(buf);
}

void send_data(int data){
	int buf;
	buf = data & 0xF0;
	buf |= 0x05;			
	write_word(buf);
	delay(2);
	buf &= 0xFB;			
	write_word(buf);

	buf = (data & 0x0F) << 4;
	buf |= 0x05;			
	write_word(buf);
	delay(2);
	buf &= 0xFB;			
	write_word(buf);
}

void init(){
	send_command(0x33);	
	delay(5);
	send_command(0x32);	
	delay(5);
	send_command(0x28);	
	delay(5);
	send_command(0x0C);	
	delay(5);
	send_command(0x01);	
	wiringPiI2CWrite(fd, 0x08);
}

void clear(){
	send_command(0x01);	
}

void write(int x, int y, char data[]){
	int addr, i;
	int tmp;
	if (x < 0)  x = 0;
	if (x > 15) x = 15;
	if (y < 0)  y = 0;
	if (y > 1)  y = 1;

	addr = 0x80 + 0x40 * y + x;
	send_command(addr);
	
	tmp = strlen(data);
	for (i = 0; i < tmp; i++){
		send_data(data[i]);
	}
}


void main(){
	fd = wiringPiI2CSetup(LCDAddr);
	init();
	write(0, 0, "HELLO WORLD");
	write(1, 1, "BY OGAWA");
}

プログラムが書けたらコンパイルします.-lwiringPi オプションを付けることでwiringPiをロードします.実行の際には,sudoも一緒に書いておきます.

gcc monitor.c -lwiringPi
sudo ./a.out

これでモニターに「Hello World」を出力することができました.

今回C言語を扱うにあたって,いろいろな知識を深めることができました.

「Hello World」までのイベントの考察