M5StickCに為替レートを表示させる

はじめに

先日購入したM5StickCですが、最初に起動してから殆ど触ってなかったので、
久しぶりにプログラムを書いてみました。
今、外国株を買っている関係で為替レートを見ることが多いので、それを表示させてみました。

プログラム

為替レートは外為オンラインから引っ張ってきます。
リンク先を見ると分かる通り、色んな通貨ペアのデータがあります。
今回はUSDJPYのみ取り出します。
https://www.gaitameonline.com/rateaj/getrate

インターネットへの接続については下記サイトのプログラムを参考にしています。
M5StickCで天気通知システムを作る - Qiita

#include <HTTPClient.h>
#include <M5StickC.h>
#include <WiFi.h>
#include <ArduinoJson.h>

const char* ssid = "xxx";
const char* password = "xxx";

String BID = "";
String ASK = "";

unsigned int counter;

void updateRate(){
  HTTPClient http;
  String url = "https://www.gaitameonline.com/rateaj/getrate";
  http.begin(url);
  int httpCode = http.GET();
  if (httpCode == HTTP_CODE_OK){
    String payload = http.getString();
    DynamicJsonDocument doc(7000);
    deserializeJson(doc, payload);
    splitData(doc);
  }else{
    M5.Lcd.print("FAILED...");
  }
}

void splitData(DynamicJsonDocument doc){
   BID = "BID:"+doc["quotes"][20]["bid"].as<String>();
   ASK = "ASK:"+doc["quotes"][20]["ask"].as<String>();
}

void draw(){
  M5.Lcd.setTextDatum(0);
  M5.Lcd.setTextSize(2);
  M5.Lcd.setTextColor(WHITE);
  M5.Lcd.drawString("USDJPY", 5, 0);
  M5.Lcd.drawString(BID, 10, 20);
  M5.Lcd.drawString(ASK, 10, 40);
}

void setup(){
  M5.begin();
  M5.Lcd.setRotation(3);

  M5.Lcd.print("Connecting to WiFi");
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED){
    M5.Lcd.print(".");
    delay(200);
  }
  M5.Lcd.println("Connected!");
  delay(1500);

  M5.Lcd.fillScreen(0x3186);
  counter = 0;
}

void loop(){
  if (counter % 300==0){
    updateRate();
    draw();
  }

  counter++;
  delay(1000);
}

インターネットへはWiFiで接続するので、ssidとpasswordにはそれぞれアクセスポイントの
SSIDとパスワードを入れます。
後は特筆することがないですが、今回はプログラムが長くなるのが面倒だったので、
USDJPYのデータ位置を予め確認して直接指定しています。
他の通貨ペアも取り出したいなら改良したほうがいいと思います。
f:id:oki-lab:20191118232403j:plain

後記

約2,000円でバッテリ、ディスプレイ付きのArduinoボードが手に入るというのは
いい時代になったなと感じます。
しかも、WiFiやBluetoothまで使えるとなるとアイディアの幅が広がります。(何か思いつくかどうかは別ですが…) 現在、M5StickCを使ってスマートグラスを作成中なので、近日中に記事にしようと思います。