« Arduinoで作ろう(45) OpenWeatherMapの天気情報を取得してみる | トップページ | Arduinoで作ろう(47) GPSモジュールで現在地の緯度・経度を取得 »

2020年4月14日 (火)

Arduinoで作ろう(46) APIを叩いて現在の為替レートを取得する

20200414_esp32_oled_20200414120901

 ESP8266は日本の技適を通ってないので,厳密なことを言うと国内でこれを使う(電波を出す)ことは違法です。僕みたいなアマチュアはそんなこと気にしなくてもいいと思いますが,そろそろ「技適厨」が沸いてきそうな気がするので,今日からESP32に切り替えることにします。
 ところで,「技適厨」ってのは「ネトウヨ」と心性が似てる気がしますね。なんだか承認欲求をこじらせてる感じ(笑)。「技適厨」のネトウヨ率を調べてみたら面白いんじゃないかなー。

 話がそれましたが,AmazonでESP32の開発ボード(990円)を買いました。Wi-FiのほかにBluetoothも使えるんですね。またしばらく遊べそうです。
 ESP32をArduino IDEで使えるようにする手順は例によって省略。僕はこのあたりを参考にしました。ツール>ボードは ESP32 Dev Moduleを選択します。

 とりあえずスケッチ例のBlinkを書き込んでみようとしたら,書き込み中にTimeOutしてしまいます。どうやら書き込むときにはタクトスイッチの複雑な操作が必要みたい。でも,ENとGNDの間に0.1μFくらいのコンデンサを入れてやればめんどうな操作なしで自動書込できるようになるらしいです。(僕が買った開発ボードは0.1μFではダメで,0.22μF(224)にしてやったらうまく書き込めるようになりました)

20200414_20200414120401

 前回,天気予報APIを叩いてみましたが,今回は openexchangerates.org のAPIを叩いて為替レート(USD/JPY)を取得してみました。ここも無料アカウントを作ってIDをもらっておく必要があります。

//ESP32でhttps://openexchangerates.org/から USD/JPY の為替レート情報を取得する
//I2C OLED SSD1306

#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include "Wire.h"  
#include "SSD1306.h"
#define SDA 21 //SDA-GPIO21
#define SCL 22 //SCL-GPIO22
SSD1306 display(0x3c, SDA, SCL); //I2Cアドレス 0x3c
const char* ssid = "あなたの無線LANのSSID";
const char* password = "あなたのパスワード";
const String endpoint = "http://openexchangerates.org/api/latest.json?app_id=あなたのID";

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
   delay(500);
   Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  display.init();
}

void loop() {
  if ((WiFi.status() == WL_CONNECTED)) {
  HTTPClient http; http.begin(endpoint); 
  int httpCode = http.GET(); 
  if (httpCode > 0) { 
  String payload = http.getString(); 
  Serial.println(httpCode);
  Serial.println(payload);

  DynamicJsonBuffer jsonBuffer;
  String json = payload;
  JsonObject& ratedata = jsonBuffer.parseObject(json);
  if(!ratedata.success()){
  Serial.println("parseObject() failed");
  }

  const double JPY = ratedata["rates"]["JPY"].as<double>();
  const int timestamp = ratedata["timestamp"].as<int>();
  static const char *wd[] = {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
  time_t t = timestamp;
  struct tm *tm = localtime(&t);
  char buff[12];
  sprintf( buff, "%04d/%02d/%02d(%s)",tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,wd[tm->tm_wday] );
  display.clear(); 
  display.setFont(ArialMT_Plain_16); 
  display.drawString(0,0,buff);
  display.display(); 
  display.drawString(0,30,"USD/JPY " + String(JPY));
  display.display(); 
  }
  http.end(); 
  delay(60*60*1000); //60分おきに更新
 }
}

| |

« Arduinoで作ろう(45) OpenWeatherMapの天気情報を取得してみる | トップページ | Arduinoで作ろう(47) GPSモジュールで現在地の緯度・経度を取得 »

Arduino」カテゴリの記事

ESP8266 , ESP32」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



« Arduinoで作ろう(45) OpenWeatherMapの天気情報を取得してみる | トップページ | Arduinoで作ろう(47) GPSモジュールで現在地の緯度・経度を取得 »