注目キーワード

【Arduino】Raspberry Pi Pico W でe-Paper(電子ペーパー)を使ってみる!Arduinoプログラミング!

すけろく
Raspberry Pi Pico Wでお天気情報を
インターネットから取得できたな。
げんろく
うむ。
お天気情報を取り込むことができたな。
すけろく
次は、お天気情報をディスプレイに
表示させたいな。
げんろく
よし。
ならば、e-Paper(電子ペーパー)に表示してみるか!
今回は記事では、「Raspberry Pi Pico W」をArduinoでプログラミングします。
インターネット上の天気情報サービス「OpenWeather」から1時間おきに天気情報を取得して「e-Paper(電子ペーパー)に表示させてみます。
また、起動時に時刻同期することで、正確な時刻を元にデータ取得や、命令の実行を行います。
Raspberry Pi Pico W」は、Wi-Fi付きのスリムなマイコンで、バッテリーや電池での駆動も想定されます。
そのため、電源消費効率のよい「e-Paper(電子ペーパー)とも相性が良さそうです。

そこで、今回はWaveShare社の提供している「Raspberry Pi Pico用 2.13インチ e-Paper ディスプレイ(白黒赤)212×104」を使用してみたいと思います。

Raspberry Pi Pico W」と接続する環境の構成方法や、画像を「e-Paper(電子ペーパー)で表示させるためのプログラムを紹介します。

この記事の前提となる「Raspberry Pi Pico W」のはじめかたについては、次の記事で紹介しています。
関連記事

すけろく ついに、国内でもRaspberry Pi Pico Wを手に入れたぞ! げんろく Wi-Fiモジュールがついているので、 国内の技適取得が必要だったからな。 すけろ[…]

記事内でご紹介する「Raspberry Pi Pico W」はこちら!


Raspberry Pi Pico W
Arduino、C/C++、MicroPythonに対応している組み込み開発キットです。
正確なタイマ機能、温度センサーなどを備えたモデルです。ディスプレイ等がないため、消費電力を抑えた構成をとることができます。いろいろ遊べますよ~

Click Me !!Amazonで確認
Wifi対応の小さなマイコン!ここからはじめましょう!
Raspberry Pi Pico用 2.13インチ e-Paper ディスプレイ(白黒赤)212×104
e-Paper(電子ペーパー)ディルプレイです。表示速度や再描画時間はかかりますが、基本的に省電力で運用が可能です。赤、黒、白の三色表示ができるタイプのものです。
WaveShare社の商品には、インターフェースや、表示領域(インチ)が異なるものもたくさんあります。
スイッチサイエンスで確認

Raspberry Pi Pico W」は、Wi-Fi接続やBluetooth接続(今後サポート期待)ができるので、これができるとできることが広がりそうですよ!

ぜひ、皆さんも挑戦してみてくださいね!

今回の目標

今回は、インターネット上のお天気情報サービスである「OpenWeather」から、住んでいる場所の現在の天気を取得します。
OpenWeatherのお天気情報を取得する手順は、次の記事で紹介しています。
関連記事

すけろく Raspberry Pi Pico Wをインターネットに 接続できたということは、 インターネット上のサービスを使えるということだな。 げんろく うむ。 インターネット上の情報を取得する[…]

取得した情報をもとに、「e-Paper(電子ペーパー)に出力します。

全体の構成

全体の構成は次のようになります。

処理の流れ

プログラム内での処理の流れは次の通りです

  1. Wi-Fiアクセスポイントへの接続
  2. 時刻同期する
  3. OpenWeatherへアクセスする際のURLを生成
  4. OpenWeatherへ接続しJSON形式データを取得
  5. JSON形式データから対象の値を取得
  6. e-Paper(電子ペーパー)に表示する

上記の④~⑥を1時間に1回繰り返す

Raspberry Pi Pico W でSPI通信を使う

今回使用している「e-Paper(電子ペーパー)は、「SPI」通信を使用して「Raspberry Pi Pico W」から表示制御します。

SPI(Serial Peripheral Interface)は、マイクロコントローラとその周辺ICの間でよく使用されるインターフェースの1つです。
SPIは、同期式/全二重のメイン‐サブノード型インターフェースです。
メイン(SPIメイン)またはサブノード(SPIサブノード)からのデータは、クロックの立上がりまたは立下がりエッジによって同期がとられます。
また、メインとサブノードは、同時にデータを送信することが可能です。
SPIには、3線式のものと4線式のものがあります。一般的な4線式のSPIの接続形態は次の通りです。

役割 説明
CS チップ・セレクト(CS)サブノードの選択のために使用されるもの。
SCLK クロック(SPI CLK、SCLK)同期用のクロック信号を送受信するもの。
クロック信号を生成する方がメインと呼ばれます。
メインとサブノードの間で送信されるデータは、メインによって生成されるクロックと同期しています。
MISO メイン入力/サブノード出力(MISO)
メインノードがサブノードからデータを受信する際に使用
MOSI メイン出力/サブノード入力(MOSI)
メインノードからサブノードへデータを送信する際に使用

Raspberry Pi Pico W」は、2つのSPI通信用インタフェース(SPI0、SPI1)をもっており、使用するGPIOを変えることができます。

今回は、SPI0の初期設定GPIOを使用します。

初期設定で、どのGPIOを使用するかは、今回使うボードマネージャ「Raspberry Pi Pico/RP2040」の中で定義されています。

初期設定GPIOは、次の通りです。

役割 GPIO 説明
CS 17 SPIのCSに対応しています
SCK 18 SPIのCLKに対応しています。
TX 19 Raspberry Pi Pico W をメインノードとした場合のデータ送信用です。
SPI のMOSIに対応しています。
RX 16 Raspberry Pi Pico W をメインノードとした場合のデータ受信用です。
SPI のMISOに対応しています。

Raspberry Pi Pico W」は、メインノードになります。

e-Paper(電子ペーパー)へのデータ送信にはTX(MOSI)を使用します。

RX(MISO)は今回使用しません。

Raspberry Pi Pico Wの準備

今回は、「Raspberry Pi Pico W」と「e-Paper(電子ペーパー)を電子回路で接続します。
そのため、いくつか準備するものがあります。
  1. Raspberry Pi Pico Wにピンヘッダをはんだ付けする
  2. ブレッドボードなど電子回路を構成するために必要なものを準備する

 Raspberry Pi Pico Wにピンヘッダをはんだ付けする

Raspberry Pi Pico W」には、ピンヘッダをつけるための穴がついています。

ピンヘッダをつけることで、ブレッドボードや、ディスプレイのシールドなどと接続することができます。

ピンヘッダとは次のようなものです。

M5Stamp Picoや、e-Paper(電子ペーパー)をブレッドボードに接続する際には次のものを使用しています。

秋月電子さんの1×40ピンヘッダ

ピンヘッダ 1×40 
入手元:秋月電子
型番:PH-1x40S
片方のピンが長いものになります。
40ピンありますので、8ピン分を切って使うなどできます。
秋月電子さんの通販サイトURLはこちらです。
はんだ付けの手順や、必要となる道具のおススメについては、次の記事で紹介しています。
関連記事

電子工作という言葉を聞くとまず思い浮かぶのは、中学校の技術家庭の授業でやったはんだ付け。 最近の学校は実習とかやっているのかなとふと思います。 子供の頃は何となく作業していたので、今思うと「よく部品壊さなかったな・・・」と思いま[…]

Raspberry Pi Pico W」にピンヘッダをつけると次のようになります。

ブレッドボードなど電子回路を構成するために必要なものを準備する

今回使用するe-Paper(電子ペーパー)は、SPI通信を使って制御します。

Raspberry Pi Pico W」と「e-Paper(電子ペーパー)、次のような構成で接続します。

e-Paper(電子ペーパー)への電源は、別途、3.3Vの電源を用意しました。

e-Paper と Raspberry Pi Pico W の接続
e-Paper と Raspberry Pi Pico W の接続 (クリックすると拡大できます)

今回使用した電源はこちら!

KKHMF 2個 MB102 ブレッドボード 電源
電源アダプター用のDCジャック、UEBなどが入力として使えます。
ブレッドボードに差し込んで使用します。3.3V と5Vを切り替えて使えます。
電圧とブレッドボードへの差し込み方向を間違えないようにしましょう!

Click Me !!Amazonで確認
ブレッドボードを使った回路作成にはこれがあると便利!
実際にブレッドボードに接続したイメージは次の通りです。

ブレッドボード、ジャンパワイヤはこちらがおススメです!

サンハヤト ブレッドボード SRH-21CE
電子回路の試作を行う際に使用するツールです。
左右にVinとGNDがあり、中心部分に回路を構成して使います。

Click Me !!Amazonで確認
まずはここから!ベーシックなブレッドボードです!
ジャンパーワイヤ130pcs オス-オス forブレッドボード
電子回路の試作を行う際に使用するツールです。
こちらは、ワイヤの両端がオスーオス(差し込み型)
になっています。
ブレッドボード上で使用する際にはこちらが便利です。
130pcsあり、長さも110/150/200/250mmとあるので
持っておくと便利です。

Click Me !!Amazonで確認
まずはここから!これがないとはじまらない!

サンハヤト ジャンプワイヤ SPP-200 200ミリ
電子回路の試作を行う際に使用するツールです。
長さは200mmです。持っておくと便利です。
小口で買うのに適しています。

Click Me !!Amazonで確認
まずはここから!ベーシックなブレッドボードです!

【PSE認証済】ACアダプター 5V 4A DC電源

100V電源を5V4Aに変換する電源アダプターです。
PSE認証付きのものを購入しましょう!

Click Me !!Amazonで確認
これが一つあると便利です!

 

e-Paper(電子ペーパー)をブレッドボードに接続する際には次のものを使用しています。
両端ロングピンヘッダ 1×40 (40P 6.1)
入手元:秋月電子
型番:PH-1x40SG(6.1/6.1)
両端のピンが長いものになります。40ピンありますので、
8ピン分を切って使うなどできます。秋月電子さんの通販サイトURLはこちらです。

 

e-PaperをRaspberry Pi Pico W で使うために必要な設定

今回は、Arduino IDEを使ってRaspberry Pi Pico Wにプログラムを書き込みます。

e-Paperの販売元であるWaveShare社が、e-Paper向けのArduinoライブラリを提供しています。

ライブラリはArduino IDEのライブラリ管理機能ではインストールできません。

プログラムは以下の手順でダウンロードできます。

所要時間:10分程度

GitHub

Arduino libraries for Waveshare e-paper series. Contribute t…


左のリンクから、WaveShare社のGitHubサイトにアクセスします。

GitHubページの「code」ボタンを押して、「Download ZIP」を押します。
ダウンロードが開始されます。
No image

「epd-library-arduino-master.zip」というファイルがダウンロードできますので、解凍ツールで解凍します。
No image

解凍後、以下のフォルダをコピーします。
「epd-library-arduino-master」-「2.13inch_e-paper_b」-「epd2in13b」

コピーしたフォルダを以下の場所にコピーします。
「Cドライブ」-「Users」-「”ユーザ名”」-「Documents」-「Arduino」-「libraries」
各ファイルを以下のとおり修正します。
<修正前>
#include <avr/pgmspace.h>


<修正後>
#include <api/deprecated-avr-comp/avr/pgmspace.h>


以下のファイルの内容を書き換えます。
※Arduinoで使用する場合はこの手順は不要です。
<対象ファイル>
・epdpaint.cpp
・font8.cpp
・font12.cpp
・font16.cpp
・font20.cpp
・font24.cpp
「epdif.h」ファイルを以下の通り修正します。
<修正前>
// Pin definition
#define RST_PIN 8
#define DC_PIN 9
#define CS_PIN 10
#define BUSY_PIN 7


<修正後>
// Pin definition
#define DC_PIN 11
#define CS_PIN 17
#define RST_PIN 12
#define BUSY_PIN 13


「epdif.h」の内容をRaspberry Pi Pico Wで使用するGPIOの情報に書き換えます。
※別のGPIOピン番号にした場合は、読み替えてください。
<修正後>
①ヘッダーの追加
#include <Arduino.h>
②SPI開始時の設定追加(EpdIf::IfInit内の変更)
SPI.begin(true);

「epdif.cpp」の内容を書き換えます。
以上で、手順は完了です。

Raspberry Pi Pico W で e-Paperに画像とお天気情報を表示する

Raspberry Pi Pico W」を使って、e-Paper(電子ペーパー)に画像を表示するプログラムを作成します。

今回使っているe-Paperは、赤、白、黒の3色表示が可能であるため、表示する画像として、次のものを用意しました。

[白ー黒]表示用の画像
[白ー黒]表示用の画像
[赤]用の画像
[赤]用の画像
まず、[白ー黒]用画像をもとに白黒で描画した後に、[赤]用の画像で作成した画像を赤で上書きします。

また、1時間に1回、インターネット上の天気情報サービスOpenWeatherから天気情報を取得し、天気の種類(晴れ、くもりなど)を判定して画面に表示します。

e-Paper(電子ペーパー)は、画面の表示切替に時間がかかり、アニメーションなどは不向きなので、今回は静止画として表示します。

 

プログラム作成前に確認するポイント

プログラムをスケッチに作成する前に、前提となる以下のポイントについて、確認を行ってください。

 ポイント① Wi-Fi接続と時刻同期

Wi-Fi接続と時刻同期の方法については、次の記事で紹介しています。

Wi-Fi接続方法は、次の記事で紹介しています。

関連記事

すけろく Raspberry Pi Pico W がArduinoで プログラムを書き込めることは確認できた。 げんろく ああ。無事、初回書き込みが出来て、 COMポートとしても認識されたな。 […]

時刻同期方法は、次の記事で紹介しています。

関連記事

すけろく 前回の記事で、Raspberry Pi Pico Wを Wi-Fi接続できた。 げんろく ああ。インターネットへのアクセスが できるようになったな。 すけろく これ[…]

プログラム内で、Wi-Fi接続に使用する「ssid」と「password」というものがあります。
ご自分の環境に合わせて値を修正してください。
(スケッチ例では「”your-ssid」、「”your-password」と記載しています。)

 ポイント② OpenWeatherからの天気情報取得

OpenWeatherからの天気情報取得方法の詳細は、次の記事で紹介しています。

関連記事

すけろく Raspberry Pi Pico Wをインターネットに 接続できたということは、 インターネット上のサービスを使えるということだな。 げんろく うむ。 インターネット上の情報を取得する[…]

 

「OpenWeatherのAPIキー」、「OpenWeatherのルート証明書」は、プログラム内の次の部分で定義しています。
ご自分の環境に合わせて値を修正してください。
(スケッチ例では、「”Please correct it to the value that suits your environment.”」と記載しています。)

項目名 プログラム内の定義名(変数名)
OpenWeatherのAPIキー
const String Api_KEY
OpenWeatherのルート証明書
const char*ow_rootca

 ポイント③ 必要な追加ライブラリのインストール

以下のライブラリを追加インストールします。

使用する情報 設定値(バージョン)
ライブラリ名① ArduinoJSON (6.21.1)
ライブラリ名② Time By Michael Margolis (1.6.1)
ライブラリ名③ epd2in13b (e-Paper) *1
*1 このライブラリは、前述の手順を行っていればインストールされているので作業は不要です。

ライブラリのインストール手順については、次の記事を参考にしてください!

関連記事

「Arduino IDE」では、使用する機能やセンサー、ボードを使用するプログラムで使用できる有効なライブラリが公開されています。 ライブラリを使用すると、効率的かつ品質を確保したプログラミングが可能です。 この記事では、Ar[…]

 スケッチ(プログラム作成)と書き込み

 Arduino IDE スケッチ例

スケッチ例は、GitHubで公開していますので、次のリンクからアクセスしてください。

GitHub

Contribute to karakuri-musha/ePaper-by-Arduino-for-Raspberry…

■ GitHubからのスケッチ例のダウンロード方法

次の手順でダウンロードしてください。

① 前述のリンクからGitHubのページへ移動します。

②GitHubページの右上にある「Code」をクリックし、表示されるメニューから「Download Zip」を選択します。

③「ePaper-by-Arduino-for-Raspberry-Pi-PicoW-main.zip」というファイルがダウンロードされます。

④ダウンロードしたファイルを解凍してください。

⑤解凍したフォルダにある「Src」フォルダ内にある「RaspberryPi_Pico_W_epaper.ino」をArduino IDEで開きます。

⑥「RaspberryPi_Pico_W_epaper.ino」と「Original_Icon_Src.h」が開かれていることを確認します。

以上で、完了です。

Arduino IDEで、次のポイントについて編集または追加します。

Raspberry Pi Pico Wへの書き込み

2回目以降

  1.  Raspberry Pi PicoをパソコンにUSB接続します。
  2.  Arduino IDEで前述のプログラムを記載して、 「ファイル」メニューから「名前を付けて保存」で任意の名前を付けて保存します。
  3. 「ツール」メニューから「ボード」情報を確認し、次のものを選択します。
    「Raspberry Pi Pico/RP2040」-「Raspberry Pi Pico W」
  4. 「シリアルポート」にマイコンを接続したCOMポートが指定されているかも確認します。
  5. 「ツール」メニューから「シリアルモニタ」を選択してシリアルモニタを起動します。(転送速度は「9600」です)
  6. 「スケッチ」メニューから「マイコンボードに書き込む」を選択します。

プログラム実行結果

書き込み後、しばらくして天気情報が画面に表示されれば成功です。

お天気によってアイコンが変わるので面白いですよ~。

1時間おきに天気情報が更新されるようになっています。

天気によって表示が変わることも確認できました!

また、成功していれば、シリアルモニタ上に以下の通り表示されているはずです。

Connecting to yourssid

WiFi connected
IP address: 
192.xxx.xxx.xxx
Current time: 2023-04-04 10:26:00
https://api.openweathermap.org/data/2.5/weather?lat=35.6828&lon=139.759&units=metric&lang=ja&appid=xxxxxxxxxxxxxxxxxxxxxxxxx
[HTTPS] begin...
[HTTPS] GET...
[HTTPS] GET... code: 200
{"coord":{"lon":139.7595,"lat":35.6828},"weather":[{"id":800,"main":"Clear","description":"晴天","icon":"01d"}],"base":"stations","main":{"temp":16.11,"feels_like":15.03,"temp_min":14.98,"temp_max":16.74,"pressure":1026,"humidity":48},"visibility":10000,"wind":{"speed":3.6,"deg":70},"clouds":{"all":0},"dt":1680571032,"sys":{"type":2,"id":268395,"country":"JP","sunrise":1680553454,"sunset":1680599026},"timezone":32400,"id":1857654,"name":"東京都千代田区丸の内","cod":200}
WeatherID : 801
WeatherStats : 4
・・・ 以降、1時間おきにHTTPSリクエストの出力が繰り返し出力されます。

 編集後記

今回は、「OpenWeather」というインターネット上のお天気情報サービスから、天気情報をJSON形式データとして受け取りました。

そして、JSON形式データから、必要な情報を取り出し、データ取得時点のお天気情報に応じて「e-Paper(電子ペーパー)」上にアイコンを表示させることができました。

これで、見た目も分かりやすい、インターネット上のサービスと連携した、「Raspberry Pi Pico W」のプログラムが完成しましたね。

Raspberry Pi Pico W」のプログラミングといえば、「microPython」と考えていましたが、Arduino IDEでプログラムできるとうれしいです。

これで、他のマイコンと同じArduino IDEで開発できます!

Raspberry Pi Pico W」と同じRP2040というチップを搭載している機器にも使えるので応用ができそうです。

今回の記事は以上になります。

最後までご覧いただき、ありがとうございました。

記事内でご紹介する「Raspberry Pi Pico W」はこちら!


Raspberry Pi Pico W
Arduino、C/C++、MicroPythonに対応している組み込み開発キットです。
正確なタイマ機能、温度センサーなどを備えたモデルです。ディスプレイ等がないため、消費電力を抑えた構成をとることができます。いろいろ遊べますよ~

Click Me !!Amazonで確認
Wifi対応の小さなマイコン!ここからはじめましょう!

Raspberry Pi Pico Wの他の記事はこちらからどうぞ!

すけろく Raspberry Pi Pico WのBluetoothを 使ってみたいの~ げんろく うむ。そうだな。 そろそろ試してみてもよかろう。 すけろく しかしどんなことができるかの? げんろく Serial通信をBluetooth経由でやってみるのはどうだ? せっかくなのでLEDを遠隔で操作してみよう。 今回は記事では、「Raspberry Pi Pico W」をArduinoでプログラミ […]

すけろく うぬぬ。 げんろく どうした? 何かあったのか? すけろく Raspberry Pi Pico W にArduinoから プログラムが書き込めないのだ・・・ げんろく そうか。 前回書き込み時にバグを仕込んだな。 再初期化の方法を教えよう。 今回は記事では、「Raspberry Pi Pico W」をArduinoでプログラミングする際に発生する問題について、解決方法を紹介します。 発生 […]

すけろく Raspberry Pi Pico Wは、Wi-Fi接続できる。 ということは、ブラウザで接続できるな! げんろく そうだな。 ブラウザからRaspberry Pi Pico Wを 制御することもできる。 すけろく じゃあ、ブラウザから指示を出すことが できるな。 げんろく よし、スマホやパソコンからブラウザ経由で Raspberry Pi Pico Wを制御してみよう。 今回は記事では […]

すけろく Raspberry Pi Pico Wが、Arduinoでプログラミング できることは分かった。 げんろく そうだな。 意外とArduinoのライブラリで動く。 すけろく ああ。 ここらへんで、たくさんのLEDでも光らせてみないか? げんろく よし、LEDストラップを光らせてみるか! 今回は記事では、「Raspberry Pi Pico W」をArduinoでプログラミングします。 M5 […]

すけろく 最近、透明なディスプレイが出てきたな。 げんろく ああ。透過型ディスプレイというやつだな。 すけろく Raspberry Pi Pico Wでも使えるのか? げんろく 手元にあるものはSPI通信を使うタイプだから Raspberry Pi Pico Wでも使えるぞ。 Arduino でプログラムしてみるか! 今回は記事では、「Raspberry Pi Pico W」をArduinoでプロ […]

すけろく Raspberry Pi Pico Wでお天気情報を インターネットから取得できたな。 げんろく うむ。 お天気情報を取り込むことができたな。 すけろく 次は、お天気情報をディスプレイに 表示させたいな。 げんろく よし。 ならば、e-Paper(電子ペーパー)に表示してみるか! 今回は記事では、「Raspberry Pi Pico W」をArduinoでプログラミングします。 インター […]

すけろく Raspberry Pi Pico Wをインターネットに 接続できたということは、 インターネット上のサービスを使えるということだな。 げんろく うむ。 インターネット上の情報を取得することや、 データのアップロードなどができる。 すけろく では、天気情報を取得することもできるのか? げんろく できるぞ! 今回は、インターネット上の天気情報サービスから 天気情報を取得して表示してみるか! […]

すけろく Raspberry Pi Pico Wをインターネットに接続できたが インターネット上のサービスと連携させたいな。 げんろく それなら、インターネット上のサービスから データを取得する際によく使う形式があるので そこを押さえてからだな。 すけろく お! JSON形式だな! げんろく そのとおり。 今回は、Raspberry Pi Pico WでJSON形式データを 取り扱う方法をおさえて […]

すけろく 前回の記事で、Raspberry Pi Pico Wを Wi-Fi接続できた。 げんろく ああ。インターネットへのアクセスが できるようになったな。 すけろく これで、Raspberry Pi Pico Wの時刻を 正確に合わせることもできるな! げんろく よし。インターネット上の NTP(時刻提供)サーバと時刻同期してみるか! 今回は記事では、「Raspberry Pi Pico W」 […]

すけろく Raspberry Pi Pico W がArduinoで プログラムを書き込めることは確認できた。 げんろく ああ。無事、初回書き込みが出来て、 COMポートとしても認識されたな。 すけろく 次は、Raspberry Pi Pico W の特徴である Wi-Fi接続してみたいな。 げんろく よし、今度はWi-Fi接続してみるか。 今回は記事では、「Raspberry Pi Pico W […]