CHIRIMEN with Node.js / Raspberry Pi Zero W

概要

CHIRIMEN with Node.js on Raspberry Pi Zero W を用いたIoT実習資料の Hello Real World編 ドラフトです。

pizeronodejs.mdの内容をもとに、Web Serial RPiZero Terminalを使うことで操作を簡単化し、更にプログラム作法をECMA Script Moduleにあわせています。

準備

ステップ0 (物品準備、PCをWiFiに接続)

必要な物品リスト

以下を用意します

PiZero自体はディスプレイやキーボードを接続する必要はありません。

PCをWiFiに接続

ステップ1(ターミナル接続)

Note:

ステップ2 (WiFi設定)

ステップ3 (CHIRIMEN環境設定)

Hello Real World(Lチカを実行する)

配線

PiZero とパーツを使って下の図の通りに配線します。

PiZero配線図

プログラムを書く

Raspberry Pi に接続した LED を点滅させるプログラムを書きます。

以下のプログラムをJS Editorに書き写します(コピペ)

import {requestGPIOAccess} from "./node_modules/node-web-gpio/dist/index.js"; // WebGPIO を使えるようにするためのライブラリをインポート
const sleep = msec => new Promise(resolve => setTimeout(resolve, msec)); // sleep 関数を定義

async function blink() {
  const gpioAccess = await requestGPIOAccess(); // GPIO を操作する 
  const port = gpioAccess.ports.get(26); // 26 番ポートを操作する

  await port.export("out"); // ポートを出力モードに設定

  // 無限ループ
  for (;;) {
    // 1秒間隔で LED が点滅します
    await port.write(1); // LEDを点灯
    await sleep(1000);   // 1000 ms (1秒) 待機
    await port.write(0); // LEDを消灯
    await sleep(1000);   // 1000 ms (1秒) 待機
  }
}

blink();

実行する

いろいろなデバイスのサンプルを試す

色々なデバイスのサンプルが用意されています。まずは、その中からI2CセンサーのADT7410を試しましょう。(SHT30(orSHT31)は次章を参照)

ADT7410編

PiZero温度センサー図

I2Cセンサーが認識さていることを確認する

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                       

実行する

SHT30編

SHT30は温度に加えて湿度も測定できるI2C接続の多機能センサーです。SHT31もほぼ同等に使えます。(SHT31のほうが精度が高い)

I2Cセンサー(SHT30)が認識さていることを確認する

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- 44 -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                       

実行する

その他のデバイスも試してみる

また、CHIRIMEN チュートリアルのなかには、Web GPIO や Web I2C によって扱うことのできる外部デバイスの写真や様々なCHIRIMEN環境のサンプルコードの一覧があります。こちらも参考になるかもしれません。(CHIRIMENはRaspberry Pi ZeroW以外に、Raspberry Pi 3,4や、micro:bit等でも使用できます)

JavaScript の基礎

JavaScript に慣れていない人は、「JavaScript 初学者向け資料集」 も参考にしてください。

CHIRIMEN ブラウザー版との差異

CHIRIMEN ブラウザー版 Node.js
ライブラリ、ドライバーはhtmlで読み込む jsの中で直接読み込む
<script src="polyfill.js"></script >
import {requestGPIOAccess} from "./node_modules/node-web-gpio/dist/index.js";

import {requestI2CAccess} from "./node_modules/node-web-i2c/index.js";
<script src="..../adt7410.js"></script >
import ADT7410 from "@chirimen/adt7410";
Sleep関数を宣言する
const sleep = msec => new Promise(resolve => setTimeout(resolve, msec));

CHIRIMEN環境の任意のディレクトリへのセットアップ

以下のコマンド手順で~/myAppディレクトリ以外にも設定できます。