M5Stackでビットコインの価格(日本円)を取得して表示する!
前の記事でESP32でビットコインの価格(日本円)を取得して表示する!というのをやりました!そうすると、M5Stackももちろんできますよね!
M5Stackの中はESP32ですから!しかもボタンも液晶ディスプレイもあります!
前の記事を参照した方は、下のリンクでどうぞ!
結果は上の写真のような感じになります。Wifiに接続したら、5秒間隔でビットコインの価格を取ってきて表示します。
目次
環境の用意
前のESP32でビットコインの価格を取得、表示する記事ではArduino IDEを使っていましたが、今回はPlatformioを使います。
初めてPlatformioを聞いた人は、下記の記事を参照してください。
Platformioで開発する場合は、ArduinoJsonのインストールが必要です。
インストールしないと、ArduinoJsonが見つかりませんとエラーになります(そりゃそうだよね)。
Plaftomioのホーム画面から、ライブラリのタブをクリックして、検索欄に「ArduinoJson」を検索して、検索結果にArduinoJsonの候補が表示されたら、クリックします。
ArduinoJsonの画面で、「install」ボタンをクリックして、インストールします。これで、プログラムからArduinoJsonが使えるようになります。
私の方では、以前の実験でM5Stackのライブラリもインストール済みでしたので、このままM5Stackのライブラリも使えますが
みなさん初めての場合は、今の手順と同様にM5Stackなど必要なライブラリも入れておいてください。
プログラム
早速、プログラムを見てみましょう!
#include <M5Stack.h> #include <WiFi.h> #include "ArduinoJson.h" #include <HTTPClient.h> //WIFIのID const char *ssid = ""; //WIFIのパースワード、パスワードのないWIFIはこここのままでも良い const char *password = ""; //今回ビットコインの値段を取得するためのAPIのURL const char *apiServer = "https://api.coindesk.com/v1/bpi/currentprice/JPY.json"; // セットアップ void setup() { // M5Stack objectの初期化 M5.begin(); // text の設定 M5.Lcd.fillScreen(BLACK); M5.Lcd.setCursor(0, 0); M5.Lcd.setTextColor(GREEN); M5.Lcd.setTextSize(3); M5.Lcd.printf("Connecting to WIFI"); // WiFi.begin(ssid, password); //接続済 ではない場合 while (WiFi.status() != WL_CONNECTED) { delay(500); M5.Lcd.fillScreen(BLACK); //点を表示する M5.Lcd.printf("."); } //接続できた場合 M5.Lcd.clear(GREEN); M5.Lcd.setTextColor(BLACK); M5.Lcd.printf("connected!"); M5.Lcd.setTextColor(GREEN); M5.Lcd.setTextSize(4); } // メインループ void loop() { //WIFIの接続状態を確認する //WIFI接続している場合 if ((WiFi.status() == WL_CONNECTED)) { HTTPClient http; //APIサーバに接続開始 http.begin(apiServer); //HTTP Requestを作成する int httpCode = http.GET(); //返り値を確認する if (httpCode > 0) { //レスポンスを文字列として取得する String payload = http.getString(); //正常の場合は200 //Serial.println(httpCode); M5.Lcd.clear(BLACK); M5.Lcd.setCursor(0, 0); //jsonに変換するためにメモリを確保 DynamicJsonDocument doc(1024); //payloadをjson objectに変換する deserializeJson(doc, payload); JsonObject obj = doc.as<JsonObject>(); //その中のbpi.JPYを取り出す JsonObject result = obj[String("bpi")][String("JPY")]; //ビットコインの価格を取り出す、同時に文字列に変換しておく String rate = result[String("rate")]; //表示する、一回char* から 文字列への変換が必要です。 M5.Lcd.printf(String(rate).c_str()); } else { M5.Lcd.printf("HTTP request error!"); return; } M5.update(); //リソースを解放する http.end(); delay(5000); } }
プログラムを改造した箇所
前回と違うのは
- M5Stack.hをインクルードする部分と
- setupブロックの M5Stackの関連設定
- loop内の serialに出力する部分を全部 M5Stack.Lcdに出力することにしました。せっかくなので、液晶LCDを活用したいですね
動作確認
証拠ビデオをとりましたので、こちらをご覧ください!
#M5Stack
で#ビットコイン の値段を表示させる動作ビデオ pic.twitter.com/xQMlrcEZZy— 機械学習・深層学習・Python・Web、IoT (@kokensha_tech) 2019年5月22日
まとめ
いかがですか?私はとても楽しかったです。
内部がEPS32なので、WiFiに接続するなど、完全に無修正で、動きます。あと、M5Stackの液晶を利用する部分は、シリアルモニターと比べて、ずっと直感的ですし、パソコンもいらないですし、USBケーブルを抜けばそのまま、動作します(設定されたWifi環境内)
課題としては、せっかくボタンがあるので、5秒間隔ではなく、値段がきになるときに、ボタンをクリックして、取ってくるのがもっと環境に優しいですよね。笑
また、画面更新時、アニメーションとか、ビットコインのアイコンなど色々追加すると、もっと「可愛く」なるかなと思います!
では、また改造していきたいので、アップデートがあったらまた共有します!
[amazonjs asin=”B07CLZYQPY” locale=”JP” title=”M5Stack拡張可能なマイクロ制御モジュールWiFi Bluetooth ESP32開発キットArduino LCD用2インチLCD ESP-32内蔵ESP8266″]
[amazonjs asin=”B07BW4KVWM” locale=”JP” title=”M5Stack Gray(9軸IMU搭載)”]
[amazonjs asin=”B07J9QBN4T” locale=”JP” title=”M5Stack NEW PSRAM 2.0! FIRE IoT Kit Dual Core ESP32 16M-FLash+4M-PSRAM Development Board MIC/BLE MPU6050+MAG3110 of Micropython (FIRE)”]