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言語を扱うにあたって,いろいろな知識を深めることができました.