ラズパイ日記...31日目...esp32をC/C++開発_I2C-tools

esp32を用いた倒立振子を作成しようとmicropythonで試みましたが、センサー読み込みに時間がかかり過ぎるということが判明。やはり、C/C++環境にてバイナリーを作って動かさないと駄目な感じです。

esp32をC/C++にてI2Cを読む


とりあえず、母艦PC環境にはespressif社から提供されているコンパイラー環境を構築し、Lチカまでは前回確認しました。

まずはセンサー値を読みこむためにI2C接続の確認です。

win10+VScode+PlatformIOに慣れるために、環境はWin10です。
ESP32のバイナリー作るための環境はespressif社からesp-idfとして常にアップデートされてます。久しぶりに見てみると、以前はなかった沢山のサンプルコードがアップされてます。
ということで、I2C-toolというI2C関連のコマンドをesp32上で動かすために関連ファイルをmakeして、バイナリーをesp32へflashして動作確認しました。

ESP32へバイナリーを送り込んで
%make monitor
するとシリアル接続ができます。
i2Cに接続されているセンサー等のアドレスを確認するためのコマンドi2cdetectの表示画面です。コマンドはesp32上のバイナリで動いています。
温度湿度センサーの0x76と有機液晶の0x3cが接続されていることが確認できました。

今日のまとめ

C/C++にてesp32で動作するI2C関連コマンドを作成して、i2c接続しているセンサー等の接続を確認することができた。

ラズパイ日記..32日目...esp-idf環境でBME280を読む

esp32のC/C++環境構築継続中です。

倒立ロボットの制御プログラムをmicropythonを作成したものの、動作の遅さで制御しきれませんでした。やはりC/C++環境をと思い立って始めて見たものの、なかなか進みません。

今回は、

ちょっと時間はかかりましたが、今風の開発環境(Visual Studio code,
正確には高機能エディターらしいですが)を使うとだいぶ進展しました。C/C++で書いたプログラムを動かしてBME280センサーから値を取り出します。

esp32のC/C++開発はいろいろと嵌(はま)る

進まないポイントは、以下のような感じです。
  • esspressif社からもサンプル等は提供されているものの、そのままmakeしても途中で止まる
  • 開発環境のesp-idfとgccベースのクロスコンパイラー、使用するライブラリーのバージョンの組み合わせで結構はまる
  • C言語なのでドライバーの書きっぷりがそれぞれでmake時に止まる。原因を探るとif,elseで{}が合致していない等初歩的な事も多い
といった感じです。動いてる環境でpkgされたものがあればいいのですが、先人は少ない感じです。

まずは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して書き込み終わると同時にプログラムが動き出します。やっとセンサー値読めました。温度、湿度、気圧それぞれ問題なくそれなりの値で出力されてます。
夏休みで終わらず、時間かかりましたが少し進んだ感じです。

今日のまとめ

やっとのことで、esp32をesp-idf開発環境にてI2C接続された温度湿度センサーの値を読み出すことができました。

ラズパイ日記...番外編...2台ディスプレイ環境に

夏休みに入りました。宿題をやろうとは思っているのですが、そういう時に限ってやりたくなる環境整理。
論文締め切り近づくとやたらと机の周りが片付く人もいます。

2台ディスプレイ環境の構築

まずは、いろいろといらないものを捨てて、机の隣にある棚の位置を変更します。このためには棚を動かして棚板を止めている六角ネジを外してと変な体勢の作業で汗だくです。

接続にはこの変換器を使いました(Amazonのリンクはこちら)。
USB-CからUSB-C、USB3.0、HDMI、VGAに変換できます。
 
このようにコネクターの表示です。
以前使っていたDELLの19inchをVGA接続してサブ画面にします。27inchと並べるとえらく小さい感じですが、GWまではこれをメインに使ってました。画面出力ってVGA、HDMIだけだと思い込んでましたが、最近はUSBーCなんですね。
ちなみにHDMIなディスプレイがあれば、この変換器のHDMIに接続して3台ディスプレイ環境も可能だそうです。
これで環境は整いました。さて、宿題の本題を進めないと

今回のまとめ

Windows10にて2台ディスプレイ環境の接続方法についてまとめました。

ラズパイ日記...30日目...SDカード容量増他

前回は、WSL debian上でesp32開発環境を構築してサンプル動作までを確認しました。

今回は前回とは関係しませんが、ラズパイ小ネタを2つ。
1 raspi2+のsd card容量アップ(8GB→32GB)
2 Win10からのremote desktop接続

SD card容量アップ

raspi2+のSDカードを8GBから32GBへ容量アップします。
Amazon感謝dayで800円/枚だったので、勢い余って2枚購入しました。
容量アップについてはたくさん記事出てるよと言いたいところですが、そうは問屋が...

大抵の記事は、
1 コピーしたいSDカードをリーダーに入れてUSB接続する
2 GUI環境にて【左上】→アクセサリ→SD Card copierでコピー元からコピー先へ
3 容量も自動的に増やしてくれる
めでたし

と記載があるのですが、特にエラーは出ませんがコピーしたSDカードからはbootしません。
SDカードの単体不良とかいろいろと想像しましたが、formatはできるしWin10からもちゃんと見えるしと壊れているわけではないようです。
fdiskでbootableにする等試してみましたがだめです。

あきらめて32GBのSDカードは一からOSインストールしました。そうすると問題なく立ち上がります。
apt-get upgradeして、kernelバージョン上がったかなたと思いましたが、そうでもないようです。
【8GB SD】Linux raspberrypi 4.19.57-v7+ #1244 SMP Thu Jul 4 18:45:25 BST 2019 armv7l GNU/Linux

【32GB SD】Linux raspberrypi 4.19.58-v7+ #1245 SMP Fri Jul 12 17:25:51 BST 2019 armv7l GNU/Linux

ラズパイの接続にremote desktop

これは結構簡単で、ラズパイ側はGUI環境にしておきます。xrdpというpkgをインストールすれば準備は完了です。
あとは、Win側からリモートデスクトップ接続でIPアドレスをたたけば、ログイン画面になり、Xが飛んできます。音声をラズパイで再生するか接続したWinで再生するかとか画面の大きさ等を細かく設定できます。操作感は気持ちもっさりしてますが、そう気にするほどでもないです。
Win側にXserverをインストールしなくていいのがメリットでしょうか。
ネットワークは、100MのSWです。Gigabit Etherにすればもっとさっくり動くかもしれません。
リモートデスクトップな画面はこのとおり。
Win全体でみるとこんな感じです。画面の大きさはお好みで全画面等可能です。

今回のまとめ

ラズパイのSD card容量アップは付属ソフトでうまくいかなかった件とWindowsからのリモートデスクトップ接続についてまとめました。

ラズパイ日記...esp32(arduino)+mpu6050

# esp32で6軸センサー読み出し esp32で6軸センサーを読み出し、値をグラフ表示して動作を確認します。 ## 準備 ハード的な接続は、センサーが3.3V駆動できるので、3.3VとGNDの2線で電源供給します。I2C用にSDAとSCLのデータ線が必要ですが、esp...