こんにちは。IoTフルスタックエンジニアです。
IoTでpython(パイソン)使って遊んだり、デモしたりしている方も多いと思います。
小規模の組み込み機器のソフトウェア(ファームウェア)では、初期のデモから本番まで、C/C++を使うことが多いと思いますが、(本番、製品、ではちょっとお薦めできないのですが、)初期のデモ・PoCの段階では、C/C++で書いたファームウェアとpythonのスクリプトを連携させた実装で実現すると便利なことがあります。
組み込み機器の実装にpythonを絡ませるメリットは
- C言語ほど時間を使わずに、迅速に機器の動作を調べ、素早くプロトタイプすることができます。CでSNS連携しようなんて思うと結構気が遠くなるけれど、python側で処理してしまえば簡単。非常にハイレベルのことはpythonで、細かい高速なところはC/C++で、みたいな住み分けをすると楽に開発できます。
- pythonはバイナリデータとも仲良しです。筆者もmp4の適当なバイナリパーサーがなかったのでpythonで作ったことがあります。Cで書いても良いのですが、調べ物をしたいだけなのにCで書くのは大変だったで。
- C/Python APIを使うと、ハードウェアやロジックの検証が終わったあとで段階的にpythonのクラスや関数をC/C++言語に置き換えて高速化したりすることができます。
- メモリやストレージがたっぷりあるのであれば、pythonで機器がとったデータをそのままこれもpythonから使えるDeepLearningやMachineLearningの処理系に流すこともできます。linuxぐらい走っていないと一般的には大変かと思われますが、2017年のIoT/Embedded展では、組み込みデバイス内でMachineLearningできるライブラリを出している企業もあり、エッジコンピューティングもできます。
ちなみに、みんなだいすきラズパイの RPi.GPIO (IO制御するためのpythonモジュール)の連携のためのソースコードはたったのこれだけです。
サイズ | ソース |
---|---|
31992 | py_gpio.c |
14679 | event_gpio.c |
7848 | c_gpio.c |
7609 | cpuinfo.c |
6266 | py_pwm.c |
4900 | soft_pwm.c |
3295 | common.c |
2871 | constants.c |
1844 | c_gpio.h |
1626 | event_gpio.h |
1557 | common.h |
1474 | constants.h |
1306 | cpuinfo.h |
1282 | soft_pwm.h |
1122 | py_pwm.h |
もし自作のハードウェアをもっとゴリゴリしたいとか、泣く泣く全部C/C++で書かざるをえない状況の方がいらしたら是非一度試してみてください。 コンピュータサイエンスのクラスではパーサーを作るととてもソフトウェアの作りがわかるということですが、python -C/C++連携のコードを一度書くとpythonを上(スクリプト)から使うだけではなくて、下(OS、ハードウェア側)からもつかって理解を進めることができる上に、pythonの豊富なライブラリ資源・高速なC/C++のメリット双方を使えるようになります。
ただ、現時点で製品動作まで本気でpythonで書くのは難しいようです。あくまで開発初期の高速な検証手段としてお薦めします。
参考:pythonの組み込みポーティング(CPython)/プラットフォームをいくつか
- (ほぼ何でも動く)https://www.raspberrypi.org/
- (ほぼ何でも動く)http://beagleboard.org/Products/BeagleBone%20Black
- (限定実装)http://www.tinypy.org/ 64k tinypy "batteries not (yet) included"
- (限定実装)https://micropython.org/
新潟 - 東京を行ったりきたりしてIoT界隈の仕事をしています。12/1は新潟市内に雪がちょっと降りました。雪が降ると風が止んで街が静かになって暖かく感じます。いつも行ってる浜茶屋のco-working spaceでこの土日はIoT三昧(というかお仕事) 荒れた海や、静かに光る冬の海を眺めながら。
次回IoTLT新潟は2018/2の予定です。 広い浜をみながらいつかここで大きなIoTLT企画したいな、と思っています。