最近、MicroPythonってやつについて考えてて。
Stack Overflowの今年のサーベイで見かけたのがきっかけ。たしか、最も人気のある技術カテゴリで…1.6%だったかな。まぁ、2%弱。数字自体は小さいけど、なんでリストに入ってるんだろうって。これがハードウェアとソフトウェアの「橋渡し」になるんじゃないか、って思ったんだよね。
この記事は、そのへんのメモみたいなもの。結局MicroPythonって何なのか、データサイエンティストとして知っておくべきことってあるのか、とか。自分用の整理に近いかな。
TL;DR
先に結論を言うと、MicroPythonは、データサイエンティストが「ハードウェアを触る」ための、すごく良い入り口になる。Pythonが書けるなら、追加でC++みたいな難しいのを学ばなくても、モノを動かせる。これに尽きる。
じゃあ、実際どんな感じなの?
正直、いきなりハードウェア買えって言われても困るよね。自分もそう。でも、Web上で動くシミュレーターがあるから、それで試せる。一番簡単な「Hello, World!」的なやつ、LEDをチカチカさせるやつをやってみる。
やることは単純。ブラウザのターミナルにコードを一行ずつ入れていくだけ。
# まずは時間を扱うライブラリを読み込む
# シミュレーターだから、標準の'time'を使う。実機だと'utime'とかになる
import time
# 次にLEDを点滅させる関数を定義する
# 5回繰り返すだけ
def blink_led():
for _ in range(5):
print("LEDの状態: ON")
time.sleep(0.5) # 0.5秒待つ
print("LEDの状態: OFF")
time.sleep(0.5)
# 最後に関数を呼び出す
blink_led()
これを実行すると、コンソールに「ON」「OFF」が交互に表示される。うん、地味だけど、これが基本。実際には `print` の代わりに、ハードウェアを直接叩く命令を書くことになる。でも、Pythonのロジックでハードが動く感覚は、これで何となく掴めるはず。
そもそもMicroPythonって何者?
さっきのLEDチカチカの裏側にあるのがMicroPython。要するに、これ、すごくコンパクトなPython 3なんだよね。
普通のPythonがPCとかサーバーみたいなパワフルなマシンで動くのに対して、MicroPythonは「マイクロコントローラ」っていう、めちゃくちゃ小さなコンピュータの上で動くように設計されてる。
- マイクロコントローラって?:通称マイコン。一つのチップにCPUとかメモリが乗ってる小さなコンピュータ。IoTセンサーとか、スマート家電とか、ロボットとか、そういうものの頭脳になる部分。
- リソースが少ないって?:メモリが数キロバイトとか、そういうレベル。スマホやPCとは比べ物にならないくらい小さい。だから、普通のPythonは重すぎて動かない。
- GPIOピン:マイコンについてる足(ピン)のこと。ここから電気信号を出したり入れたりして、LEDを光らせたり、センサーの値を読み取ったりする。さっきの `print("ON")` が、実際にはこのピンに電圧をかける命令になるわけ。
なんでこれが重要かっていうと、C++とかアセンブリ言語とか、ハードウェア寄りの難しい言語を知らなくても、慣れたPythonの文法でハードウェアを制御できるから。プロトタイプを素早く作りたいときには、すごく便利。
普通のPythonと何が違うの?
じゃあ、いつものPythonと何が違うのか。これが一番大事なところかも。別物と考えた方がいい。
| 比較項目 | Python (いつも使ってるやつ) | MicroPython |
|---|---|---|
| ターゲット | PC、サーバー。リソースはたっぷりある前提。 | マイクロコントローラ。メモリもCPUもカツカツ。手のひらサイズの基板とか。 |
| 標準ライブラリ | `pandas` `numpy` `scikit-learn`... 何でもござれ。データ分析からWeb開発までフルセット。 | かなり絞られてる。`math` `os`みたいな基本的なものはあるけど、縮小版。`pandas`?もちろん無い。 |
| 得意なこと | 大量のデータを処理したり、複雑な計算をしたり、機械学習モデルを学習させたり。 | ハードウェアを直接叩くこと。センサーからデータを「集める」、モーターを「動かす」、LEDを「光らせる」。 |
| 立ち位置 | データ分析やアプリ開発の主役。 | ハードウェアとの通訳。データサイエンスのパイプラインで言えば、一番最初の「データ収集」部分を担当する感じ。 |
この表を見ればわかるけど、MicroPythonで `import pandas as pd` はできない。それが答え。MicroPythonは、データを集めたり、事前に学習させたすごく小さなAIモデルを実行したり(エッジAI)するためのもの。デバイス上で大規模なデータ分析をするためのものじゃないんだよね。
反例と誤解の整理
ここでよくある誤解をいくつか解いておきたい。
- 誤解1:「Pythonの代替品でしょ?」
いや、違う。さっきの表の通り、完全に専門分野が分かれてる。データ分析には普通のPython。ハードを動かすならMicroPython。適材適所。 - 誤解2:「電子工作の知識が必須なんでしょ?」
あれば有利だけど、必須じゃない。Pythonが分かっていれば、LEDを光らせるくらいならすぐできる。そこから先は、やりたいことに合わせて学んでいけばいい。ハードルはC++よりずっと低い。 - 誤解3:「デバイス上で複雑なAIが動かせるんでしょ?」
動かせない。動かせるのは、あらかじめ別の場所で学習させた、ものすごく軽量化されたモデルを使った「推論」だけ。例えば、画像に「猫」が写ってるかどうかを判断する、みたいな単純なタスク。モデルの「学習」はPCやクラウドでやる必要がある。
このへん、海外のコミュニティ、例えばRaspberry Pi Foundationのフォーラムとか見てるとDIY精神旺盛な人が多いけど、日本ではM5Stackみたいに最初からケースや画面がついてるデバイスが人気な印象がある。あれだとハンダ付けとかしなくても始めやすいから、よりソフトウェア寄りの人にはとっつきやすいかも。QiitaにもM5StackとMicroPythonを使った作例記事がたくさんあるしね。
で、結局、学ぶ価値ある?
正直なところ、ほとんどのデータサイエンティストにとって、日常業務で「必須」になることはないと思う。でも、知っておく価値は間違いなくある。
IoTとかエッジAIとか、言葉だけはよく聞くけど、それがどうやって動いてるのか、データの源流で何が起こってるのかを肌で感じられるから。自分の書いたコードで現実世界のモノが動くっていうのは、単純に面白いしね。
データがどうやって生まれるのか、その「現場」を知ることで、データに対する解像度が上がる。そういう意味で、一度は触ってみるのがおすすめかな。
ちょっと考えてみよう
もし、Pythonの知識だけで何か小さなガジェットを作れるとしたら、何を作ってみたいですか?
例えば「植物の水やりを自動化するやつ」とか、「部屋の二酸化炭素濃度を測って換気を促すアラーム」とか。あなたのアイデアをコメントで教えてください。
