KidsBlock ESP32 Education Pack 開発記録 第1回
今回はEducation Packそのものの機能紹介ではなく、「なぜ小中学生向けの電子工作プログラミング環境が必要だと考えたのか」について書きます。
はじめに
私はこれまで、小中学生のロボット・プログラミング教育に関わる中で、さまざまな教材やマイコンボードを使ってきました。
現在、学校やプログラミング教室では、Scratchのようなブロックプログラミングや、教育用ロボット教材が広く使われています。
これらは、プログラミングを初めて学ぶ子どもたちにとって、とても優れた環境です。
しかし、子どもたちが学習を進め、
- 温度を測ってみたい
- 離れた場所へデータを送りたい
- 学校の暑さを調べたい
- 自分で考えたロボットを作りたい
というように、自分のアイデアを実際の「もの」にしたくなったとき、別の課題が見えてきます。
今回は、小中学生が電子工作とプログラミングを組み合わせて「自分のアイデアを形にする」ためには、どのようなプログラミング環境が必要なのかを考えてみたいと思います。
「プログラミングを学ぶ」から「プログラミングで作る」へ
プログラミング教育では、最初に、
- 順次処理
- 繰り返し
- 条件分岐
- 変数
などを学びます。
もちろん、これらは重要です。
しかし私は、その先にもう一つ大切な段階があると考えています。
それは、
「プログラミングそのものを学ぶ」から、「プログラミングを使って何かを実現する」への移行です。
例えば子どもが、
教室が暑くなったら知らせる装置を作りたい。
と考えたとします。
このアイデアを実現するには、プログラムだけでは足りません。
温度を測る
↓
データを読み取る
↓
暑いかどうか判断する
↓
LEDやブザーで知らせる
↓
必要なら離れた場所へ送信する
温度センサ、マイコン、LED、ブザー、無線通信など、さまざまな技術が必要になります。
ここから「電子工作」と「プログラミング」がつながり始めます。
子どものアイデアは教材の範囲を超えていく
教育用のロボットやプログラミング教材には、大きな利点があります。
必要な部品があらかじめ用意され、接続方法も統一されているため、子どもたちは電子回路の細かな知識がなくても作品を作れます。
これは初期の学習では非常に重要です。
一方で、子どもが自由にアイデアを出し始めると、
- このセンサは使えるの?
- GPSを付けられる?
- インターネットへデータを送れる?
- 別の教室まで無線で送れる?
- SDカードに記録できる?
といった要求が出てきます。
ここで、使用している教材の仕様が制約になることがあります。
私は、子どもの発想に対して、
「その教材ではできません」
と答える場面をできるだけ少なくしたいと思っています。
理想は逆です。
「それを実現するには、どんなセンサや部品を使えばよいだろう?」
と一緒に考えられる環境です。
そこで汎用マイコンという選択肢が出てくる
ArduinoやESP32などの汎用マイコンを使うと、選択肢は一気に広がります。
例えばESP32では、さまざまな電子部品を組み合わせることができます。
- 温度・湿度センサ
- 気圧センサ
- 距離センサ
- 光センサ
- GPS
- モーター
- サーボモーター
- LCD
- TFTディスプレイ
- SDカード
さらに、ボードや開発環境に応じて、
- Wi-Fi
- Bluetooth / BLE
- ESP-NOW
- I2C
- SPI
- UART
なども利用できます。
つまり、
測る
↓
考える
↓
動かす
↓
表示する
↓
記録する
↓
送る
という一連のシステムを、マイコンボードを中心に構成できます。
これは、IoTやロボットを学ぶ教材として非常に魅力的です。
しかしArduino IDEは最初の一歩が難しい
ESP32には大きな可能性があります。
ところが、小中学生が最初からArduino IDEを使おうとすると、別の問題が出てきます。
例えば、温湿度センサを一つ使うだけでも、使用するセンサやライブラリに応じて次のようなコードを書くことになります。
#include <DHT.h>
DHT dht(25, DHT22);
void setup() {
Serial.begin(115200);
dht.begin();
}
void loop() {
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
Serial.println(temperature);
Serial.println(humidity);
delay(1000);
}
経験者には短いプログラムです。
しかし、初めてプログラミングする小学生から見れば、
-
#includeとは何か -
floatとは何か -
void setup()とvoid loop()は何が違うのか -
;はなぜ必要なのか - ライブラリとは何なのか
など、一度に理解しなければならないことが多くなります。
本当は、
「温度を測って、暑かったら知らせたい」
ということを考えていたはずなのに、いつの間にかC++の文法を覚えることが目的になってしまう可能性があります。
ブロックプログラミングには大きな意味がある
そこで役立つのがブロックプログラミングです。
先ほどの処理を、
[温度を測る]
[もし 温度 > 30 なら]
[LEDをつける]
のように表現できれば、子どもはプログラムの構造そのものに集中できます。
ブロックにはもう一つ大きな利点があります。
文法エラーが起こりにくいことです。
C++では括弧や { }、; の書き忘れなどでもコンパイルエラーになります。
ブロックなら、部品を組み合わせる感覚で処理の流れを作ることができます。
小中学生の段階では、この利点は非常に大きいと思います。
ただし「簡単にする」だけでは足りない
教育用プログラミング環境を作るとき、「簡単にすること」だけを目標にしてよいのでしょうか。
私はそうではないと考えています。
すべてを隠してしまうと、その環境の中では作品を作れても、次のステップへ進みにくくなります。
ブロック
↓
???
↓
ESP32が動く
だけでは、子どもから見ると中身はブラックボックスです。
そこで、
ブロックプログラミング
↓
Arduino C++コード
↓
ESP32
というつながりが見えることが重要になります。
最初はブロックを使う。
慣れてきたら生成されたプログラムを見る。
さらに興味を持ったらArduino IDEで自分でコードを書く。
このように、学習者の成長に合わせて次の段階へ進める環境が理想だと思います。
「何を作るか」を子ども自身が考える
もう一つ、私が大切だと考えていることがあります。
それは、完成した作品を最初から見せすぎないことです。
例えば、
このセンサを使って熱中症警報器を作りましょう。
という教材を用意すれば、授業は進めやすくなります。
しかし、子どもは、
このセンサは熱中症警報器を作るための部品
と考えてしまうかもしれません。
同じ温湿度センサでも、
- 教室の環境調査
- 植物の栽培
- 体育館の暑さ調査
- 部屋ごとの温度比較
- データロガー
など、さまざまな使い方があります。
私は、
こんなものを作りたい
↓
何を調べればよい?
↓
どんなセンサが必要?
↓
データをどう判断する?
↓
結果をどう知らせる?
という順番で考えてほしいと思っています。
つまり、教材が作品を決めるのではなく、
子どものアイデアによって、使う技術が決まる
という考え方です。
実は先生にとっても難しい
もう一つ忘れてはいけないのが、指導する先生の存在です。
学校の先生全員が、
- C++
- 電子回路
- ESP32
- Wi-Fi
- BLE
- I2C
- SPI
などに詳しいわけではありません。
むしろ、それが当然です。
プログラミング教育を担当するために、すべての先生が組み込みエンジニアになる必要はありません。
だからこそ、
子どもにとって分かりやすいだけでなく、先生にとっても扱いやすい環境
が必要だと思います。
例えば、
[BME280から温度を取得]
というブロックを使いながら、
このセンサはI2Cという方法でESP32と通信している。
と少しずつ説明することができます。
必要になった段階で、一つ深いところへ進めばよいのです。
必要なのは「簡単」と「本物」の間をつなぐ環境
ここまで考えてくると、私が欲しかった環境が見えてきました。
簡単
↑
│
ブロックプログラミング
│
│
汎用ESP32ボード
│
│
Arduino C++
↓
本格的
これは「簡単な環境」と「本格的な環境」を分けるという意味ではありません。
むしろ、その間を連続的につなぐことが重要です。
私が考える小中学生向け電子工作プログラミング環境に必要な条件は、
- 初めてでもブロックで扱える
- 市販のさまざまなセンサや電子部品を利用できる
- 通信・記録・データ処理まで発展できる
- 特定の完成作品に用途を限定しない
- Arduino C++へステップアップできる
- 教員も一緒に学べる
というものです。
そこでKidsBlockに注目した
このようなことを考える中で注目したのが KidsBlock でした。
KidsBlockは、電子工作教材などを開発・販売しているKeyestudio社が提供しているグラフィカル・プログラミング環境です。
KidsBlockは無料でダウンロードして利用できるため、学校、プログラミング教室、家庭などでも導入しやすいことが大きな特徴です。
ブロックを組み合わせてプログラムを作成でき、ArduinoやESP32などのマイコンを扱うことができます。また、ESP32ではブロックからArduino C++コードが生成されるため、ブロックプログラミングからテキストプログラミングへ進むための橋渡しとしても利用できます。
つまり、
子どものアイデア
↓
KidsBlock
↓
ブロックプログラム
↓
Arduino C++
↓
ESP32
↓
実際のセンサ・通信・モーター
という流れを作ることができます。
KidsBlockとEducation Packの関係
ここは誤解されないように明確にしておきたいと思います。
KidsBlockはKeyestudio社が提供するソフトウェアです。
一方、私が開発している KidsBlock ESP32 Education Pack は、KidsBlockそのものを改変したものではありません。
KidsBlockが持っている拡張機能の仕組みを利用して、ESP32を使った教育で欲しい機能を追加するための拡張パックです。
┌──────────────────────────────┐
│ KidsBlock ESP32 Education Pack │
│ センサ・通信・記録・データ処理など │
└──────────────┬───────────────┘
│ 拡張
┌──────────────▼───────────────┐
│ KidsBlock │
│ Keyestudio社が提供 │
│ 無料で利用可能 │
└──────────────┬───────────────┘
│
▼
ESP32
実際の教育活動を考えていると、
- この機能も簡単なブロックにできたら
- このセンサも子どもが使えたら
- ESP-NOWをもっと簡単に使えたら
- SDカードへデータを保存できたら
- 環境データを処理できたら
という要望が次々に出てきます。
そこで、
KidsBlockの良さを残しながら、ESP32を使った電子工作・IoT教育に必要な機能を追加してみよう
と考えました。
それが KidsBlock ESP32 Education Pack の開発を始めた理由です。
補足: KidsBlock ESP32 Education PackはKeyestudio社の公式製品ではなく、KidsBlockの拡張機能を利用して独自に開発している教育向け拡張パックです。
次回
今回は、KidsBlock ESP32 Education Packそのものではなく、
「なぜ小中学生向けの電子工作プログラミング環境が必要だと考えたのか」
について書きました。
次回は、
「KidsBlock ESP32 Education Pack」の開発
として、
- なぜKidsBlockをベースにしたのか
- 最初にどんな機能を作ったのか
- ESP-NOWや環境計測などをなぜ追加したのか
- 実機テストでどんな問題が起きたのか
- ChatGPTとCodexをどのように開発に利用したのか
- AIを利用した開発で、人間はどのような役割を担うのか
など、実際の開発過程について紹介したいと思います。
KidsBlock ESP32 Education Pack 開発記録
- 第1回:小中学生向け電子工作プログラミング環境は、なぜ必要なのか ← 今回
- 第2回:「KidsBlock ESP32 Education Pack」の開発
- 第3回:「KidsBlock ESP32 Education Pack」の紹介
関連情報
- KidsBlock:Keyestudio社が提供するグラフィカル・プログラミング環境
- KidsBlock ESP32 Education Pack:KidsBlockの拡張機能を利用した独自の教育向け拡張パック
- 対象:ESP32を使った小中学生の電子工作・プログラミング教育など
※KidsBlockの対応OS、対応ボード、配布条件などの最新情報については、Keyestudio/KidsBlockの公式情報をご確認ください。