最近、やっと円高に為替が動き始めました。立場によって円高、円安どちらが都合が良いかは変わりますが、物価上昇を招く円安は好ましく思いません。円高に動き始めたことで物価に変化が現れる可能性があり、為替レートが気になりました。そこでM5Stack Core2に時計と為替レートを常時表示させるようにしてみました。
気になる情報はいつでも見たい
気になる情報、例えば天気や交通情報などを常時表示させるデバイスとしてスマートディスプレイがあります。
Androidベースならアプリをインストールして、自分の知りたい情報を常に見える状態にすることはできますが、やや高価で少し大きくもあります。
何かないかと考えていて、以前、CQ出版のInterface誌でM5Stack Basicを使って天気を表示させていた記事のことを思い出しました。 Interface 2020年12月号の「JSONデータで取得した天気予報を表示する」という記事です。
天気が表示できるなら為替レートも表示できるのではないかと思いました。 何故為替レートかというと、物価上昇が止まらずPCやIoT関係は為替の影響が大きいので買うタイミングを見誤らないためというのもあります。
まずはパソコンでテスト
JSONデータの確認
調べてみると為替レートは、こちらのURLからJSON形式のデータとして入手できるそうです。
[Win]+[X]を押して表示されたメニューから「ターミナル」をクリックしてターミナルを開きます。
そして
を実行すると、このようにJSONデータを受信できることが分かります。
Pythonで目的の為替レートを抽出
JSONデータを受信できることは分かったので、Pythonで受信したJSONデータから目的の為替レートを抽出できるかをテストします。
言語としてPythonを選んだのは、後で説明するM5Flowという開発ツールで生成されるプログラムがPythonだからです。
まず、Windows 11/10でPythonを使えるようにします。
「Microsoft Store」アプリを起動して検索窓に「python」と入力して検索するとPythonが沢山表示されます。
3.XXという数字はバージョンです。必ずしも最新版が良いわけではないのですが、ここでは「Python 3.12」をクリックして開いて、無料ですので「入手」または「インストール」をクリックしてインストールします。
[Win]+[X]を押して開いたメニューから「ターミナル」をクリックしてターミナルを開きます。
そして下記を入力してPythonで通信を行うためのライブラリーをインストールします。
requestではなくrequestsと複数形なのでスペルミスに注意してください。
ちなみに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」に作成しましたのでカレントフォルダーを変更して、
を実行します。
うまく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をインストールします。
M5Stack Core2を添付のUSBケーブルでパソコンに接続します。
接続すると自動でドライバーが選択されてUSBシリアルインターフェースで接続されます。インターフェースはCOM3、COM10など「COM」に数字が付いたものになります。数字は適当な数字が割り当てられますが、次回以降は同じCOM番号となります。
M5Burnerを起動します。
左端で「CORE2 & TOUGH」を選択して右側で「UIFlow_Core2」の「Download」をクリックして最新のファームウェアをダウンロードします。
「Burn」をクリックします。
接続されたCOMが自動で選択されます。ここではCOM4ですがパソコン環境によって変わります。
「Next」をクリックします。
自分の2.4GHz帯のWi-Fi環境を設定します。SSIDとパスワードを設定しますが、インターネットに接続できればスマホのテザリングでも構いません。
「Next」をクリックします。
ファームの書き込みが始まります。
このように表示されたら「Burn successfully, click here to return」をクリックして書き込みを終了します。
書き込みが終わったのでM5Burnerを終了させます。
M5Stack Core2は自動的に再起動しますので、USBケーブルをパソコンから外します。このように表示されれば完了です。
プログラムのテストと書き込み
開発環境としてはM5Flowというブロックエディターを使って開発します。
人にもよると思いますが、Pythonで直接コードを打ち込むより、M5Flowで縦方向だけでなく横方向にも2次元的にブロックを配置した方が、見通しがよく分かりやすいと思います。
M5FlowはUIFlow1.0とUIFlow2.0があり、今回はUIFlow1.0を使います。使うにはそれぞれに対応したファームをM5Stackに書き込む必要があり、プログラムの互換性はありません。
UIFlow1.0の準備
UIFlow1.0を使用するにはウェブブラウザーでこちらにアクセスします。
「UIFlow1.0」を選択して「Confirm」をクリックします。
初めて起動したときはこの画面が表示されます。
表示されない場合は左下の「Api key」の部分をクリックします。
「Api key」を入力してDeviceで「Core2」を選択して「OK」をクリックします。
「Api key」はM5Stack Core2に表示されている8桁の英数字です。
正しく設定されると左下に「接続済み」と表示されます。
「Disconnected」と表示される場合は右横の丸い2本の矢印のアイコンをクリックすると接続されます。
これでプログラムを書き込む準備ができました。
プログラムの準備
こちらからプログラムをダウンロードして展開します。
M5Stack Core2用の時刻とドル円換算レートを表示するプログラムです。UIFlow1.0用です。
右上の「Open」をクリックします。
展開したファイルを選択して「開く」をクリックします。
プログラムが読み込まれます。
ブロックの最初の部分の変数を自分の環境に合わせて変更します。
変数名 | 意味 |
---|---|
WIFI_SSID | Wi-FiのSSID |
WIFI_PASSWORD | Wi-Fiのパスワード |
NTP_UPDATE_MINUTE | 時刻調整を行う時刻の「分」 時刻調整は1時間ごとに行う |
GET_RATE_CYCLE | 為替レートを更新する間隔(ミリ秒単位) |
変更したら右上の「Save」をクリックして上書き保存します。
動作テスト
左下に「接続済み」と表示されていることを確認して、右下の「Run」をクリックするとプログラムがM5Stack Core2に転送されて実行されます。
「接続済み」と表示されていない場合は、「Api key」の部分をクリックして「Api key」や「Device」が間違っていないか確認して、再接続してみてください。
正しく動作するとブザー音が2回鳴った後、時刻と為替レートが表示されます。
通信できない場合は暫く再接続を試行した後で低いブザー音が鳴りますので設定値を間違えていないか確認します。
修正したら再度「Run」をクリックしてプログラムを実行しなおします。
タイムゾーンが正しく解釈されていないようで、数日前から1時間ずれるみたいです。その場合は「NTPホスト」とある黄色のブロックのタイムゾーンを「9」から「10」に変更してみてください。
プログラムの書き込み
この時点ではプログラムはメモリー上で実行しているだけで、リセットすると消えてしまいます。
スマートディスプレイとして使うにはプログラムをM5Stack Core2に書き込んで自動的に起動するようにします。
右下の「ダウンロード」をクリックするとM5Stack Core2に書き込まれてM5Stack Core2が再起動します。
電源の切り方
M5Stack Core2の電源をオフにするには左側にあるボタンを6秒以上長押します。
リセットするには下側のボタンを押します。
プログラムの改造
ブロックエディターなので視覚的に修正部分は分かると思います。
表示文字を変更するにはその部分をクリックするとダイアログが表示されますので「Name」以外の部分を変更します。修正したらダイアログ右上の[X]をクリックして閉じます。
為替レートを取得しているのはこの部分です。
通貨ペアを変更する場合は「USDJPY」を変更します。
上部中央の「Blockly </>Python」という部分でPyhtonのコード画面に切り替えることができますが、ここでPythonコードを書き換えるとブロック編集画面に戻れなくなります。そのためPythonコードを追加したい場合は「高度なブロック」グループの「コード実行」ブロックを追加して、その中にPythonコードを記述します。
一度M5Stack Core2に書き込んでしまうとUIFlow1.0に接続できませんので、下側のリセットボタンを押してこの画面が表示されたらすぐに「Flow」をタップします。
接続方法は「Wi-Fi」をタップします。
再起動してApi keyを表示した画面になり、UIFlow1.0からプログラムできるようになります。
考察
時計として使うため起動時に一度だけNTPで時刻調整したところ、1日で数秒もずれるので毎時NTPで調整するようにしました。ところがNTPでの調整ができないとおかしな時刻を設定したり、正しいタイムゾーンを設定しても時刻がずれるなどおかしなことが頻繁に発生しています。
UIFlow2.0ではNTPサーバーを3つ設定できて、時刻調整はユーザープログラムで考える必要がなくなったので、UIFlow2.0で書き換えようと考えています。
どちらにしてもESP32 S3はUIFlow2.0でしかサポートされないため移行は必須なので早急に移行しようと思います。
まとめ
今の時代、殆どの物は売っていますし、スマホアプリでも実現可能です。たた、ちょっとした小物が欲しい時にM5Stackなどを使うと簡単にネットワーク機器が作れてしまうとは、便利な時代になったと思います。
コメント