MAC
 Computer >> コンピューター >  >> システム >> MAC

Node、Raspberry Pi、および LCD 画面を使用して天気を監視する方法

ここ数年で、スマート ホーム デバイスは 2015 年の 30 万台未満から 2020 年には約 12 億台にまで増加しました。そして、2021 年までに 15 億台に増加すると予想されています。

したがって、2021 年までに 1 世帯あたりの平均スマート デバイス数が 8.7 に達することを考えると、自宅に少なくともいくつかのスマート デバイスがある可能性があります。

開発者として、独自のスマート ホーム デバイスを構築できるため、この分野ではいくつかの利点があります。

急速な発展を遂げたのはデバイスだけではありません。それらに使用される開発ボードは、ますます商用化され、アクセスしやすくなっています。

この記事では、Raspberry Pi、LCD 画面、および数行のコードを使用して、屋外または特定の場所の天気を監視する方法を説明します.

Node、Raspberry Pi、および LCD 画面を使用して天気を監視する方法

これは Do It Yourself (DIY) プロジェクトであるため、このデバイスにはいくつかの前提条件が必要です。

前提条件

  • Raspberry Pi 3 (またはそれ以降)
  • 液晶画面
  • 接続ワイヤー
  • ポテンショメーター (オプション)
  • ブレッドボード (オプション)

作り方

必要なものがすべて揃ったらすぐに始めましょう。一歩一歩進んでいきましょう。

ステップ I - 基本設定

最初のステップは、基本的なセットアップとすべてのコンポーネントの検証で構成されます。

このデモでは、ClimaCell Weather API を気象データ プロバイダーとして使用します。ClimaCell Weather API には、使用する大気質インジケーターを含む多数のインジケーターがあるためです。

API を使用するには、プラットフォームでアカウントを開設し、リクエストに署名するために使用する API キーを取得する必要があります。

Node、Raspberry Pi、および LCD 画面を使用して天気を監視する方法
ClimaCell API 制限

アカウントは無料で開設でき、API 呼び出しの制限は 100 時間です。これは私たちのプロジェクトには十分すぎるほどです。

この API キーを取得するとすぐに、ハードウェア構成に移動して、LCD 画面を Raspberry Pi に接続できます。ワイヤーを接続している間は、Raspberry Pi の電源をオフにする必要があります。

Raspberry Pi 3 のピン配置は、次の画像で確認できます。

Node、Raspberry Pi、および LCD 画面を使用して天気を監視する方法
Raspberry Pi 3 ピン

LCD と開発ボード間のワイヤ接続は次のとおりです。

Node、Raspberry Pi、および LCD 画面を使用して天気を監視する方法
Raspberry PI と LCD の接続

このハードウェア接続により、LCD 画面は最大の明るさと完全なコントラストになります。輝度レベルは問題ありませんが、コントラストは画面の文字が見えなくなるためです。

そのため、コントラスト レベルを設定するためのポテンショメータを少なくとも 1 つ導入する必要があります。

Node、Raspberry Pi、および LCD 画面を使用して天気を監視する方法
回路図

この時点で、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 画面のコード全体は次のとおりです。

Node、Raspberry Pi、および LCD 画面を使用して天気を監視する方法
RAW

最初のステップは、新しい lcd を作成することでした オブジェクトを呼び出して、使用したピンを引数として渡します。

キー colsrows 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 文字です。

より多くの種類のデータを表示したいが、この制限が小さすぎる場合は、スクロール効果を使用できます。

Node、Raspberry Pi、および LCD 画面を使用して天気を監視する方法

このデモでは、単純にして、LCD 画面に次のデータを出力します。

  • 現在の日付 (時、分、秒)
  • 気温
  • 降水強度
Node、Raspberry Pi、および LCD 画面を使用して天気を監視する方法
RAW

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 画面を更新するだけです。

Node、Raspberry Pi、および LCD 画面を使用して天気を監視する方法
RAW

気象データは 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 画面を閉じるイベント。このような他のイベントは次のとおりです。

  • SIGUSR1SIGUSR2 - 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 のようなマイクロコントローラーで行うよりもはるかに多くのことができます。このため、家にある他のデバイスと簡単に組み合わせることができます。


    1. Windows8および10でWindowsUpdateトラブルシューティングを使用する方法

      Microsoftは、Windows7の導入とともにWindowsOSのOTA更新プロセスを導入しました。これは、問題の更新をプッシュすることで、問題に対処するのに非常に役立ちました。 Windowsを使用している場合、最新のビルドに更新しようとしているときに、運が良ければ、さまざまなエラーが発生する可能性があります。これらの問題に対処するために、MicrosoftはWindowsUpdateのトラブルシューティングと呼ばれるツールを構築しました。 (修正) それは魔法をします。 Windows内のサービス構成をリセットすることで問題を解決します。 したがって、Windowsの更新中に問題が

    2. Mac のタスク マネージャー:アクティビティ モニターとその使い方

      Mac タスク マネージャーをお探しですか? Windows エクスペリエンスの定番ですが、macOS には Windows ユーティリティと完全に同等のものはありません。代わりに、macOS には「アクティビティ モニター」と呼ばれるプログラムがあり、概して、Windows タスク マネージャーと同じ機能を果たします。 アクティビティ モニターとは何か、それが Mac のタスク マネージャーの代わりになる方法、およびその使用方法をよく見てみましょう。 アクティビティ モニターとは オペレーティング システムの主なタスクの 1 つは、コンピューターで実行されているすべてのソフトウェア