#python
#iotlt
#組み込み

こんにちは。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)/プラットフォームをいくつか


新潟 - 東京を行ったりきたりしてIoT界隈の仕事をしています。12/1は新潟市内に雪がちょっと降りました。雪が降ると風が止んで街が静かになって暖かく感じます。いつも行ってる浜茶屋のco-working spaceでこの土日はIoT三昧(というかお仕事) 荒れた海や、静かに光る冬の海を眺めながら。

次回IoTLT新潟は2018/2の予定です。 広い浜をみながらいつかここで大きなIoTLT企画したいな、と思っています。