2022-10-05 22:06:10 +09:00
|
|
|
|
---
|
2022-11-22 18:21:34 +09:00
|
|
|
|
title: CHIRIMEN Raspberry Pi Zero W ハンズオン
|
2022-10-05 22:06:10 +09:00
|
|
|
|
marp: true
|
|
|
|
|
paginate: true
|
2022-10-06 14:46:52 +09:00
|
|
|
|
style: |
|
|
|
|
|
section :is(h1, h2, h3, h4, h5, h6) {
|
|
|
|
|
border-bottom: 10px solid #F5CE52;
|
|
|
|
|
}
|
2022-10-05 22:06:10 +09:00
|
|
|
|
---
|
|
|
|
|
|
2023-08-28 18:07:15 +09:00
|
|
|
|
# 2023-09-30
|
2022-10-09 09:20:29 +09:00
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
2022-10-06 14:52:40 +09:00
|
|
|
|
![bg](https://webiotmakers.github.io/static/images/2022/template/ogp.jpg)
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
2022-11-22 18:21:34 +09:00
|
|
|
|
# CHIRIMEN Raspberry Pi Zero W ハンズオン
|
2022-10-05 22:06:10 +09:00
|
|
|
|
|
|
|
|
|
WebDINO Japan シニアエンジニア
|
|
|
|
|
[渡邉浩平](https://github.com/kou029w)
|
|
|
|
|
![w:200](https://github.com/kou029w.png)
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
2022-10-07 21:33:22 +09:00
|
|
|
|
## CHIRIMEN とは
|
|
|
|
|
|
|
|
|
|
![h:480](https://res.cloudinary.com/chirimen/image/fetch/c_limit,f_auto,q_auto,w_1200/https://tutorial.chirimen.org/raspi/imgs/section0/CHIRIMENforRaspberryPi3.png)
|
|
|
|
|
|
2022-11-25 23:36:36 +09:00
|
|
|
|
JavaScript からハードウェアを制御するプロトタイピング環境
|
2022-10-07 21:33:22 +09:00
|
|
|
|
センサーやモーターなど組み合わせたさまざまなものをつくることができます
|
|
|
|
|
|
2023-01-08 16:07:28 +09:00
|
|
|
|
<!-- NOTE: 10-20年前は難しいプログラミングが必要でしたが、今はJavaScriptから簡単に作れるようになりました。 -->
|
|
|
|
|
<!-- NOTE: 具体的にはWeb GPIO APIやWeb I2C APIと呼ばれるオープンな仕様に支えられているオープンソースソフトウェアです。 -->
|
|
|
|
|
|
2022-10-07 21:33:22 +09:00
|
|
|
|
---
|
|
|
|
|
|
2023-08-28 18:07:15 +09:00
|
|
|
|
![h:600](./assets/webiotmakers-gallery.dio.png)
|
2022-10-07 21:37:06 +09:00
|
|
|
|
|
2023-01-08 16:07:28 +09:00
|
|
|
|
<!-- NOTE: CHIRIMENを使い、アイディアを凝らしてさまざまな作品を作っています。 -->
|
|
|
|
|
|
2022-10-07 21:37:06 +09:00
|
|
|
|
<!-- _footer: 画像の引用元: Web×IoT メイカーズチャレンジ 作品ギャラリー https://webiotmakers.github.io/gallery/ -->
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
2023-01-08 16:13:18 +09:00
|
|
|
|
## 本日の内容
|
2022-10-05 22:06:10 +09:00
|
|
|
|
|
2022-11-22 18:21:34 +09:00
|
|
|
|
ハンズオン講習会
|
2022-10-05 22:06:10 +09:00
|
|
|
|
|
2023-09-28 15:44:22 +09:00
|
|
|
|
- 11:00-12:00
|
2022-11-22 18:21:34 +09:00
|
|
|
|
- L チカしてみよう
|
2023-09-28 15:44:22 +09:00
|
|
|
|
- 12:00-13:00 〜昼休み〜
|
|
|
|
|
- 13:00-16:50
|
2022-11-22 18:21:34 +09:00
|
|
|
|
- GPIO に関する基礎知識
|
|
|
|
|
- I2C に関する基礎知識
|
|
|
|
|
- 遠隔制御してみよう
|
2023-01-08 16:12:31 +09:00
|
|
|
|
- 常駐プログラム化してみよう
|
2023-09-28 15:44:22 +09:00
|
|
|
|
- 16:50-17:00 片付け
|
2022-10-05 22:06:10 +09:00
|
|
|
|
|
2022-10-07 21:30:07 +09:00
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 本日のゴール
|
|
|
|
|
|
2022-11-22 18:21:34 +09:00
|
|
|
|
センサーやモーターの基本的な使い方を理解する
|
2022-10-05 22:06:10 +09:00
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## Slack にアクセス (まだの方)
|
|
|
|
|
|
|
|
|
|
[webiotmakerschallenge.slack.com](https://webiotmakerschallenge.slack.com)
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## ハンズオン資料
|
|
|
|
|
|
2022-11-22 18:21:34 +09:00
|
|
|
|
[tutorial.chirimen.org/pizero](https://tutorial.chirimen.org/pizero/)
|
2022-10-05 22:06:10 +09:00
|
|
|
|
または
|
2022-11-22 18:21:34 +09:00
|
|
|
|
「chirimen pi zero」で検索
|
2022-10-05 22:06:10 +09:00
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
2022-10-07 22:28:12 +09:00
|
|
|
|
## 困ったとき・分からないとき・気になることがあるとき
|
2022-10-07 21:37:43 +09:00
|
|
|
|
|
2022-10-07 22:28:12 +09:00
|
|
|
|
会場のスタッフにお気軽にお声がけください 🖐
|
|
|
|
|
(Slack でも OK 👌)
|
2022-10-07 21:37:43 +09:00
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
2022-10-07 22:20:23 +09:00
|
|
|
|
## 機材の確認
|
2022-10-06 17:46:23 +09:00
|
|
|
|
|
2022-10-07 22:20:23 +09:00
|
|
|
|
必要なもの
|
|
|
|
|
|
2022-11-22 18:21:34 +09:00
|
|
|
|
- Raspberry Pi Zero W
|
2022-10-07 22:20:23 +09:00
|
|
|
|
- CHIRIMEN スターターキット
|
|
|
|
|
- microSD カード
|
2022-11-22 18:21:34 +09:00
|
|
|
|
- USB ケーブル
|
2022-10-07 22:20:23 +09:00
|
|
|
|
|
2022-11-22 18:21:34 +09:00
|
|
|
|
(必要なもの以外は片付けておきましょう)
|
2022-10-06 17:46:23 +09:00
|
|
|
|
|
2022-11-22 18:21:34 +09:00
|
|
|
|
<!-- _footer: https://tutorial.chirimen.org/pizero/#pcwifi -->
|
2022-10-06 17:46:23 +09:00
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
2022-11-22 18:21:34 +09:00
|
|
|
|
## Raspberry Pi Zero の起動
|
2022-10-07 22:20:23 +09:00
|
|
|
|
|
2022-11-22 18:21:34 +09:00
|
|
|
|
![h:400](https://chirimen.org/PiZeroWebSerialConsole/imgs/PiZeroW_OTG.JPG)
|
2022-10-07 22:20:23 +09:00
|
|
|
|
|
2022-11-22 18:21:34 +09:00
|
|
|
|
<!-- _footer: https://tutorial.chirimen.org/pizero/#a-hrefhttpschirimenorgpizerowebserialconsolepizerowebserialconsolehtmla- -->
|
2022-10-07 22:20:23 +09:00
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
2022-11-22 18:21:34 +09:00
|
|
|
|
## ターミナルに接続
|
2022-10-06 17:46:23 +09:00
|
|
|
|
|
2022-11-22 18:21:34 +09:00
|
|
|
|
https://chirimen.org/PiZeroWebSerialConsole/PiZeroWebSerialConsole.html
|
2022-10-06 17:46:23 +09:00
|
|
|
|
|
2022-11-22 18:21:34 +09:00
|
|
|
|
↑ こちらにアクセス > Connect and Login PiZero > 接続
|
|
|
|
|
|
|
|
|
|
![](https://d33wubrfki0l68.cloudfront.net/2521683e759f053b3a77eb7d91f3849f0711267b/84e41/pizero/imgs/serialdialog.png)
|
2022-10-06 17:46:23 +09:00
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## Wi-Fi の設定
|
|
|
|
|
|
2022-11-25 16:37:04 +09:00
|
|
|
|
1. wifi panel > SSID、PASS PHRASE に接続情報を入力
|
|
|
|
|
2. SET WiFi
|
|
|
|
|
3. Reboot
|
|
|
|
|
|
2022-10-06 17:46:23 +09:00
|
|
|
|
(接続情報は会場で確認しましょう)
|
|
|
|
|
|
2022-11-22 18:21:34 +09:00
|
|
|
|
<!-- _footer: https://tutorial.chirimen.org/pizero/#wifi -->
|
2022-10-06 17:46:23 +09:00
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
2022-11-22 18:21:34 +09:00
|
|
|
|
## ブレッドボードでの配線
|
2022-10-06 18:45:24 +09:00
|
|
|
|
|
2022-11-22 18:21:34 +09:00
|
|
|
|
![h:600](./assets/led-blink.dio.png)
|
2022-10-06 18:45:24 +09:00
|
|
|
|
|
2022-11-22 18:21:34 +09:00
|
|
|
|
<!-- _footer: https://tutorial.chirimen.org/pizero/#section-3 -->
|
2022-10-06 18:45:24 +09:00
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
2022-11-26 10:39:39 +09:00
|
|
|
|
## サンプルコードの作成
|
2022-10-06 18:45:24 +09:00
|
|
|
|
|
2023-01-08 16:07:28 +09:00
|
|
|
|
"myApp" > 移動 > Create New Text > "hello.js"
|
2022-11-25 16:38:45 +09:00
|
|
|
|
|
2022-11-22 18:21:34 +09:00
|
|
|
|
```js
|
|
|
|
|
import { requestGPIOAccess } from "node-web-gpio"; // WebGPIO を使えるようにするためのライブラリをインポート
|
|
|
|
|
const sleep = (msec) => new Promise((resolve) => setTimeout(resolve, msec)); // sleep 関数を定義
|
2022-10-06 18:45:24 +09:00
|
|
|
|
|
2022-11-22 18:21:34 +09:00
|
|
|
|
async function blink() {
|
|
|
|
|
const gpioAccess = await requestGPIOAccess(); // GPIO を操作する
|
|
|
|
|
const port = gpioAccess.ports.get(26); // 26 番ポートを操作する
|
2022-10-05 22:06:10 +09:00
|
|
|
|
|
2022-11-22 18:21:34 +09:00
|
|
|
|
await port.export("out"); // ポートを出力モードに設定
|
2022-10-05 22:06:10 +09:00
|
|
|
|
|
2022-11-22 18:21:34 +09:00
|
|
|
|
// 無限ループ
|
|
|
|
|
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秒) 待機
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-10-05 22:06:10 +09:00
|
|
|
|
|
2022-11-22 18:21:34 +09:00
|
|
|
|
blink();
|
|
|
|
|
```
|
2022-10-09 09:20:29 +09:00
|
|
|
|
|
2022-11-25 21:58:59 +09:00
|
|
|
|
または
|
|
|
|
|
|
|
|
|
|
CHIRIMEN panel > Get Examples > hello-real-world (L チカ) > JS GET
|
|
|
|
|
|
2022-11-26 10:39:39 +09:00
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## サンプルコードの実行
|
|
|
|
|
|
2022-11-25 21:58:59 +09:00
|
|
|
|
実行コマンド
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
node hello.js
|
|
|
|
|
```
|
|
|
|
|
|
2022-10-09 09:20:29 +09:00
|
|
|
|
---
|
|
|
|
|
|
2022-11-22 18:21:34 +09:00
|
|
|
|
## ここまでのまとめ
|
2022-10-05 22:06:10 +09:00
|
|
|
|
|
2022-11-22 18:21:34 +09:00
|
|
|
|
- CHIRIMEN Raspberry Pi Zero W のセットアップ
|
|
|
|
|
- LED を制御するサンプルコード (通称 LED チカチカ、L チカ) の実行
|
2022-10-09 09:20:29 +09:00
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
2023-08-28 18:07:15 +09:00
|
|
|
|
# 2023-10-01
|
2023-01-13 22:47:11 +09:00
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## いろいろなデバイスを自由に試してみよう
|
|
|
|
|
|
2023-01-14 09:34:12 +09:00
|
|
|
|
- 自由に進めてもらって OK 👌
|
2023-01-14 09:31:56 +09:00
|
|
|
|
- 席はどこでも OK 👌 (午前中)
|
2023-01-13 22:47:11 +09:00
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 本日の流れ
|
|
|
|
|
|
|
|
|
|
ハンズオン講習会
|
|
|
|
|
|
|
|
|
|
- 10:00-10:15 はじめに
|
|
|
|
|
- 10:15-11:45 自由時間
|
|
|
|
|
- 11:45-12:00 片付け・チーム分け発表
|
|
|
|
|
|
|
|
|
|
アイディアワークショップ
|
|
|
|
|
|
|
|
|
|
- 13:00-13:30 インプットトーク
|
|
|
|
|
- 13:30-14:30 アイディアワークショップ
|
2023-09-28 15:44:22 +09:00
|
|
|
|
- 14:30-16:20 各チームの作戦会議
|
|
|
|
|
- 16:20-16:40 各チームの進捗共有
|
|
|
|
|
- 16:40-17:00 ハッカソンの説明など
|
2023-01-13 22:47:11 +09:00
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## ハッカソンのポイント
|
|
|
|
|
|
|
|
|
|
- ときめくような素敵なアイディア
|
|
|
|
|
- 実際に機能するモノ
|
|
|
|
|
|
|
|
|
|
<!-- NOTE: 昨日・今日と技術的な話を中心にやってきましたが、極端な話ハッカソンの本番は、技術的に優れているかどうかは一旦忘れてもらってOK、コピペでOK、人の真似でOK
|
|
|
|
|
ですが限られた時間しかないので、これからの時間で、やりたいことを周りのスタッフに相談したり、Slackで相談してみてください
|
|
|
|
|
-->
|
|
|
|
|
|
|
|
|
|
![bg w:800 right:48%](./assets/webiotmakers-gallery.dio.png)
|
|
|
|
|
|
|
|
|
|
<!-- _footer: 画像の引用元: Web×IoT メイカーズチャレンジ 作品ギャラリー https://webiotmakers.github.io/gallery/ -->
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
2023-09-28 15:44:22 +09:00
|
|
|
|
## 【参考】過去の作品ギャラリー
|
|
|
|
|
|
|
|
|
|
「Web×IoT メイカーズチャレンジ」で検索 > ハッカソン作品集
|
|
|
|
|
または
|
|
|
|
|
https://webiotmakers.github.io/gallery/
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 【参考】CHIRIMEN 対応デバイスの一覧
|
2023-01-13 22:47:11 +09:00
|
|
|
|
|
|
|
|
|
https://tutorial.chirimen.org/partslist
|
|
|
|
|
|
|
|
|
|
こちらに掲載がないデバイスについても「〇〇をやりたい」「〇〇できるか気になる」などあればご相談ください
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 応用編
|
|
|
|
|
|
|
|
|
|
- I2C で複数のデバイスを扱う
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## I2C で複数のデバイスを扱う
|
|
|
|
|
|
|
|
|
|
それぞれのモジュールの VCC/GND/SDA/SCL を並列接続
|
|
|
|
|
![h:450](https://res.cloudinary.com/chirimen/image/fetch/c_limit,f_auto,q_auto,w_1000/https://tutorial.chirimen.org/raspi/imgs/section3/bh1750-and-adt7410.jpg)
|
|
|
|
|
※ 画像にあるセンサーはあくまで例です
|
|
|
|
|
スレーブアドレスが同じデバイスは同時に接続できません
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## I2C で複数のデバイスを扱う - 温湿度センサーと距離センサーの例
|
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
|
import { requestI2CAccess } from "node-web-i2c";
|
|
|
|
|
import SHT30 from "@chirimen/sht30"; // 温湿度センサー SHT30
|
|
|
|
|
import VL53L0X from "@chirimen/vl53l0x"; // 距離センサー VL53L0X
|
|
|
|
|
|
|
|
|
|
async function main() {
|
|
|
|
|
const i2cAccess = await requestI2CAccess();
|
|
|
|
|
const port = i2cAccess.ports.get(1);
|
|
|
|
|
const sht30 = new SHT30(port, 0x44);
|
|
|
|
|
const vl53l0x = new VL53L0X(port, 0x29);
|
|
|
|
|
await sht30.init();
|
|
|
|
|
await vl53l0x.init();
|
|
|
|
|
|
|
|
|
|
while (true) {
|
|
|
|
|
const { humidity, temperature } = await sht30.readData();
|
|
|
|
|
const distance = await vl53l0x.getRange();
|
|
|
|
|
const message = [
|
|
|
|
|
`${temperature.toFixed(2)} ℃`,
|
|
|
|
|
`${humidity.toFixed(2)} %`,
|
|
|
|
|
`${distance} mm`,
|
|
|
|
|
].join(", ");
|
|
|
|
|
console.log(message);
|
|
|
|
|
await sleep(500);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
main();
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
SHT30 と VL53L0X を並列接続し、実行します
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
# Enjoy the IoT!
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## ⚠ 片付け注意事項
|
|
|
|
|
|
|
|
|
|
借りた電子部品は返却しましょう
|
|
|
|
|
|
|
|
|
|
(詳しくは会場のスタッフが案内します)
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## ハッカソンに向けて
|
|
|
|
|
|
|
|
|
|
リードタイムに注意 特に海外からの発送は時間がかかるので余裕を持って
|
|
|
|
|
品薄なものもあるので早めに調達を
|
|
|
|
|
https://gist.github.com/elie-j/8a27e7a65a40371e0cda5754ce0a063d
|
|
|
|
|
|
2022-10-09 09:20:29 +09:00
|
|
|
|
---
|
|
|
|
|
|
2023-01-08 16:07:28 +09:00
|
|
|
|
## フィードバック
|
2022-10-09 09:20:29 +09:00
|
|
|
|
|
2023-01-08 16:07:28 +09:00
|
|
|
|
[このスライドを編集する](https://github.com/kou029w/chirimen-hands-on/edit/main/README.md) / [問題を報告する](https://github.com/kou029w/chirimen-hands-on/issues/new)
|
2022-11-22 18:21:34 +09:00
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 後付
|
|
|
|
|
|
|
|
|
|
過去の資料
|
|
|
|
|
|
2023-08-28 17:48:17 +09:00
|
|
|
|
- [2022 年度 東京版](/chirimen-hands-on/2022/tokyo/)
|
2022-11-22 18:21:34 +09:00
|
|
|
|
- [2022 年度 岡山版](/chirimen-hands-on/2022/okayama/)
|
2023-01-08 16:07:28 +09:00
|
|
|
|
- [2022 年度 愛媛版](/chirimen-hands-on/2022/ehime/)
|
2023-01-08 16:27:19 +09:00
|
|
|
|
|
|
|
|
|
<script type="module">
|
|
|
|
|
document.querySelectorAll("a").forEach(function (a) {
|
|
|
|
|
Object.assign(a, {
|
|
|
|
|
target: "_blank",
|
|
|
|
|
rel: "noreferrer",
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
</script>
|