目次

CHIRIMEN Raspberry Pi Zero W チュートリアル

概要

CHIRIMEN Raspberry Pi Zero版 を用いたIoT実習資料です。

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

準備

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

必要な物品リスト

以下を用意します

Parts Images

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

PCをWiFiに接続

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

Note:

ステップ2 (WiFi設定)

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

配線

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

注意

PiZero配線図

プログラムを書く

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

以下のプログラムをJS Editorに書き写します ~ コピペ(下記プログラム部分を選択してCTRL+c、JS Editorウィンド上でCTRL+v))

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();

実行する

Raspberry Pi について

Raspberry Pi Zeroのピン配列

GPIO, 電源, GND, I2C信号線などのピン配列を記載します。

CHIRIMEN について

CHIRIMEN Raspberry Pi Zero版について

JavaScript の基礎

GPIOを試す

GPIOを理解する

GPIO出力

GPIOの出力はLチカで実験済みですね。そこで今回はモーターを動かしてみましょう。MOSFETを使った回路図は以下のようになります。 GPIO Motor

コードはLチカと全く同じです。

回路について

コードを読む

GPIO入力

GPIO端子の入力が変化したら関数を実行という機能によってGPIOの入力を使います。

コードを読む

GPIO入力(ポーリング)

入力ではイベントの他にポーリングというテクニックが広く使われます。(次章のI2Cデバイスからの入力では専らポーリング)

コードを読む

I2Cデバイスを試す

I2Cを理解する

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: -- -- -- -- -- -- -- --                       

実行する

コードを読む

 import {requestI2CAccess} from "./node_modules/node-web-i2c/index.js"; import SHT30 from "@chirimen/sht30";

ADT7410編

温度センサーADT7410を使います。 もし、SHT30を使用する場合は、「IoTを試す」の章まで読み飛ばしてください。

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: -- -- -- -- -- -- -- --                       

実行する

IoTを試す

遠隔LEDコントロール

system configuration IoTは、制御されるデバイス(上図ではCHIRIMEN PiZeroW)と、利用者端末(上図ではWebApp PC-side)に加えて、これらの間でデータを中継するサーバ(クラウド)が必要になります。 今回はWeb標準技術であるWebSocketプロトコルを中継するサーバを用いてLEDを備えたCHIRIMENデバイスとスマホやPCのWebAppを繋いだIoTシステムを作ります。

Note: モーター制御の回路を組めば、そのまま遠隔モーターコントロールができます

IoT

WebSoeketとRelayServer

配線する

配線は最初のLチカそのままです。 PiZero配線図

CHIRIMENデバイス側にコードを入れ、実行する

PC側のコードを準備し、実行する

Code Sandbox Image

コードを読む

Raspberry Pi Zero側コード

import nodeWebSocketLib from "websocket";
import {RelayServer} from "./RelayServer.js";

PC側コード

import {RelayServer} from "https://chirimen.org/remote-connection/js/beta/RelayServer.js";

自分専用チャンネルで制御

サンプルのコードは共通のチャンネルを使って制御しています。この状態では複数の人が同時に実習していると混信します。(他の人のPCでON/OFFを指示しても、自分のLEDがON/OFFする。同じチャンネルを使っているため。)

これはこれで使い道はあるのですが、自分のLEDは自分だけで制御したい場合は専用のチャンネルを使って制御しましょう。 チャンネルの指定はPiZero側のコードと、PC側のコード両方を同時に同じ内容で設定する必要があり、以下の部分になります。

channel = await relay.subscribe("chirimenLED");

このchirimenLEDという文字列(チャンネル名)を他の人と被らない別のチャンネル名に書き換えます(chirimenLED5など)

他のいろいろなデバイスを試してみる

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

常駐プログラム化する

ターミナルウィンドからnodeコマンドで実行指示しなくても、電源投入後 自動的に指定したコードを起動する設定(常駐プログラム化)ができます。 このチュートリアルでは、foreverを使用する設定を専用GUIを用いて行ってみましょう。

予備知識

CHIRIMEN for Raspberry Pi を利用するに際して、知っておくと良い予備知識やツールの使い方が学べるドキュメントです。

その他、電子工作など一般的な知識は 予備知識・資料集 や、共通資料集を参照してください。

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ディレクトリ以外にも設定できます。