#はじめに
obnizOSを搭載したM5StickCのディスプレイに現在の天気を表示したいと思います。
HTMLとJavaScriptしか使わない簡単なコードなので、プログラミング初心者にも優しくなっています。
天気を取得するにはOpenWeatherMapという無料のAPIを使用します。
完成品
用意するもの
#作成手順
1. OpenWeatherMapにサインアップする
OpenWeatherMapにアクセスし、サインアップをしてください。
その後、サインアップ完了のメールが届きます。メールに記載してあるAPI Keyを控えておいてください。
API Keyは、Webサイトにログイン後、API Keysというページからも確認できます。
2. プログラムを書く
最終プログラムは以下になります。
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
<script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
<script src="https://unpkg.com/obniz@3.2.0/obniz.js" crossorigin="anonymous"></script>
<script src="https://unpkg.com/m5stickcjs/m5stickc.js"></script>
</head>
<body>
<canvas id="canvas" width="80" height="160"></canvas>
<script>
const m5 = new M5StickC('OBNIZ_ID_HERE');
m5.onconnect = async function () {
console.log("connected");
await m5.m5display.onWait();
let ctx = document.getElementById("canvas").getContext("2d");
let baseURL = "http://api.openweathermap.org";
let area = "/data/2.5/weather?q=Tokyo,jp";
let key = "&APPID=APPID_HERE";
let url = baseURL + area + key;
let weatherListEn = ["Clouds","Rain","Clear","Snow","Drizzle","Thunderstorm"];
let weatherListJa = ["くもり","あめ","はれ","ゆき","きりさめ","かみなり"];
$.ajax({
url: url,
type: 'GET',
dataType: "json",
})
.done(function(response) {
weather = response.weather[0].main;
for(let i = 0; i < weatherListEn.length; i++){
if(weather === weatherListEn[i]){
weather = weatherListJa[i];
break;
}
}
console.log(weather);
ctx.clearRect(0, 0, m5.m5display.width, m5.m5display.height);
ctx.fillStyle = "#fff";
ctx.font = "30px sans-serif";
ctx.translate(m5.m5display.width - 30, m5.m5display.height - 10) ;
ctx.rotate(-90 * Math.PI / 180);
ctx.fillText(weather, 0, 0);
m5.m5display.draw(ctx);
});
};
</script>
</body>
</html>
obniz.js, m5stickc.jsをそれぞれ読み込みます。
obniz.jsを読み込んだ後に、m5stickc.jsを読み込むようにしてください。
<script src="https://aframe.io/releases/latest/aframe.min.js"></script>
<script src="https://unpkg.com/obniz@3.2.0/obniz.js" crossorigin="anonymous"></script>
<script src="https://unpkg.com/m5stickcjs/m5stickc.js"></script>
const m5 = new M5StickC('OBNIZ_ID_HERE');
await m5.m5display.onWait();
let baseURL = "http://api.openweathermap.org";
let area = "/data/2.5/weather?q=Tokyo,jp";
let key = "&APPID=APPID_HERE";
let weatherListEn = ["Clouds","Rain","Clear","Snow","Drizzle","Thunderstorm"];
let weatherListJa = ["くもり","あめ","はれ","ゆき","きりさめ","かみなり"];
for(let i = 0; i < weatherListEn.length; i++){
if(weather === weatherListEn[i]){
weather = weatherListJa[i];
break;
}
}
ctx.clearRect(0, 0, m5.m5display.width, m5.m5display.height);
ctx.fillStyle = "#fff";
ctx.font = "30px sans-serif";
ctx.translate(m5.m5display.width - 30, m5.m5display.height - 10) ;
ctx.rotate(-90 * Math.PI / 180);
ctx.fillText(weather, 0, 0);
m5.m5display.draw(ctx);
3. M5StickCを電源に繋ぐ
電源が入ってもディスプレイには何も表示されません。起動したのかわかりづらいですが、電源ボタンを何度も押さないようにしましょう。
4. 実行
上手くいくと、このように現在の天気が表示されます。
最後に
このコードにobnizのdeveloper's consoleからサーバレスイベントを使用すれば、毎日朝8時に天気を自動で取得して表示したり、30分毎に表示したりすることが可能です。
わざわざ、アプリやWebで天気を調べる必要もなくなるので是非作ってみてはいかがでしょうか。
最後まで読んでいただきありがとうございました。