Node、Raspberry Pi、および LCD 画面を使用して天気を監視する方法
ここ数年で、スマート ホーム デバイスは 2015 年の 30 万台未満から 2020 年には約 12 億台にまで増加しました。そして、2021 年までに 15 億台に増加すると予想されています。
したがって、2021 年までに 1 世帯あたりの平均スマート デバイス数が 8.7 に達することを考えると、自宅に少なくともいくつかのスマート デバイスがある可能性があります。
開発者として、独自のスマート ホーム デバイスを構築できるため、この分野ではいくつかの利点があります。
急速な発展を遂げたのはデバイスだけではありません。それらに使用される開発ボードは、ますます商用化され、アクセスしやすくなっています。
この記事では、Raspberry Pi、LCD 画面、および数行のコードを使用して、屋外または特定の場所の天気を監視する方法を説明します.
これは Do It Yourself (DIY) プロジェクトであるため、このデバイスにはいくつかの前提条件が必要です。
前提条件
- Raspberry Pi 3 (またはそれ以降)
- 液晶画面
- 接続ワイヤー
- ポテンショメーター (オプション)
- ブレッドボード (オプション)
作り方
必要なものがすべて揃ったらすぐに始めましょう。一歩一歩進んでいきましょう。
ステップ I - 基本設定
最初のステップは、基本的なセットアップとすべてのコンポーネントの検証で構成されます。
このデモでは、ClimaCell Weather API を気象データ プロバイダーとして使用します。ClimaCell Weather API には、使用する大気質インジケーターを含む多数のインジケーターがあるためです。
API を使用するには、プラットフォームでアカウントを開設し、リクエストに署名するために使用する API キーを取得する必要があります。
アカウントは無料で開設でき、API 呼び出しの制限は 100 時間です。これは私たちのプロジェクトには十分すぎるほどです。
この API キーを取得するとすぐに、ハードウェア構成に移動して、LCD 画面を Raspberry Pi に接続できます。ワイヤーを接続している間は、Raspberry Pi の電源をオフにする必要があります。
Raspberry Pi 3 のピン配置は、次の画像で確認できます。
LCD と開発ボード間のワイヤ接続は次のとおりです。
このハードウェア接続により、LCD 画面は最大の明るさと完全なコントラストになります。輝度レベルは問題ありませんが、コントラストは画面の文字が見えなくなるためです。
そのため、コントラスト レベルを設定するためのポテンショメータを少なくとも 1 つ導入する必要があります。
この時点で、Raspberry Pi の電源を入れると、LCD スクリーンが生きているのが見えるはずです。可変抵抗の助けを借りて、コントラストを制御できるはずです.
ステップ II - プロジェクトの設定
プログラミング言語として、NodeJS を使用してコードを記述します。 Raspberry に NodeJS をまだインストールしていない場合は、次の簡単な手順に従ってください。
新しいフォルダーで、コマンド npm init -y
を実行します 新しい npm パッケージをセットアップするには、コマンド npm install lcd node-fetch
が続きます これら 2 つの必要な依存関係をインストールします。
lcd
LCD スクリーンとの通信に使用されますnode-fetch
ClimaCell API への HTTP リクエストを行うために使用されます。
気象データ プロバイダーと通信するには API キーが必要であると述べました。シークレット API キーをメイン コードに直接配置するか、config.json
を作成できます。 このキーとその他のコード関連の構成を配置できるファイルです。
config.json
{ "cc_key": "<your_ClimaCell_API_key>"}
最後に、プロジェクトのメイン ファイルを作成し、これまでに説明した内容をすべて含めましょう。
// * Dependencies
const Lcd = require("lcd");
const fs = require("fs");
const fetch = require("node-fetch");
// * Globals
const { cc_key } = JSON.parse(fs.readFileSync("./config.json"));
ステップ III - LCD
lcd モジュールを使えば、画面への書き込みは簡単です。このライブラリは、デバイスとの通信方法を抽象化するレイヤーとして機能します。このように、各コマンドを個別に細かく管理する必要はありません。
LCD 画面のコード全体は次のとおりです。
最初のステップは、新しい lcd
を作成することでした オブジェクトを呼び出して、使用したピンを引数として渡します。
キー cols
と rows
LCD ディスプレイの列と行の数を表します。 16x2 は、この例で使用したものです。 LCD に 8 列と 1 行しかない場合は、16 と 2 を値に置き換えてください。
ディスプレイに何かを書き込むには、次の 2 つの方法を連続して使用する必要があります。
- lcd.setCursor() - 書き込み開始位置の選択
- lcd.print()
同時に、これら 2 つの関数を async/away
を利用する promise でラップしました。
この時点で、この機能を使用してディスプレイに何かを印刷できます。 writeToLcd(0,0,'Hello World')
メッセージ Hello World
を出力する必要があります 最初の列から始まる最初の行。
ステップ IV - 気象データ
次のステップは、気象データを取得してディスプレイに表示することです。
ClimaCell は多くの気象データ情報を提供しますが、空気の質や花粉、火災、その他の情報も提供します。データは膨大ですが、LCD 画面には 16 列と 2 行しかないことに注意してください。つまり、わずか 32 文字です。
より多くの種類のデータを表示したいが、この制限が小さすぎる場合は、スクロール効果を使用できます。
このデモでは、単純にして、LCD 画面に次のデータを出力します。
- 現在の日付 (時、分、秒)
- 気温
- 降水強度
ClimaCell から特定の場所のデータを取得するには、地理座標、緯度、経度を送信する必要があります。
都市の座標を見つけるには、latlong.net などの無料ツールを使用して、config.json
に保存できます。 API キーと一緒にファイルするか、コードに直接記述できます。
この時点で、API 呼び出しによって返されるデータ形式は次のとおりです:
{
lat: 45.658,
lon: 25.6012,
temp: { value: 17.56, units: 'C' },
precipitation: { value: 0.3478, units: 'mm/hr' },
observation_time: { value: '2020-06-22T16:30:22.941Z' }
}
このオブジェクトを分解して、気温と降水量の値を取得し、1 行目と 2 行目に表示できます。
ステップ V - まとめ
あとは、スクリプトのロジックを記述し、新しいデータが到着したときに LCD 画面を更新するだけです。
気象データは 5 分ごとに更新されます。しかし、ClimaCell によって 1 時間あたり 100 回の API 呼び出しという制限があるため、さらに進んで毎分気象データを更新することができます。
現在の日付については、次の 2 つのオプションがあります:
- プロパティ
observation_time
を使用できます データを受信した日付を表示する、または - 本物の時計を作って、現在の時刻を表示できます。
私は 2 番目のオプションを選択しましたが、お好きなように選択してください。
右上隅に時間を印刷するには、テキストがぴったり収まるように、最初の列を最初に計算する必要があります。これには、次の式 total columns number
を使用できます マイナス text to display length
日付は 8 文字で、列が 16 あるため、列番号 8 から開始する必要があります。
LCD 設定は非同期であるため、lcd.on()
メソッドを使用する必要があります。 関連するライブラリによって提供されるため、LCD がいつ初期化されて使用できる状態になるかがわかります。
組み込みシステムでのもう 1 つのベスト プラクティスは、使用するリソースを閉じて解放することです。そのため、SIGNINT
を使用しています プログラムの停止時に LCD 画面を閉じるイベント。このような他のイベントは次のとおりです。
SIGUSR1
とSIGUSR2
- nodemon restart のような「kill pid」をキャッチするuncaughtException
- キャッチされていない例外をキャッチする
ステップ VI - 永遠に実行する
スクリプトが完成し、この時点でプログラムを実行できます。終了する前に、やらなければならないことがもう 1 つあります。
この時点で、SSH を使用して、または HDMI ケーブルとモニターを使用して直接 Raspberry Pi に接続している可能性があります。何があっても、端末を閉じるとプログラムは停止します。
同時に、デバイスの電源をオフにしてしばらくしてから、またはすぐに電源をオンにすると、スクリプトは開始されず、手動で実行する必要があります。
この問題を解決するには、pm2 のようなプロセス マネージャーを使用できます。
手順は次のとおりです。
sudo npm install pm2 -g
- pm2 をインストールsudo pm2 startup
- pm2 マネージャーの起動スクリプトを作成pm2 start index.js
- アプリケーションを開始pm2 save
- サーバーの再起動後もプロセス リストを保存ボードを再起動すると、デバイスの準備が整うとスクリプトが自動的に開始されます。
結論
この時点から、新しいデバイスを自由にカスタマイズできます。この気象データ (または、大気汚染、花粉、火災指数、道路リスクなどの ClimaCell からのその他のデータ) が重要であると思われる場合は、カスタム ケースを作成して、Raspberry Pi と LCD ディスプレイをその中に入れることができます。その後、バッテリーを追加したら、デバイスを家に置くことができます。
Raspberry Pi はパソコンのようなものなので、通常 Arduino のようなマイクロコントローラーで行うよりもはるかに多くのことができます。このため、家にある他のデバイスと簡単に組み合わせることができます。
-
Windows8および10でWindowsUpdateトラブルシューティングを使用する方法
Microsoftは、Windows7の導入とともにWindowsOSのOTA更新プロセスを導入しました。これは、問題の更新をプッシュすることで、問題に対処するのに非常に役立ちました。 Windowsを使用している場合、最新のビルドに更新しようとしているときに、運が良ければ、さまざまなエラーが発生する可能性があります。これらの問題に対処するために、MicrosoftはWindowsUpdateのトラブルシューティングと呼ばれるツールを構築しました。 (修正) それは魔法をします。 Windows内のサービス構成をリセットすることで問題を解決します。 したがって、Windowsの更新中に問題が
-
Mac のタスク マネージャー:アクティビティ モニターとその使い方
Mac タスク マネージャーをお探しですか? Windows エクスペリエンスの定番ですが、macOS には Windows ユーティリティと完全に同等のものはありません。代わりに、macOS には「アクティビティ モニター」と呼ばれるプログラムがあり、概して、Windows タスク マネージャーと同じ機能を果たします。 アクティビティ モニターとは何か、それが Mac のタスク マネージャーの代わりになる方法、およびその使用方法をよく見てみましょう。 アクティビティ モニターとは オペレーティング システムの主なタスクの 1 つは、コンピューターで実行されているすべてのソフトウェア