ホームページ >ウェブフロントエンド >jsチュートリアル >node.jsのRaspberryPi Gpio Pinsを始めましょう

node.jsのRaspberryPi Gpio Pinsを始めましょう

Lisa Kudrow
Lisa Kudrowオリジナル
2025-02-17 12:58:10335ブラウズ

Getting Started with the Raspberry Pi GPIO Pins in Node.js

Getting Started with the Raspberry Pi GPIO Pins in Node.js

シットポイントインターネットオブシングスウィークスペシャル!今週は、インターネットと物理的な世界の交差点に関する一連の記事を公開しますので、最新のアップデートについてはIoTタグに注目してください。

モノのインターネットは最近の怒りです。物理的なコンピューティングの分野には、実践できる多くのアイデアがあり、私たちが住んでいる世界をプログラミングするのに簡単にふけることができます! Raspberry Piとブレッドボードで、次は何ですか?

この記事では、node.jsを使用してRaspberry PiのGPIOピンにアクセスする方法について説明します。 GPIOピンを使用すると、ハードウェアを直接プログラムできます。 JavaScript APIは、このプロセスをシームレスにします。これらのAPIは、一般的な手法の抽象化であり、どこからでもアクセスできます。 node.jsインタープリターは単一のプロセスで実行され、テスト可能なコードを書き込む新しい方法が開きます。私にとって最もエキサイティングな部分は、他のJavaScriptプログラムと同じように、ユニットテストを作成したり、ブレークポイントを押したり、コードをチェックできることです。これらはすべてコンピューターで実行できます。

始めましょう。

キーポイント

    Raspberry Piの共通入出力(GPIO)ピンは、node.jsを使用してアクセスでき、ハードウェアを直接プログラムできるようにします。これらのピンはスイッチのようなもので、入力を受信したり、物理的な世界に出力を送信したり、JavaScript APIはこのプロセスをシームレスにします。
  • GPIO APIは、デバイスファイルの読み取りまたは書き込みのラッパーであり、ファイルシステムAPIは、すでによく知っている概念である可能性があります。 UNIXのようなシステムでは、GPIOは他の通常のファイルと同様に動作し、ソリューションの処理方法の自由を提供します。
  • テスト駆動型の方法は、モノのインターネットに非常に適しています。物理的なコンピューティングでは、コードをデバッグするために世界中にハードウェアを出荷したくありません。テスト駆動型アプローチを使用して、すぐにフィードバックを得て、ソリューションが機能することを確認できます。
  • GPIO APIを使用すると、FSモジュールの周りのラッパーに簡素化でき、クリーンでテスト可能なコードを作成できます。この記事では、これを示しているAPIの効果的なシンチレーターデモを使用して示しています。

gpioとは何ですか?

GPIOは、一般的な入出力の略です。それらは、Raspberry Pi側の隣のピン、黄色のビデオ出力ソケットです。ここに彼らがどのように見えるかがあります。

Getting Started with the Raspberry Pi GPIO Pins in Node.js

出典:raspberry pi
これらは、ラズベリーPIから外の世界に接続する方法と見なすことができます。これにより、コンピューター画面で実行されていないプログラムを作成できます。各ピンは、オンまたはオフにできるスイッチのように見えます。物理的な世界から入力を受信したり、出力を送信したりできます。ベースボードには26個のピンがあり、そのうち9個はパワーまたはグランドピンです。グランドピンは、電流が流れる必要がある各回路の端にあります。更新されたRaspberry Piボードには、14ピンの追加セットも追加されています。

GPIOピンの詳細を知りたい場合は、このオンラインチャートは、使用するために各ピンについて知っておくべきすべてのものを提供します。無数の入力/出力とグランドピンがあります。これらのピンは、物理的なコンピューティングの基礎です。目標に応じて、必要な数のピンを使用できます。

fsをシミュレート!

私はあなたが何を考えているのか、FSと正確に何をしているのか、そしてなぜそれを気にする必要があるのか​​知っていますか? UNIXのようなオペレーティングシステムでは、デバイスファイルはファイルのように見えるドライバーです。簡単に言えば、デバイスドライバーはファイルです!何だと思う? GPIO APIは、デバイスファイルの読み取りまたは書き込みのラッパーです。ファイルシステムAPIは、すでによく知っている概念である可能性があります。 node.jsでファイルを使用したことがない場合は、node.jsのFSモジュールとファイルシステムを確認することをお勧めします。 FSは「ファイルシステム」の略語であり、通常のファイルを読み書きできるか書き込みできます。ここには派手なものは何もありません。たとえば、writefile()など、GPIOに残りを処理させます。トリックは、書くものを書くファイルを知ることです。

Mock-FSと呼ばれる便利なNPMパッケージがあります。これは、単体テストに役立ちます。このライブラリを使用して、メモリ内のファイルシステム上のファイルをシミュレートできます。最も重要なことは、私たちがファイルのみを処理することであり、それが私たちがする必要があるすべてです。 UNIXのようなシステムでは、GPIOは他の通常のファイルと同じように動作します。これにより、このソリューションに対処する方法を自由に選択できます。

mock-fsライブラリのコアは、模擬({})関数です。 JavaScriptオブジェクトであるパラメーターを受信します。このパラメーターでは、必要なファイルを作成できます。ここでの美しさは、それがすべてメモリ内で実行されるので、あなたが望むだけユニットテストを行うことができるということです。通訳は単一のプロセスで実行されます。つまり、FSモジュールは実行時に上書きできます。 JavaScriptは動的な言語であるため、現在のプロセスで利用可能なモジュールをシミュレートできます。

GPIOで優れたユニットテストを作成したら、GPIOインターフェイスがより理にかなっています。私が好きなのは、自動化されたテストカバレッジとクリーンソリューションを取得できることです。ユニットテストは、APIの目的を明確に示しているため、コードの読みやすさを向上させます。

それではやってみましょう。

すべてのコンテンツ

ユニットテスト

「外出」でピンを開いてテストしましょう:

<code class="language-javascript">it('opens a pin with out', function (done) {
  mock({
    '/sys/class/gpio/gpio23/direction': ''
  });

  gpio.open(16, 'out', function () {
    const direction = fs.readFileSync('/sys/class/gpio/gpio23/direction').toString();

    should(direction).equal('out');

    done();
  });
});</code>

このテストの実装では、GPIOの物理的なピン16をBCMピン23にマッピングする必要があります。 BCM番号は、カーネルがデバイスドライバーに表示するBroadcom PIN番号です。 GPIOデバイスドライバーは、デバイスファイルの場所の概要を説明します。示されているように、ピンをオンにするには、文字列「out」を /方向に書き込みます。これは、GPIOにこのピンを書きたいと思っています。完了したら、ファイルに必要なコンテンツが含まれているかどうかを確認します。 mockは、node.jsの標準ファイルシステムであるMock-FSライブラリから来ています。カーネルは、パスがどこにあるかを示します。3.18.x以降は/sys/class/gpioにあります。

ボード上のピンに書き込み、テストするには、次のことを行うことができます。

<code class="language-javascript">it('writes to a pin with a high value', function (done) {
    mock({
      '/sys/class/gpio/gpio23/value': '0'
    });

    gpio.write(16, 5, function () {
      const value = fs.readFileSync('/sys/class/gpio/gpio23/value').toString();

      should(value).equal('1');

      done();
    });
  });</code>
gpio.open()とgpio.write()には類似点があります。 /valueファイルに書き込む書き込み操作を使用します。整合性チェックの場合、私は5の非常に高い値を書きましたが、テスト結果は1であると予想しています。 GPIOは、バイナリと同様に、高い値または低い値のみを受け取ります。

pi-gpioから実装の詳細を受け取りました。このライブラリは、各ピン位置の適切な概要を提供します。カーネル上のデバイスファイルを探すこともできます。いずれにせよ、私の目標は、あなたが明確な絵を撮ることができるように、基本を十分に把握することです。

夢中になりましょう、ユニットテストでブレークポイントをどのようにヒットしますか?私はウェブストームを使用してこれを行い、繰り返しになります。

Getting Started with the Raspberry Pi GPIO Pins in Node.js合理的なプログラミング方法を使用する鍵は、エラーを見つけるために必要なフィードバックループを短縮することです。ユニットテストは、ループを締め、すぐにフィードバックを得るための優れた方法です。

簡単にするために、私は単一のピンに書きます。 GPIOの残りの部分は同じ方法で要約されています。ピンを開けて、それをどうしたいかを伝えます。あなたがする必要があるものは何でも、ピンを読み書きしたり書いたりします。低レベルのAPIはデバイスファイルであるため、各ピンをプログラムする方法を選択できます。

フラッシングデモ

各単体テストを豊かにするには、いくつかの一般的な変数を見てみましょう。

上記の上記では、GPIOのデバイスドライバーへのピンマップとパスを定義しました。次のコードでは、ピンを開いて書き込むためのコードが表示されます。

示されているように、すべての操作は、writefile()をデバイスファイルに書き込むことです。コールバックがない場合、NOOPは仮想コールバックです。この実装の詳細により、パステストを受けて、これが機能すると確信していました。書き込み操作の値は、それが高または低( '0'または '1')に設定されることを保証します。
<code class="language-javascript">var sysFsPath = '/sys/class/gpio/gpio';
var pinMapping = {
  '16': 23
};</code>

最後に、上記のAPIを使用した有効なシンチレーターデモンストレーション:

<code class="language-javascript">function open(pinNumber, direction, callback) {
  const path = sysFsPath + pinMapping[pinNumber] + '/direction';

  fs.writeFile(path, direction, (callback || noOp));
}

function write(pinNumber, value, callback) {
  const path = sysFsPath + pinMapping[pinNumber] + '/value';
  value = !!value ? '1' : '0';

  fs.writeFile(path, value, 'utf8', callback);
}

function noOp() {}</code>

setInterval()は1秒に1回呼び出され、コールバックでモジュラスを使用してピンを切り替えるように指示します。シンチレーターには間隔があり、setimeout()はこれを使用して12秒後にクリアします。 Settimeout()のコールバックは作業を完了し、プログラムを終了します。

サンプルコードを実行するには、:

と入力します

<code class="language-javascript">gpio.open(16, 'out', function () {
  var on = 0;

  var blinker = setInterval(function () {
    gpio.write(16, on, function () {
      on = (on + 1) % 2;

      console.log('ON = ' + on);
    });
  }, 1000);

  setTimeout(function () {
    clearInterval(blinker);
  }, 12000);
});</code>
(RaspberryPiでGPIOにアクセスするには、管理者の許可が必要です

このデモから、GPIOがより直感的に見えることを願っています。方向を使用してピンをオンにすることを期待しています。次に、ピンを書き、GPIOに残りの詳細を処理させます。

結論

テスト駆動型の方法は、モノのインターネットに非常に適しています。モノのインターネットでは、あなたの想像力が限界です。 Raspberry Piは世界中のどこにでも展開できます。物理的なコンピューティングでは、コードをデバッグするために世界中にハードウェアを出荷したくありません。テスト駆動型アプローチを使用して、すぐにフィードバックを得て、ソリューションが機能することを確認できます。生産性を高め、フィードバックループを締めることができます。

GPIO APIの気に入っているのは、FSモジュールの周りのラッパーに簡素化できることです。これにより、クリーンでテスト可能なコードを書くことができます。

残りのサンプルデモはGitHubにアップロードされています。

Raspberry pi

でnode.jsとgpioピンを使用する

faqs
  • node.jsとは何ですか?また、Raspberry PiのGPIOピンで使用する方法は? node.jsは、raspberry piでJavaScriptコードを実行できるJavaScriptランタイム環境です。これを使用して、外部ハードウェアコンポーネントをRaspberry PIに接続するために使用されるGPIO(汎用入力/出力)ピンを制御および対話できます。

  • raspberry piでnode.jsとgpioピンを使用するには、特別なハードウェアが必要ですか? Raspberry PIボード、およびプロジェクトに応じて、LED、センサー、リレーなどの外部コンポーネントが必要です。開始するには、これらのコンポーネントをGPIOピンに接続するためのブレッドボードといくつかのジャンパーも必要です。

  • raspberry piにnode.jsをインストールする方法は? APTパッケージマネージャーを使用するか、node.js Webサイトからダウンロードしてインストールして、raspberry piにnode.jsをインストールできます。特定のRaspberry PIモデルには、node.jsのARM互換バージョンを使用してください。

  • GPIOピンとは何ですか?また、Raspberry PIボードでそれらをどのように識別しますか? GPIOピンは、デジタル入力または出力に使用できるRaspberry Piのピンです。それらは数字でマークされており、Raspberry PIモデルに固有のGPIOピン図を使用して識別できます。

  • node.jsでGPIOピンにアクセスする方法は? rpi-gpio、onoff、またはpigpioなどのライブラリを使用して、node.jsのGPIOピンにアクセスできます。これらのライブラリは、JavaScriptコードでGPIOピンを制御および相互作用するためのAPIを提供します。

  • node.jsプロジェクトでは、入力と出力の両方にGPIOピンを使用することは可能ですか?はい、node.jsプロジェクトでGPIOピンを入力と出力として構成できます。入力ピンに接続されたセンサーの数を読むことができます また、出力ピンに接続されているLED、モーター、またはその他のデバイスを制御します。

  • node.jsのgpio pinをpwm(パルス幅変調)に使用して、輝度や速度などのタスクを制御することは可能ですか?はい、Raspberry PiにいくつかのGPIOピンを使用して、明るさ、モーター速度などを制御することができます。 PigpioなどのライブラリはPWMのサポートを提供し、node.jsと互換性があります。

以上がnode.jsのRaspberryPi Gpio Pinsを始めましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。