chirimen-hands-on/README.md

344 lines
8.4 KiB
Markdown
Raw Normal View History

2022-10-05 22:06:10 +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
---
2022-10-09 09:20:29 +09:00
# 1 日目
---
2022-10-06 14:52:40 +09:00
![bg](https://webiotmakers.github.io/static/images/2022/template/ogp.jpg)
---
# CHIRIMEN Raspberry Pi Zero W ハンズオン
2022-10-05 22:06:10 +09:00
2022-11-26/2022-11-27 in 愛媛
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
センサーやモーターなど組み合わせたさまざまなものをつくることができます
---
2022-10-07 21:37:06 +09:00
## 作品例
2022-10-09 09:20:29 +09:00
![h:550](./assets/webiotmakers-gallery.dio.png)
2022-10-07 21:37:06 +09:00
<!-- _footer: 画像の引用元: Web×IoT メイカーズチャレンジ 作品ギャラリー https://webiotmakers.github.io/gallery/ -->
---
2022-10-05 22:06:10 +09:00
## 本日の流れ
ハンズオン講習会
2022-10-05 22:06:10 +09:00
- 11:10-12:10 セットアップ
2022-11-25 22:41:00 +09:00
- 12:10-13:10 〜 お昼休み 〜
- 13:10-15:50 ハンズオン講習会
- L チカしてみよう
- GPIO に関する基礎知識
- I2C に関する基礎知識
- 遠隔制御してみよう
- 16:00-17:00 オープンソースに関する基礎知識
2022-11-25 21:58:59 +09:00
- 標準技術と OSS の基礎
2022-10-05 22:06:10 +09:00
2022-10-07 21:30:07 +09:00
---
## 本日のゴール
センサーやモーターの基本的な使い方を理解する
2022-10-05 22:06:10 +09:00
---
## Slack にアクセス (まだの方)
[webiotmakerschallenge.slack.com](https://webiotmakerschallenge.slack.com)
---
## ハンズオン資料
[tutorial.chirimen.org/pizero](https://tutorial.chirimen.org/pizero/)
2022-10-05 22:06:10 +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
必要なもの
- Raspberry Pi Zero W
2022-10-07 22:20:23 +09:00
- CHIRIMEN スターターキット
- microSD カード
- USB ケーブル
2022-10-07 22:20:23 +09:00
(必要なもの以外は片付けておきましょう)
2022-10-06 17:46:23 +09:00
<!-- _footer: https://tutorial.chirimen.org/pizero/#pcwifi -->
2022-10-06 17:46:23 +09:00
---
## Raspberry Pi Zero の起動
2022-10-07 22:20:23 +09:00
![h:400](https://chirimen.org/PiZeroWebSerialConsole/imgs/PiZeroW_OTG.JPG)
2022-10-07 22:20:23 +09:00
<!-- _footer: https://tutorial.chirimen.org/pizero/#a-hrefhttpschirimenorgpizerowebserialconsolepizerowebserialconsolehtmla- -->
2022-10-07 22:20:23 +09:00
---
## ターミナルに接続
2022-10-06 17:46:23 +09:00
https://chirimen.org/PiZeroWebSerialConsole/PiZeroWebSerialConsole.html
2022-10-06 17:46:23 +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
(接続情報は会場で確認しましょう)
<!-- _footer: https://tutorial.chirimen.org/pizero/#wifi -->
2022-10-06 17:46:23 +09:00
---
## CHIRIMEN 環境設定
2022-10-06 17:46:23 +09:00
2022-11-25 16:37:04 +09:00
CHIRIMEN panel > setup CHIRIMEN
2022-10-06 17:46:23 +09:00
<!-- _footer: https://tutorial.chirimen.org/pizero/#chirimen -->
2022-10-06 17:46:23 +09:00
---
## ブレッドボードでの配線
2022-10-06 18:45:24 +09:00
![h:600](./assets/led-blink.dio.png)
2022-10-06 18:45:24 +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
2022-11-25 22:39:18 +09:00
Create New Text > "hello.js"
2022-11-25 16:38:45 +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
async function blink() {
const gpioAccess = await requestGPIOAccess(); // GPIO を操作する
const port = gpioAccess.ports.get(26); // 26 番ポートを操作する
2022-10-05 22:06:10 +09:00
await port.export("out"); // ポートを出力モードに設定
2022-10-05 22:06:10 +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
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-10-05 22:06:10 +09:00
- CHIRIMEN Raspberry Pi Zero W のセットアップ
- LED を制御するサンプルコード (通称 LED チカチカ、L チカ) の実行
2022-10-09 09:20:29 +09:00
---
# 2 日目
---
## いろいろなデバイスを自由に試してみよう
2022-10-09 09:20:29 +09:00
自分の席に着き次第、自由に進めてもらって OK 👌
---
## 本日の流れ
ハンズオン講習会
2022-11-26 21:41:02 +09:00
- 11:00-11:05 はじめに
- 11:05-11:20 常駐プログラム化してみよう
- 11:20-11:30 I2C で複数のデバイス扱う
2022-11-25 21:58:59 +09:00
- 12:15-12:30 片付け
2022-10-09 09:20:29 +09:00
アイディアワークショップ
2022-11-25 21:58:59 +09:00
- 13:30-14:30 インプットトーク
- 14:30-16:30 各チームの作戦会議
- 16:30-16:45 各チームの進捗共有
- 16:45-17:00 ハッカソンの説明など
2022-10-09 09:20:29 +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/ -->
---
2022-10-09 10:56:37 +09:00
## 応用編
2022-11-26 21:41:02 +09:00
- 常駐プログラム化してみよう
- I2C で複数のデバイスを扱う
2022-10-09 10:56:37 +09:00
---
2022-11-26 21:41:02 +09:00
## 常駐プログラム化してみよう
CHIRIMEN panel > Resident App Conf.
- "STOP ALL APPS": 何も実行しません
- ファイルの指定: 指定したファイルを電源投入後に自動的に実行します
https://tutorial.chirimen.org/pizero/#section-17
---
## デモ
---
## I2C で複数のデバイスを扱う
2022-10-09 10:56:37 +09:00
それぞれのモジュールの 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)
2022-11-26 21:41:02 +09:00
※ 画像にあるセンサーはあくまで例です
2022-10-09 10:56:37 +09:00
スレーブアドレスが同じデバイスは同時に接続できません
---
2022-11-26 21:41:02 +09:00
## I2C で複数のデバイスを扱う - 温湿度センサーと距離センサーの例
2022-10-09 10:56:37 +09:00
```js
import { requestI2CAccess } from "node-web-i2c";
2022-11-26 21:41:02 +09:00
import SHT30 from "@chirimen/sht30"; // 温湿度センサー SHT30
import VL53L0X from "@chirimen/vl53l0x"; // 距離センサー VL53L0X
main();
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);
}
}
```
2022-10-09 10:56:37 +09:00
---
2022-11-27 10:23:03 +09:00
## CHIRIMEN 対応デバイスリスト
https://tutorial.chirimen.org/partslist
こちらに掲載がないデバイスについても「〇〇をやりたい」「〇〇できるか気になる」などあればご相談ください
---
## 動画教材
[誰でもできる IoT 開発基礎 CHIRIMEN Raspberry Pi Zero W チュートリアル ](https://webiotmakers.github.io/2021/materials/)
<iframe width="100%" height="640" src="https://www.youtube-nocookie.com/embed/Y0OaDyrnHV0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
---
2022-10-09 09:20:29 +09:00
## ⚠ 片付け注意事項
借りた電子部品はすべて返却しましょう
2022-10-09 09:20:29 +09:00
(詳しくは会場のスタッフが案内します)
---
## ハッカソンに向けて
リードタイムに注意 特に海外からの発送は時間がかかるので余裕を持って
品薄なものもあるので早めに調達を
https://gist.github.com/elie-j/8a27e7a65a40371e0cda5754ce0a063d
---
## 後付
過去の資料
- [2022 年度 岡山版](/chirimen-hands-on/2022/okayama/)