e-paper を RaspberryPi で動かしてみた
材料
事前準備
RaspberryPi に Visual Studio Code をインストール
$ sudo apt update
$ sudo apt install code -y
確認方法
$ cd Desktop
$ mkdir helloCode
$ code helloCode
RaspberryPi に bcm2835をインストール
bcm2835-1.71.tar.gz の 1.71 部分は最新のバージョンに書き換えてください。
次を参照:bcm2835: 公式
$ sudo wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.71.tar.gz
$ tar zxvf bcm2835-1.71.tar.gz
$ cd bcm2835-1.71/
$ sudo ./configure
$ sudo make
$ sudo make install
確認方法
デスクトップにフォルダと cファイルを作成し、コンパイル。最後に実行してみます。
$ cd Desktop
$ mkdir helloBcm
$ cd helloBcm
$ touch blink_led.c
blink_led.c
#include <stdio.h>
#include <stdlib.h>
#include <bcm2835.h>
#include <signal.h>
// Rpi P1ヘッダの22ピン(GPIO 25)をPIN_INと定義する
#define PIN_IN RPI_GPIO_P1_18
// Rpi P1ヘッダの22ピン(GPIO 25)をPIN_OUTと定義する
#define PIN_OUT RPI_GPIO_P1_22
// 割り込みコールバック関数
void signal_callback_handler(int signum)
{
printf("\ndetect key interrupt\n",signum);
bcm2835_gpio_write(PIN_OUT, LOW);
bcm2835_close();
printf("Program exit\n");
exit(0);
}
int main(int argc, char **argv)
{
if (!bcm2835_init())
return 1;
bcm2835_gpio_fsel(PIN_OUT, BCM2835_GPIO_FSEL_OUTP);
bcm2835_gpio_fsel(PIN_IN, BCM2835_GPIO_FSEL_INPT );
// VCCまでプルアップする
bcm2835_gpio_set_pud(PIN_IN, BCM2835_GPIO_PUD_UP);
signal(SIGINT, signal_callback_handler);
printf("press ^C to exit program ...\n");
while( bcm2835_gpio_lev(PIN_IN) == 0);
printf("Start Blink!\n");
while (1)
{
bcm2835_gpio_write(PIN_OUT, HIGH);
delay(500); // 0.5秒待つ
bcm2835_gpio_write(PIN_OUT, LOW);
delay(500); // 0.5秒待つ
}
}
コンパイルしてみる。
$ gcc blink_led.c -o blink_led -l rt -l bcm2835
作成されたプログラムを次のコマンドで実行します。
$ sudo ./blink_led
参考
【Raspberry Pi】Visual Studio CodeをRaspberry Piにインストールする - ソースに絡まるエスカルゴ
bcm2835 ライブラリによるスイッチ入力とLEDの点滅
公式のサンプルコードを動かしてみる
次のページにて、download ボタン押下でサンプルコード取得。
e-paper display - GOOD DISPLAY
zipを展開します
$ cd Download
$ unzip GDEH0154D27-raspberry-DEMO-20191025b41d.zip
$ code bcm2835_154D27
コンパイル時に作成されている .o ファイル(object file)は一旦削除する。
readme.txt の How to use を参考にコンパイル・実行する
$ make
$ sudo ./epd
つまづきポイント
$ make
した時に error が出たので下記を修正しました
古
unsigned int tempcol=1;
unsigned int templine=0;
新
int tempcol=1;
int templine=0;
古
time_t now;
struct tm* timenow;
新
// time_t now;
// struct tm* timenow;
$ sudo ./epd
しても console に何も表示されませんが、実行されてます。
一度 $ ctrl + c
で実行を終了しておきましょう。
readme.txt を参考に ディスプレイアダプタ基盤のDESPI-C02とRaspberryPiのGPIOを接続します。
e-paper と DESPI-C02 接続の向きは下記を参考に。
Raspberry Pi Picoと電子ペーパーの使い方 – スイッチサイエンス マガジン
接続できたら、もう一度 $ sudo ./epd
を実行してみましょう。
e-paperに サンプルの画像が表示されたら、確認成功です。
WiringPi と bcm2835って何が違うの?
Wiring Pi は、Raspberry Pi 用の C言語で書かれた GPIOアクセスライブラリです。
GPIO を使いやすくするライブラリですね。
WiringPi
bcm2835 も GPIOアクセスライブラリなので、役割は同じようです。
引用:bcm2835ライブラリでは、例えばGPIOピンの状態の変化を知るにはポーリングしないといけなくて(それはおそらく組み込み系では普通の事態なんだろう)、たくさんのGPIOピンの変化を汎用的に追跡しようとすると、使いこなすのは難しくなっている。
だそうです。
参考
Raspberry Pi用pigpio Library - その1:腰も砕けよ 膝も折れよ:So-net blog
WiringPi・bcm2835 それぞれでe-paperを実行する方法
サンプルアプリケーションのダウンロード
以下にアップされています。
File:1.54inch e-Paper Module code.7z - Waveshare Wiki
2019/03/27 の バージョンだと、下記の構成でした。
- Arduino
- RaspberryPi
- bcm2835
- python2
- python3
- wiringpi
- STM32
参考
RaspberryPi上のPythonから電子ペーパー(e-Paper)を制御する - Qiita
Discussion