🕹️

e-paper を RaspberryPi で動かしてみた

2022/03/02に公開

材料

https://www.switch-science.com/catalog/5465/
https://www.switch-science.com/catalog/5464/

事前準備

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 が出たので下記を修正しました

epd1in54.cpp
unsigned int tempcol=1;
unsigned int templine=0;

epd1in54.cpp
int tempcol=1;
int templine=0;

main.cpp
time_t now;
struct tm* timenow;

main.cpp
// 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