BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Raspberry PiによるIoT開発

Raspberry PiによるIoT開発

ブックマーク

原文(投稿日:2020/01/31)へのリンク

Rsapberry Piは、標準的なデスクトップコンピュータの数分の1の価格で販売されている小型シングルボードコンピュータのシリーズで、メディアセンタやレトロなゲームマシン、低価格デスクトップなどで広く採用されている。

一方でRaspberry Piは、GPIOすなわち"汎用目的I/O(General Purpose Input Output)"ピンを備えており、センサやモータといった外部電気デバイスを接続してコントロールすることも可能だ。

ピンの役割や数は個々のモデル毎に異なるが、全体的には電源、グラウンド、多目的(general-purpose)ピンに分けられる。

電源とグラウンドピンはプログラムでは制御できない。電源ピンは回路に3.3V/5Vの定電圧を供給し、グラウンドは回路の陰極(cathode)の接続に使用される。

多目的ピンの方はプログラムが可能で、出力と入力のいずれにも使用することができる。出力モードに設定した場合は、3.3Vの低電圧を供給し、オンとオフの切り替えが可能だ。入力モードに設定した場合は、回路から供給される電流を読み取って、3.3Vの電力の受信の有無を示すBoolean値を返す。

このような機能は当然目新しいものではなく、ArduinoNodeMCUといったマイクロコントローラで開発者には馴染みのものだ。しかしながら、これらのデバイスはメモリや演算能力に制限があったり、特殊なプログラム言語を使用する必要のあることが一般的である。

それに対してRaspberry Piでは、Linuxの動作する強力なCPUを備えてNodeJSをサポートすることにより、JavaScript開発者が既存のスキルセットを使って、高度なデバイスを比較的簡単に構築することが可能である。

GPIOピンの操作には、個々のピンへの簡単なアクセスを可能にするonoffというNodeJSモジュールを使用する。

マイクロコントローラの世界での"hello world"に相当するのは、LEDを点滅するプログラムである。例としてあげたコードの大部分は、JavaScript開発者にはお馴染みのものであるはずだ。

const Gpio = require('../onoff').Gpio;
const led = new Gpio(17, 'out');

モジュールをrequireした後、操作対象とするピンの役割を定義する。数値はボード上のピン番号を示しており、続くパラメータでピンを読み取り("in")あるいは書き込み("out")に使用することを指定する。

この例では、ledというピンを定義して、物理的な17番ピンでアサインし、書き込みモード("out")にセットしている。

const blinkInterval = setInterval(blinkLED, 500);

function blinkLED() {
  if (led.readSync() === 0) {
    led.writeSync(1);
  } else {
    led.writeSync(0);
  }
}

後は500msのインターバルを生成して、状態に応じてledをon/offすれば、LEDを点滅させることができる。

setTimeout(() => {
  clearInterval(blinkInterval);
  led.writeSync(0);
  led.unexport();
}, 5000);

LEDの点滅を永遠に続けるつもりがなければ、最後にクリーンアップする必要がある。この例では、インターバルをクリーンするまで5秒間待機して、LEDを消灯し、リソースを解放している。

当然ながらRaspberry Piでは、LEDを点滅させる以外のことも可能である。ドローンや、Raspberry Piスケートボードを作った開発者もいるのだ。JavaScriptで記述されたものばかりではないが、さまざまなレベルのエキサイティングなプロジェクトが、Raspberry PiのWebサイトには多数紹介されている。 

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

BT