はじめに
私はこれまで、小中学生を対象としたロボット・プログラミング教育に長く関わってきました。
学校現場でプログラミング教育を続けていると、以前とは違う課題が見えてきます。
現在、多くの学校では児童・生徒用端末としてChromebookが使われています。一方、ESP32のようなマイコンを使った電子工作では、Arduino IDEなどWindows環境を前提とする開発方法が一般的です。
そこで、以前から次のことを考えていました。
学校にあるChromebookだけで、ESP32を使った電子工作やセンサ実験ができないだろうか。
今回の記事では、その問題意識から、TurboWarpを使った最初の試作に至るまでをまとめます。
1. 目指しているのは「人に役立つものを作れる環境」
私が電子工作やプログラミング教育で大切にしているのは、単に「コードを書けるようになること」ではありません。
例えば、LEDを点灯させること自体は大切な学習です。しかし、その先に、
- 教室の温度や湿度を測る
- 熱中症対策に役立てる
- 冬の乾燥状態を調べる
- 離れた場所のセンサ情報を集める
- ロボット同士を通信させる
といった「実際の課題を解決する活動」につながってほしいと考えています。
私が目指しているのは、
子供たちが、自分のアイデアを生かして「人に役立つもの」を作れる環境
です。
そのためには、プログラミング言語の文法学習だけでなく、センサ、表示、通信、データ処理までを無理なく扱えることが重要です。
2. WindowsではKidsBlock ESP32 Education Packを開発
私はこれまで、KidsBlock用の拡張機能として KidsBlock ESP32 Education Pack を開発してきました。
KidsBlockはブロックプログラミングからArduino系のコードを生成できるため、小中学生がESP32を扱う入口として非常に使いやすい環境です。
Education Packでは、例えば次のような機能をブロック化してきました。
- GPIO
- DHT11 / DHT22
- BME280
- OLED / LCD
- ESP-NOW
- MACアドレスなどのESP32システム情報
- WBGTや絶対湿度などの環境指数
これによって、児童・生徒でもセンサを使った作品を比較的簡単に作れるようになります。
しかし、学校で実際に使うことを考えると別の問題がありました。
3. Chromebook中心の学校ではWindowsソフトが使いにくい
学校で児童・生徒が使う端末がChromebookの場合、Windows用のソフトウェアをインストールする前提の教材は使いにくくなります。
特に学校端末では、
- ソフトウェアを自由にインストールできない
- 管理者権限がない
- 学校Wi-FiへのIoT機器接続が難しい
- USB機器の利用に制限がある場合がある
といった制約があります。
このため、
Windows PC
↓
専用ソフト
↓
ESP32
という構成だけでは、学校現場で使える範囲が限られてしまいます。
そこで考えたのが、
Chromebook
↓
Chrome
↓
Webアプリ
↓
USB
↓
ESP32
という構成です。
4. ブラウザからESP32へ接続するWeb Serial
Chrome系ブラウザには Web Serial API があります。
これを利用すると、ブラウザ上のJavaScriptからUSBシリアル機器へアクセスできます。
ESP32をUSBで接続し、ブラウザ上のアプリからシリアル通信できれば、
ブロックプログラミング
↓
JavaScript
↓
Web Serial
↓
USB
↓
ESP32
という流れが作れます。
これなら、Arduino IDEをChromebookへインストールする必要がありません。
ESP32側へ一度だけ共通ファームウェアを書き込んでおけば、授業ではブラウザだけで操作できる可能性があります。
この方式なら、学校での導入のハードルをかなり下げられるのではないかと考えました。
5. 最初に選んだのがTurboWarp
Scratch互換環境の一つに TurboWarp があります。
TurboWarpにはJavaScriptで独自拡張機能を作れる仕組みがあります。
そこで最初に、
TurboWarpの拡張機能からWeb Serialを使ってESP32を操作する
という方法を試すことにしました。
最初の目標は非常に単純です。
TurboWarp
↓
Web Serial
↓
ESP32
↓
GPIO23
↓
LED
ESP32との接続、GPIOの出力ができれば、基本構成が成立します。
実際にWeb Serialを使った接続を作り、ESP32側にコマンドを受信する共通ファームウェアを用意することで、ブラウザからESP32を操作できるようになりました。
6. なぜESP32側に「共通ファームウェア」を入れるのか
一般的なArduino学習では、プログラムを変更するたびに、
プログラム作成
↓
コンパイル
↓
ESP32へ書き込み
↓
実行
という流れになります。
今回の方式では、ESP32側にあらかじめ共通ファームウェアを書き込みます。
その後はブラウザから、
GPIO,23,OUTPUT
GPIO,23,HIGH
のようなコマンドを送信します。
ESP32は受信したコマンドを解釈して処理します。
つまり授業中は、
ブロックを組む
↓
実行する
↓
ESP32が動く
という流れになります。
児童・生徒は、Arduino C++の構文やコンパイルを意識せずに、電子工作へ集中できます。
7. 学校で重要になる「学校Wi-Fiを使わない通信」
ESP32を教育で使うとき、もう一つ大きな課題があります。
それは、学校のWi-Fiです。
学校のネットワークでは、ESP32のようなIoT機器を自由に接続できない場合があります。
そこで注目したのが ESP-NOW です。
ESP-NOWを使えば、学校のWi-Fiや校内LAN、インターネット接続を経由せず、ESP32同士で直接無線通信できます。
ESP32 A
↕
ESP-NOW
↕
ESP32 B
ここは、今回の取り組みで特に強調したい点です。
7. 学校のネットワークを使わずに「通信」を学べる
学校で通信の学習を行おうとすると、実際の校内ネットワークを使う必要があるように思われがちです。
しかし、ESP-NOWを使えば、学校のWi-FiアクセスポイントにESP32を接続する必要がありません。
つまり、
学校Wi-Fi
校内LAN
インターネット
をESP32同士の通信には使わずに、
送信する
↓
受信する
↓
相手を識別する
↓
ブロードキャストする
↓
特定の相手へ送る
↓
受信状態を確認する
といった通信の基本を体験できます。
例えば、ESP32のMACアドレスを使えば「通信相手を指定する」という考え方を学べます。
また、ブロードキャストとユニキャストを比較すれば、
- 全員へ送る通信
- 特定の相手だけへ送る通信
の違いも実機で確認できます。
さらにRSSIや通信距離を調べれば、
- 電波の強さ
- 距離と通信品質
- 壁や建物による影響
- データの欠損
といったテーマにも発展できます。
これは単なる「ESP32の機能紹介」ではなく、学校のネットワーク環境に影響を与えずに、実際の無線通信を使って通信技術を学べる教材になると考えています。
なお、ESP-NOWは2.4GHz帯の無線機能を利用しますが、通常の学校Wi-Fiへ参加して通信する方式ではありません。
また、ChromebookとESP32の接続もWeb Serialを使ったUSB接続なので、こちらもESP32制御そのものに学校ネットワークを必要としません。
このため、
Chromebook ─ USB ─ ESP32 A
↕
ESP-NOW
↕
ESP32 B
という構成で、学校の校内LANや学校Wi-FiをESP32同士の通信経路に使わず、通信の学習ができます。
この点は、学校でのセンサネットワークやロボット通信を考えるうえで大きな利点です。
8. 「センサ値を読む」だけで終わらせたくない
温度・湿度センサを使う授業では、
温度 = 26.5℃
湿度 = 63%
と表示して終わることもできます。
しかし私は、そこからもう一歩進めたいと考えています。
例えば温度と湿度から、
- 絶対湿度
- 露点温度
- 湿球温度
- 不快指数
- Heat Index
- 簡易WBGT
などを求めれば、
センサで測った値を、人が判断できる情報へ変える
という学習になります。
これは「データを取得する」だけでなく、「データを活用する」学習につながります。
9. TurboWarp版開発の方向性
こうしてTurboWarp版では、最終的に次のような構成を目指すことになりました。
- ESP32 接続
- GPIO
- DHT
- OLED
- ESP-NOW
- 環境指数
- データ処理
単にESP32を動かすための拡張ではなく、
測る
↓
考える
↓
通信する
↓
表示する
↓
活用する
までを一つの環境で扱えるようにすることが目標です。
10. 第2回へ
第2回では、実際にTurboWarp上で作った7つのESP32拡張についてまとめます。
特に、
- Web Serialによる接続
- GPIO
- DHT11 / DHT22
- OLED
- ESP-NOW
- 環境指数
- CSVなどのデータ処理
について紹介します。
さらに、TurboWarp Extension Galleryへの提案と、そこからScratch Editorベースの独自環境へ進むことになった理由もまとめます。
関連リンク
ESP32 Education Editor 公開版
GitHub
シリーズ
- 第1回:学校のChromebookからESP32を使いたい
- 第2回:TurboWarpでESP32拡張を作る
- 第3回:Scratch EditorからESP32 Education Editorへ