ホームページ >ウェブフロントエンド >jsチュートリアル >node.jsのRaspberryPi Gpio Pinsを始めましょう
シットポイントインターネットオブシングスウィークスペシャル!今週は、インターネットと物理的な世界の交差点に関する一連の記事を公開しますので、最新のアップデートについてはIoTタグに注目してください。
モノのインターネットは最近の怒りです。物理的なコンピューティングの分野には、実践できる多くのアイデアがあり、私たちが住んでいる世界をプログラミングするのに簡単にふけることができます! Raspberry Piとブレッドボードで、次は何ですか?
この記事では、node.jsを使用してRaspberry PiのGPIOピンにアクセスする方法について説明します。 GPIOピンを使用すると、ハードウェアを直接プログラムできます。 JavaScript APIは、このプロセスをシームレスにします。これらのAPIは、一般的な手法の抽象化であり、どこからでもアクセスできます。 node.jsインタープリターは単一のプロセスで実行され、テスト可能なコードを書き込む新しい方法が開きます。私にとって最もエキサイティングな部分は、他のJavaScriptプログラムと同じように、ユニットテストを作成したり、ブレークポイントを押したり、コードをチェックできることです。これらはすべてコンピューターで実行できます。始めましょう。
キーポイント
gpioとは何ですか?
GPIOは、一般的な入出力の略です。それらは、Raspberry Pi側の隣のピン、黄色のビデオ出力ソケットです。ここに彼らがどのように見えるかがあります。
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から実装の詳細を受け取りました。このライブラリは、各ピン位置の適切な概要を提供します。カーネル上のデバイスファイルを探すこともできます。いずれにせよ、私の目標は、あなたが明確な絵を撮ることができるように、基本を十分に把握することです。
夢中になりましょう、ユニットテストでブレークポイントをどのようにヒットしますか?私はウェブストームを使用してこれを行い、繰り返しになります。
合理的なプログラミング方法を使用する鍵は、エラーを見つけるために必要なフィードバックループを短縮することです。ユニットテストは、ループを締め、すぐにフィードバックを得るための優れた方法です。
簡単にするために、私は単一のピンに書きます。 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ピンを使用する
faqsnode.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 サイトの他の関連記事を参照してください。