倒立ロボットの制御プログラムをmicropythonを作成したものの、動作の遅さで制御しきれませんでした。やはりC/C++環境をと思い立って始めて見たものの、なかなか進みません。
今回は、
ちょっと時間はかかりましたが、今風の開発環境(Visual Studio code,正確には高機能エディターらしいですが)を使うとだいぶ進展しました。C/C++で書いたプログラムを動かしてBME280センサーから値を取り出します。
esp32のC/C++開発はいろいろと嵌(はま)る
進まないポイントは、以下のような感じです。- esspressif社からもサンプル等は提供されているものの、そのままmakeしても途中で止まる
- 開発環境のesp-idfとgccベースのクロスコンパイラー、使用するライブラリーのバージョンの組み合わせで結構はまる
- C言語なのでドライバーの書きっぷりがそれぞれでmake時に止まる。原因を探るとif,elseで{}が合致していない等初歩的な事も多い
まずはI2Cで温度湿度センサーを読んでみようと2日ほど費やして、やっとのことでバイナリーを作成。esp32へ書き込みまでOKでようやく動くかなと思ったら。
こんな感じです。「error code:22」って何?
micropythonならちまちまprint文入れて調べるの簡単なのですが、C/C++環境だと簡単にはいきません。
Win10+debian(WSL版)にて開発環境、USB-serialにてesp32と接続可と環境はできたのですが、中身が進ません。
温度湿度センサーBME280を読み込む
micropythonで書くとちゃちゃっとできたのですが、C/C++だとそうはいきませんでした。いろいろと格闘した結果、C/C++環境でもセンサー値読めるようになりました。原因は、I2C接続のPin番号の設定、I2Cアドレスの設定が違ってました。
ソースコードの行数をmicropythonと比較すると、以下のとおり20倍の差があります。関数やヘッダーファイルもっとダイエット可能ですが10倍ほどの差があると思われます。
結果出力は同じです。手間は、環境作ったり何度もコンパイルしたりとソースコードの行数差以上にC/C++は手間がかかります。
★micropython
bme280.py
206行
★C/C++
main.c+bme280.c+bme280h
188 + 2,231 + 1,714 = 4,133行
夏休み中は、debian上のemacsでソースコードと格闘してましたが、この定数は何とか結構大変でした。流行りのwin10+VScode(Visual Studio code + PlatformIO)環境に移行すると、関数や予約語のカラー表示、定数定義にマウスポインター持っていくと今入ってる定数値が表示される等すこぶるコードの読みっぷりが改善しました。
ビルド→書き込み→シリアルモニターがそれぞれワンクリックでできるのもいい感じです。
makeして
flashして
flashして書き込み終わると同時にプログラムが動き出します。やっとセンサー値読めました。温度、湿度、気圧それぞれ問題なくそれなりの値で出力されてます。
夏休みで終わらず、時間かかりましたが少し進んだ感じです。
0 件のコメント:
コメントを投稿