.github/workflows | ||
assets | ||
public | ||
.gitignore | ||
.marprc.yml | ||
Makefile | ||
README.md |
title | marp | paginate | style |
---|---|---|---|
Raspberry Pi Zero 版 CHIRIMEN | true | true | section :is(h1, h2, h3, h4, h5, h6) { border-bottom: 10px solid #F5CE52; } |
2024-10-05 ハンズオン
Raspberry Pi Zero 版 CHIRIMEN ハンズオン
WebDINO Japan シニアエンジニア 渡邉浩平
CHIRIMEN とは
JavaScript からハードウェアを制御するプロトタイピング環境 センサーやモーターなど組み合わせたさまざまなものをつくることができます
本日の内容
Raspberry Pi Zero 版 CHIRIMEN 導入編
- 11:00 Hello Real World(L チカを実行する)
- 12:00 〜昼休み〜
- 13:00 CHIRIMEN チュートリアル
- 16:00 片付け・解散
本日のゴール
センサーやモーターの基本的な使い方を理解する
Slack にアクセス (まだの方)
Web IoT Makers Challenge Slack: https://webiotmakerschallenge.slack.com
CHIRIMEN チュートリアル資料
https://tutorial.chirimen.org/pizero/ にアクセス
または
「chirimen pi zero」で検索 🔍
困ったとき・分からないとき・気になることがあるとき
会場のスタッフにお気軽にお声がけください 🖐 Slack でも OK 👌
Web IoT Makers Challenge Slack: https://webiotmakerschallenge.slack.com
機材の確認
- Raspberry Pi Zero W
- CHIRIMEN スターターキット
- microSD カード
- USB ケーブル
Raspberry Pi Zero の起動
- microSD カードを差し込む
- パソコンと USB ケーブルで接続する
- ターミナルに接続する
ターミナルに接続
https://chirimen.org/PiZeroWebSerialConsole/PiZeroWebSerialConsole.html
- ターミナルにアクセス
- [Connect and Login PiZero] を選択
- [接続]
Wi-Fi の設定
- [wifi panel] > [SSID] [PASS PHRASE] を入力
- [SET WiFi] を選択
- [Reboot] を選択
- (もう一度) ターミナルにアクセス
- [Connect and Login PiZero] を選択
- シリアルポートが表示されていれば OK ✅
- 起動完了まで約 2 分間かかります
- [接続]
ブレッドボードでの配線
プログラムを書く
[myApp] > [移動] > [Create New Text] > "hello.js" と入力
import { requestGPIOAccess } from "node-web-gpio"; // 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();
コピー&ペースト > [Save] (保存)
プログラムの実行
"hello.js" を実行する方法
node hello.js
停止するには Ctrl
+C
書式:
node [ファイル名]
サンプルコードのダウンロード
CHIRIMEN panel > Get Examples > hello-real-world (L チカ) > JS GET
他のサンプルコードや配線図を参照することができます
ここまでのまとめ
- Raspberry Pi Zero W のセットアップ
- LED を制御するプログラム (通称 LED チカチカ、L チカ) の実行
CHIRIMEN チュートリアル資料
https://tutorial.chirimen.org/pizero/ にアクセス
または
「chirimen pi zero」で検索 🔍
2024-10-06
いろいろなデバイスを自由に試してみよう
- 自由に進めてもらって OK 👌
- 席はどこでも OK 👌 (午前中)
本日の流れ
Raspberry Pi Zero 版 CHIRIMEN 応用編
- 10:00 自由時間
- 11:20 片付け・ハッカソンチーム分け発表
アイディアワークショップ
- 13:00 ハッカソンに向けてのインプットトーク
- 13:15 アイディアワークショップ
- 14:20 ハッカソンに向けてのチーム相談タイム
- 16:20 各チームの進捗発表
- 16:30 ハッカソンについての説明、機材貸し出し、記念撮影
- 17:00 解散
ハッカソンのポイント
- ときめくような素敵なアイディア
- 本番で作品が機能すること
【参考】過去の作品ギャラリー
「Web×IoT メイカーズチャレンジ」で検索 > ハッカソン作品集 または https://webiotmakers.github.io/gallery/
【参考】CHIRIMEN 対応デバイスの一覧
https://tutorial.chirimen.org/partslist
こちらに掲載がないデバイスについても「〇〇をやりたい」「〇〇できるか気になる」などあればご相談ください
【参考】JavaScript Primer の紹介
これから JavaScript を学びたい人が、ECMAScript 2015 以降をベースにして一から JavaScript を学べる書籍です。 プログラミングをやったことがあるが、今の JavaScript がよくわからないという人が、 今の JavaScript アプリケーションを読み書きできるように書かれています。
JavaScript Primer - 迷わないための入門書 #jsprimer
複数のデバイスを扱うヒント
- GPIO と I2C を組み合わせる
- I2C で複数のデバイスを扱う
GPIO と I2C を組み合わせる
一定温度を超えたとき LED を点灯する例
import { requestGPIOAccess } from "node-web-gpio";
import { requestI2CAccess } from "node-web-i2c";
import SHT30 from "@chirimen/sht30"; // 温湿度センサー SHT30
const gpioAccess = await requestGPIOAccess();
const gpioPort = gpioAccess.ports.get(26);
await gpioPort.export("out");
const i2cAccess = await requestI2CAccess();
const i2cPort = i2cAccess.ports.get(1);
const sht30 = new SHT30(i2cPort, 0x44);
await sht30.init();
while (true) {
const { temperature } = await sht30.readData();
console.log(`${temperature.toFixed(2)} ℃`);
if (temperature > 30) {
await gpioPort.write(1);
} else {
await gpioPort.write(0);
}
}
I2C で複数のデバイスを扱う
それぞれのデバイスの VCC/GND/SDA/SCL を並列接続 ※ 画像にある I2C デバイスはあくまで例です スレーブアドレスが同じデバイスは同時に接続できません
一定温度を超えたとき NeoPixel LED を点灯する例
import { requestI2CAccess } from "node-web-i2c";
import SHT30 from "@chirimen/sht30"; // 温湿度センサー SHT30
import NPIX from "@chirimen/neopixel-i2c"; // NeoPixel I2C
const i2cAccess = await requestI2CAccess();
const port = i2cAccess.ports.get(1);
const sht30 = new SHT30(port, 0x44);
await sht30.init();
const npix = new NPIX(port, 0x41);
await npix.init(8);
while (true) {
const { temperature } = await sht30.readData();
console.log(`${temperature.toFixed(2)} ℃`);
if (temperature > 30) {
await npix.setGlobal(20, 20, 0);
} else {
await npix.setGlobal(0, 0, 0);
}
}
Enjoy the IoT!
⚠ Raspberry Pi のカメラに関する注意事項
- 接続端子・フラットケーブルは壊れやすい
- 引っ張らない
- 折り曲げない
カメラ接続確認コマンド:
$ vcgencmd get_camera
supported=1 detected=1, libcamera interfaces=0
⚠ 片付け注意事項
借りた電子部品は返却しましょう
- Raspberry Pi Zero W (microSD カードはプレゼント!)
- USB ケーブル
- 各種貸し出しデバイス
(詳しくは会場のスタッフが案内します)
ハッカソンに向けて
Slack にてお気軽にご相談お寄せください
今回のハンズオンをスタートとして、それぞれの目指す方向に合わせて技術習得を進めていって頂ければ幸いです
【参考】材料調達 Tips
ネットショップ購入のリードタイムに注意。初動が重要。
https://gist.github.com/elie-j/8a27e7a65a40371e0cda5754ce0a063d