インターネットから取得できたな。
お天気情報を取り込むことができたな。
表示させたいな。
ならば、e-Paper(電子ペーパー)に表示してみるか!
そこで、今回はWaveShare社の提供している「Raspberry Pi Pico用 2.13インチ e-Paper ディスプレイ(白黒赤)212×104」を使用してみたいと思います。
「Raspberry Pi Pico W」と接続する環境の構成方法や、画像を「e-Paper(電子ペーパー)」で表示させるためのプログラムを紹介します。
すけろく ついに、国内でもRaspberry Pi Pico Wを手に入れたぞ! げんろく Wi-Fiモジュールがついているので、 国内の技適取得が必要だったからな。 すけろ[…]
記事内でご紹介する「Raspberry Pi Pico W」はこちら!
Arduino、C/C++、MicroPythonに対応している組み込み開発キットです。
正確なタイマ機能、温度センサーなどを備えたモデルです。ディスプレイ等がないため、消費電力を抑えた構成をとることができます。いろいろ遊べますよ~
「Raspberry Pi Pico W」は、Wi-Fi接続やBluetooth接続(今後サポート期待)ができるので、これができるとできることが広がりそうですよ!
ぜひ、皆さんも挑戦してみてくださいね!
今回の目標
すけろく Raspberry Pi Pico Wをインターネットに 接続できたということは、 インターネット上のサービスを使えるということだな。 げんろく うむ。 インターネット上の情報を取得する[…]
全体の構成
全体の構成は次のようになります。
処理の流れ
プログラム内での処理の流れは次の通りです
- Wi-Fiアクセスポイントへの接続
- 時刻同期する
- OpenWeatherへアクセスする際のURLを生成
- OpenWeatherへ接続しJSON形式データを取得
- JSON形式データから対象の値を取得
- 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にピンヘッダをはんだ付けする
- ブレッドボードなど電子回路を構成するために必要なものを準備する
Raspberry Pi Pico Wにピンヘッダをはんだ付けする
「Raspberry Pi Pico W」には、ピンヘッダをつけるための穴がついています。
ピンヘッダをつけることで、ブレッドボードや、ディスプレイのシールドなどと接続することができます。
ピンヘッダとは次のようなものです。
入手元:秋月電子
型番:PH-1x40S
片方のピンが長いものになります。
40ピンありますので、8ピン分を切って使うなどできます。
秋月電子さんの通販サイトURLはこちらです。
電子工作という言葉を聞くとまず思い浮かぶのは、中学校の技術家庭の授業でやったはんだ付け。 最近の学校は実習とかやっているのかなとふと思います。 子供の頃は何となく作業していたので、今思うと「よく部品壊さなかったな・・・」と思いま[…]
「Raspberry Pi Pico W」にピンヘッダをつけると次のようになります。
ブレッドボードなど電子回路を構成するために必要なものを準備する
「Raspberry Pi Pico W」と「e-Paper(電子ペーパー)」は、次のような構成で接続します。
「e-Paper(電子ペーパー)」への電源は、別途、3.3Vの電源を用意しました。
今回使用した電源はこちら!
ブレッドボード、ジャンパワイヤはこちらがおススメです!
左右にVinとGNDがあり、中心部分に回路を構成して使います。
ブレッドボード上で使用する際にはこちらが便利です。
持っておくと便利です。
いろんな長さのものがセットになり、保管用のボックスもついています。
PSE認証付きのものを購入しましょう!
入手元:秋月電子
型番: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分程度
Arduino libraries for Waveshare e-paper series. Contribute t…
左のリンクから、WaveShare社のGitHubサイトにアクセスします。
GitHubページの「code」ボタンを押して、「Download ZIP」を押します。
ダウンロードが開始されます。
「epd-library-arduino-master.zip」というファイルがダウンロードできますので、解凍ツールで解凍します。
解凍後、以下のフォルダをコピーします。
「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
<修正前>
// 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接続できた。 げんろく ああ。インターネットへのアクセスが できるようになったな。 すけろく これ[…]
ご自分の環境に合わせて値を修正してください。
(スケッチ例では「”your-ssid“」、「”your-password“」と記載しています。)
ポイント② OpenWeatherからの天気情報取得
OpenWeatherからの天気情報取得方法の詳細は、次の記事で紹介しています。
すけろく Raspberry Pi Pico Wをインターネットに 接続できたということは、 インターネット上のサービスを使えるということだな。 げんろく うむ。 インターネット上の情報を取得する[…]
ご自分の環境に合わせて値を修正してください。
(スケッチ例では、「”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で公開していますので、次のリンクからアクセスしてください。
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回目以降
- Raspberry Pi PicoをパソコンにUSB接続します。
- Arduino IDEで前述のプログラムを記載して、 「ファイル」メニューから「名前を付けて保存」で任意の名前を付けて保存します。
- 「ツール」メニューから「ボード」情報を確認し、次のものを選択します。
「Raspberry Pi Pico/RP2040」-「Raspberry Pi Pico W」 - 「シリアルポート」にマイコンを接続したCOMポートが指定されているかも確認します。
- 「ツール」メニューから「シリアルモニタ」を選択してシリアルモニタを起動します。(転送速度は「9600」です)
- 「スケッチ」メニューから「マイコンボードに書き込む」を選択します。
プログラム実行結果
書き込み後、しばらくして天気情報が画面に表示されれば成功です。
お天気によってアイコンが変わるので面白いですよ~。
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」はこちら!
Arduino、C/C++、MicroPythonに対応している組み込み開発キットです。
正確なタイマ機能、温度センサーなどを備えたモデルです。ディスプレイ等がないため、消費電力を抑えた構成をとることができます。いろいろ遊べますよ~
Raspberry Pi Pico Wの他の記事はこちらからどうぞ!
すけろく ウーム。 センサーなどの情報を記録したいな。 げんろく なに。Raspberry Pi Picoで記録媒体を 使いたいのか。 すけろく そうだ。 センサーやカメラのデータを保存したいのだ。 げんろく データの保管には、microSDカードが 使いやすいそ。使ってみるか! この記事では、「Raspberry Pi Pico/W」に「microSDカードスロット」を接続して読み書きしてみま […]
すけろく うーむ。 げんろく どうした?浮かない顔をして。 すけろく LEDを火のように光らせる方法を知りたくてな。 げんろく それなら、1/fの揺らぎを使って 再現してみるか。 この記事では、「Raspberry Pi Pico W」を使って、「LEDを揺らぎを加えて点灯させる」方法をご紹介します。 Raspberry Pi の中でも、省電力なCPUを搭載したマイコン開発ボードです。 他のRa […]
すけろく うーむ。 どうしたものか。 げんろく どうした。 暗い顔をして。 すけろく カーモデルのウィンカー点滅を再現したくてな。 明滅回路を作ろうか悩んでおる。 げんろく ん!? そんなときは、メインプロセッサと切り離して 動作する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」を使っ […]