注目キーワード

【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」はこちら!

ピンヘッダ実装済み
created by Rinker
ノーブランド品
¥2,210 (2024/04/20 13:18:02時点 Amazon調べ-詳細)
ピンヘッダを自分ではんだ付けするもの
created by Rinker
Raspberrypi
¥1,650 (2024/04/20 04:28:42時点 Amazon調べ-詳細)

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

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 の接続 (クリックすると拡大できます)

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

実際にブレッドボードに接続したイメージは次の通りです。

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

created by Rinker
サンハヤト
¥1,544 (2024/04/20 13:18:03時点 Amazon調べ-詳細)
電子回路の試作を行う際に使用するツールです。
左右にVinとGNDがあり、中心部分に回路を構成して使います。
電子回路の試作を行う際に使用するツールです。
ブレッドボード上で使用する際にはこちらが便利です。
持っておくと便利です。
電子回路の試作を行う際に使用するツールです。
いろんな長さのものがセットになり、保管用のボックスもついています。
100V電源を5V4Aに変換する電源アダプターです。
PSE認証付きのものを購入しましょう!

 

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」はこちら!

ピンヘッダ実装済み
created by Rinker
ノーブランド品
¥2,210 (2024/04/20 13:18:02時点 Amazon調べ-詳細)
ピンヘッダを自分ではんだ付けするもの
created by Rinker
Raspberrypi
¥1,650 (2024/04/20 04:28:42時点 Amazon調べ-詳細)

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

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

すけろく うーむ。 どうしたものか。 げんろく どうした。 暗い顔をして。 すけろく カーモデルのウィンカー点滅を再現したくてな。 明滅回路を作ろうか悩んでおる。 げんろく ん!? そんなときは、メインプロセッサと切り離して 動作するPIOの出番ではないのか! この記事では、「Raspberry Pi  Pico/W」に実装されている「PIO(Programmable I/O」を実際に使ってみます […]

すけろく Raspberry Pi Pico/WのPIO機能を使ってUARTの送信には成功した。 しかし、まだ受信側ができていないのぉ。 げんろく そうだな。 今度は受信側を試してみるか。 すけろく どうせなら、パソコンから送った文字を返すような やり取りができるといいな。 げんろく よし。 UART送受信を実装してみよう。 この記事では、「Raspberry Pi  Pico/W」に実装されてい […]

すけろく Raspberry Pi Pico/WのPIO機能については前回調べた。 今度は実際に使ってみたいの~ げんろく そうだな。 実際にプログラムする際の注意事項などを見ていこう。 すけろく Arduino IDEでも使用できるのか? げんろく ああ。 使えるぞ! Arduino IDEで使う場合を例にやっていこう。 この記事では、「Raspberry Pi  Pico/W」に実装されている […]

すけろく Raspberry Pi Pico/Wには、PIOという機能があるらしいな。 げんろく そうだ。 UARTなどのインタフェース不足や、実装されていない機能を GPIOに対してプログラムできる機能だ。 すけろく Raspberry Pi Pico/Wをもっと知るために PIOを調べてみたい。 げんろく よし! PIOについて少し調べてみるか! この記事では、「Raspberry Pi  P […]

すけろく うーむ。 げんろく どうした浮かない顔して。 すけろく これまで、Raspberry Pi Pico / Wをいろいろ確認してきたが 外付けのボタンの認識ってやったかぇ? げんろく たしかに!まだ取り上げていない基本的なものがあるな よし、今回はボタン押下時の状態を Raspberry Pi Pico / Wで認識してみよう。 この記事では、「Raspberry Pi  Pico W」を […]

すけろく 宅内で使っているリモコンは、どういった仕組みで テレビなどをつけているのかな~? げんろく 赤外線を使って信号を送っているのだ。 すけろく しかし、たくさんある機器のリモコンが混信しないのは どういった仕組みなのかぇ? げんろく よし、今回は赤外線リモコンの通信を 調査してみるか! この記事では、「Raspberry Pi  Pico W」を使って、「赤外線リモコンの通信内容を分析する」 […]

すけろく うーむ。 対応付けが難しいな。 げんろく どうした? Raspberry Pi Picoで悩んでいるようだな。 すけろく Raspberry Pi PicoやPico Wの GPIOピンの情報がボード上にプリント されていないから資料との対応付けがやりづらくてな。 げんろく そうか。そういう課題があるのだな。 よし、解決するグッツを作って提供してみよう! 皆さんは、「Raspberry […]

すけろく うーむ。 モーターを毎回同じくらい回転させることはできんのかな。 げんろく DCモーターや、サーボモーターだと、 回転量を正確に制御することは難しいぞ。 すけろく では、何か解決策はあるのかぇ? げんろく ステッピングモーターというものがある。 モーターの回転をステップとして制御できる。 今回はこのあたりを動かしてみるか。 この記事では、「Raspberry Pi  Pico W」を使っ […]

すけろく 以前の記事で、Raspberry Pi Pico Wを Picoprobe経由でデバッグすることができた。 しかし、シリアルの入出力がArduino IDEで 読み込めないのだ。 げんろく そうだな。 Raspberry Pi PicoやRaspberry Pi Pico Wでは、 シリアル出力用の「Serial.println」では、 Picoprobe経由で取得できない。 すけろく […]

すけろく ん~。 このエラーの時の変数の値が知りたいな~ げんろく どうした? プログラムがうまく動かないのか? すけろく そうなのだ。 Raspberry Pi Pico Wでもデバック機能が使えると いいのだが。。。 げんろく ちなみに、Arduino IDE 2.1.0 のデバッグ機能で Raspberry Pi Pico / Wのデバッグができるぞ! やっとできたプログラムを動かしてみると […]