M5Stackで為替レートを表示

実験
記事内のリンクには広告が含まれている場合があります

最近、やっと円高に為替が動き始めました。立場によって円高、円安どちらが都合が良いかは変わりますが、物価上昇を招く円安は好ましく思いません。円高に動き始めたことで物価に変化が現れる可能性があり、為替レートが気になりました。そこでM5Stack Core2に時計と為替レートを常時表示させるようにしてみました。

気になる情報はいつでも見たい

気になる情報、例えば天気や交通情報などを常時表示させるデバイスとしてスマートディスプレイがあります。

Androidベースならアプリをインストールして、自分の知りたい情報を常に見える状態にすることはできますが、やや高価で少し大きくもあります。

何かないかと考えていて、以前、CQ出版のInterface誌でM5Stack Basicを使って天気を表示させていた記事のことを思い出しました。 Interface 2020年12月号の「JSONデータで取得した天気予報を表示する」という記事です。

2020年12月号 | Interface – CQ出版

天気が表示できるなら為替レートも表示できるのではないかと思いました。 何故為替レートかというと、物価上昇が止まらずPCやIoT関係は為替の影響が大きいので買うタイミングを見誤らないためというのもあります。

まずはパソコンでテスト

パソコンでのテストはM5Stackで表示させるために必要な手順ではありません。受信できるデータの見極めとPythonで必要なデータを分離できるかの確認ですので、不要な場合は読み飛ばしてください。

JSONデータの確認

調べてみると為替レートは、こちらのURLからJSON形式のデータとして入手できるそうです。

https://www.gaitameonline.com/rateaj/getrate

[Win]+[X]を押して表示されたメニューから「ターミナル」をクリックしてターミナルを開きます。

そして

curl https://www.gaitameonline.com/rateaj/getrate

を実行すると、このようにJSONデータを受信できることが分かります。

M5Stack-display-exchange-rate-011

Pythonで目的の為替レートを抽出

JSONデータを受信できることは分かったので、Pythonで受信したJSONデータから目的の為替レートを抽出できるかをテストします。

言語としてPythonを選んだのは、後で説明するM5Flowという開発ツールで生成されるプログラムがPythonだからです。

まず、Windows 11/10でPythonを使えるようにします。

「Microsoft Store」アプリを起動して検索窓に「python」と入力して検索するとPythonが沢山表示されます。

M5Stack-display-exchange-rate-012

3.XXという数字はバージョンです。必ずしも最新版が良いわけではないのですが、ここでは「Python 3.12」をクリックして開いて、無料ですので「入手」または「インストール」をクリックしてインストールします。

M5Stack-display-exchange-rate-013

[Win]+[X]を押して開いたメニューから「ターミナル」をクリックしてターミナルを開きます。

そして下記を入力してPythonで通信を行うためのライブラリーをインストールします。

pip install requests

requestではなくrequestsと複数形なのでスペルミスに注意してください。

M5Stack-display-exchange-rate-014

ちなみにPythonが不要になった場合は、スタートメニューから「Python 3.12」を右クリックして「アンインストール」をクリックするとアンインストールできます。この時、追加でインストールした「requests」ライブラリーも一緒にアンインストールされます。

次にこのプログラムを「usd-jpy.py」という名前で作成して保存します。保存先はどこでも構いませんが、実行時にカレントフォルダーにしますので、適当なフォルダーを作ってそこに置くのが良いでしょう。

import requests
import json

response = requests.get('https://www.gaitameonline.com/rateaj/getrate')

quotes = json.loads(response.text)

for exchange in quotes['quotes']:
  if exchange['currencyPairCode'] == 'USDJPY':
    print('USD to JPY')
    print('Open:',exchange['open'])
    print('High:',exchange['high'])
    print('Low :',exchange['low'])
    print('Ask :',exchange['ask'])
    print('Bid :',exchange['bid'])

作るのが面倒な場合はこちらをダウンロードしてください。

アイコン
為替レート取得テストプログラム

為替レートのJSONデータを取得してドル円為替レートを表示するPythonのプログラムです。requestsライブラリーが必要です。

ここでは、「C:\tmp」に作成しましたのでカレントフォルダーを変更して、

python usd-jpy.py

を実行します。

M5Stack-display-exchange-rate-015

うまくUSDからJPYへの為替レートが表示されました。

今はPythonコードは深く考えなくて構いません。 「requestsライブラリーでJSONデータを読み込んでいるんだな」とか「json」ライブラリで読み取ったJSONデータから目的の為替レートを抽出しているんだな」ということが漠然と分かれば十分です。

IoT機器の選定

ここではIoTコントローラーとしてM5Stack Core2を使います。

IoT機器は非常に多くの種類があります。

有名なのがRaspberry Piですが他にもArduinoなどいろいろあります。 それでも一番使いやすいと思ったのはM5Stackのシリーズです。

IoT機器を人が使えるようにするために必要なものは、センサーなどの入力装置とディスプレイやLEDなどの出力装置です。

Raspberry PiやArduinoは基本的にはコントローラーの機能しか持たず、必要な入出力装置は必要に応じて外付けする必要があります。そして基板がむき出しなのでスマートディスプレイとして使うならケースを用意する必要があります。

その点、M5Stackシリーズはセンサーやディスプレイは内蔵されてケースに収まっていますので、今回のようにスマートディスプレイとして使うには最適です。

時計としても使うためのRTCが内蔵されている機種はM5StickC Plusなどもありますが、時計として大きな液晶表示が可能なM5Stack Core2を使うことにしました。

安価なM5Stack BasicはRTCが内蔵されていないため時計としては使えませんが、為替レート表示だけなら使えます。

最新のM5Stack Core S3/S3SEは開発環境の関係で今回は使えません。

M5Stack Core2の入手方法

M5Stackシリーズは、Amazonやスイッチサイエンス、マルツオンラインなどで購入できます。

時計機能を省いたり、表示を小さくプログラムを修正することで、M5Stack BasicやM5Stick C Plusなども利用できます。

入手したらUSB Type-Cのソケットがある側のスイッチを押して電源を入れてみてください。工場テストプログラムが起動しますのでいろいろ試してみるとよいでしょう。

ファームのアップデート

M5Stack Core2を入手したら最新のファームウェアにアップデートします。

まず、M5Burnerをインストールします。

m5-docs
The reference docs for M5Stack products. Quick start, get the detailed information or instructions such as IDE,UIFLOW,Ar...

M5Stack Core2を添付のUSBケーブルでパソコンに接続します。

接続すると自動でドライバーが選択されてUSBシリアルインターフェースで接続されます。インターフェースはCOM3、COM10など「COM」に数字が付いたものになります。数字は適当な数字が割り当てられますが、次回以降は同じCOM番号となります。

M5Burnerを起動します。

左端で「CORE2 & TOUGH」を選択して右側で「UIFlow_Core2」の「Download」をクリックして最新のファームウェアをダウンロードします。

M5Stack-display-exchange-rate-021

「Burn」をクリックします。

M5Stack-display-exchange-rate-022

接続されたCOMが自動で選択されます。ここではCOM4ですがパソコン環境によって変わります。

「Next」をクリックします。

M5Stack-display-exchange-rate-023

自分の2.4GHz帯のWi-Fi環境を設定します。SSIDとパスワードを設定しますが、インターネットに接続できればスマホのテザリングでも構いません。

「Next」をクリックします。

M5Stack-display-exchange-rate-024

ファームの書き込みが始まります。

M5Stack-display-exchange-rate-025

このように表示されたら「Burn successfully, click here to return」をクリックして書き込みを終了します。

書き込みが終わったのでM5Burnerを終了させます。

M5Stack-display-exchange-rate-026

M5Stack Core2は自動的に再起動しますので、USBケーブルをパソコンから外します。このように表示されれば完了です。

M5Stack-display-exchange-rate-027

プログラムのテストと書き込み

開発環境としてはM5Flowというブロックエディターを使って開発します。

人にもよると思いますが、Pythonで直接コードを打ち込むより、M5Flowで縦方向だけでなく横方向にも2次元的にブロックを配置した方が、見通しがよく分かりやすいと思います。

M5FlowはUIFlow1.0とUIFlow2.0があり、今回はUIFlow1.0を使います。使うにはそれぞれに対応したファームをM5Stackに書き込む必要があり、プログラムの互換性はありません。

UIFlow1.0の準備

UIFlow1.0を使用するにはウェブブラウザーでこちらにアクセスします。

M5Flow

「UIFlow1.0」を選択して「Confirm」をクリックします。

M5Stack-display-exchange-rate-031

初めて起動したときはこの画面が表示されます。

M5Stack-display-exchange-rate-032

表示されない場合は左下の「Api key」の部分をクリックします。

M5Stack-display-exchange-rate-033

「Api key」を入力してDeviceで「Core2」を選択して「OK」をクリックします。

「Api key」はM5Stack Core2に表示されている8桁の英数字です。

M5Stack-display-exchange-rate-034

正しく設定されると左下に「接続済み」と表示されます。

M5Stack-display-exchange-rate-035

「Disconnected」と表示される場合は右横の丸い2本の矢印のアイコンをクリックすると接続されます。

M5Stack-display-exchange-rate-036

これでプログラムを書き込む準備ができました。

プログラムの準備

こちらからプログラムをダウンロードして展開します。

アイコン
M5Stack Core2用 時刻・為替レート表示

M5Stack Core2用の時刻とドル円換算レートを表示するプログラムです。UIFlow1.0用です。

右上の「Open」をクリックします。

M5Stack-display-exchange-rate-041

展開したファイルを選択して「開く」をクリックします。

M5Stack-display-exchange-rate-042

プログラムが読み込まれます。

M5Stack-display-exchange-rate-043

ブロックの最初の部分の変数を自分の環境に合わせて変更します。

変数名 意味
WIFI_SSID Wi-FiのSSID
WIFI_PASSWORD Wi-Fiのパスワード
NTP_UPDATE_MINUTE 時刻調整を行う時刻の「分」
時刻調整は1時間ごとに行う
GET_RATE_CYCLE 為替レートを更新する間隔(ミリ秒単位)

M5Stack-display-exchange-rate-044

変更したら右上の「Save」をクリックして上書き保存します。

M5Stack-display-exchange-rate-045

動作テスト

左下に「接続済み」と表示されていることを確認して、右下の「Run」をクリックするとプログラムがM5Stack Core2に転送されて実行されます。

「接続済み」と表示されていない場合は、「Api key」の部分をクリックして「Api key」や「Device」が間違っていないか確認して、再接続してみてください。

M5Stack-display-exchange-rate-051

正しく動作するとブザー音が2回鳴った後、時刻と為替レートが表示されます。

通信できない場合は暫く再接続を試行した後で低いブザー音が鳴りますので設定値を間違えていないか確認します。

修正したら再度「Run」をクリックしてプログラムを実行しなおします。

タイムゾーンが正しく解釈されていないようで、数日前から1時間ずれるみたいです。その場合は「NTPホスト」とある黄色のブロックのタイムゾーンを「9」から「10」に変更してみてください。

プログラムの書き込み

この時点ではプログラムはメモリー上で実行しているだけで、リセットすると消えてしまいます。

スマートディスプレイとして使うにはプログラムをM5Stack Core2に書き込んで自動的に起動するようにします。

右下の「ダウンロード」をクリックするとM5Stack Core2に書き込まれてM5Stack Core2が再起動します。

M5Stack-display-exchange-rate-052

電源の切り方

M5Stack Core2の電源をオフにするには左側にあるボタンを6秒以上長押します。

リセットするには下側のボタンを押します。

プログラムの改造

ブロックエディターなので視覚的に修正部分は分かると思います。

表示文字を変更するにはその部分をクリックするとダイアログが表示されますので「Name」以外の部分を変更します。修正したらダイアログ右上の[X]をクリックして閉じます。

M5Stack-display-exchange-rate-061

為替レートを取得しているのはこの部分です。

通貨ペアを変更する場合は「USDJPY」を変更します。

M5Stack-display-exchange-rate-062

上部中央の「Blockly </>Python」という部分でPyhtonのコード画面に切り替えることができますが、ここでPythonコードを書き換えるとブロック編集画面に戻れなくなります。そのためPythonコードを追加したい場合は「高度なブロック」グループの「コード実行」ブロックを追加して、その中にPythonコードを記述します。

一度M5Stack Core2に書き込んでしまうとUIFlow1.0に接続できませんので、下側のリセットボタンを押してこの画面が表示されたらすぐに「Flow」をタップします。

M5Stack-display-exchange-rate-063

接続方法は「Wi-Fi」をタップします。

M5Stack-display-exchange-rate-064

再起動してApi keyを表示した画面になり、UIFlow1.0からプログラムできるようになります。

考察

時計として使うため起動時に一度だけNTPで時刻調整したところ、1日で数秒もずれるので毎時NTPで調整するようにしました。ところがNTPでの調整ができないとおかしな時刻を設定したり、正しいタイムゾーンを設定しても時刻がずれるなどおかしなことが頻繁に発生しています。

UIFlow2.0ではNTPサーバーを3つ設定できて、時刻調整はユーザープログラムで考える必要がなくなったので、UIFlow2.0で書き換えようと考えています。

どちらにしてもESP32 S3はUIFlow2.0でしかサポートされないため移行は必須なので早急に移行しようと思います。

まとめ

今の時代、殆どの物は売っていますし、スマホアプリでも実現可能です。たた、ちょっとした小物が欲しい時にM5Stackなどを使うと簡単にネットワーク機器が作れてしまうとは、便利な時代になったと思います。

この記事を書いた人
Solomon

物をただ使うのではなく、より便利に、より使いやすくするにはどうすればよいかを検討して、改造することに興味をそそられます。100均で珍しいものを見つけても更にこれを組み合わせれば、もっと使いやすいものが安価で手に入ると思ってしまいます。

Solomonをフォローする
実験
Solomonをフォローする

コメント

タイトルとURLをコピーしました