ラズパイ日記...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からのリモートデスクトップ接続についてまとめました。

ラズパイ日記...29日目...pythonからC/C++環境へ

前回は、母艦PCをx64 win10にしてWSLなdebianをインストールしたところまででした。

今回は、

WSL debian上でesp32の開発環境esp-idfを構築して、Lチカの確認までいきたいところです。

参考にしたのは、以下のページです。
https://qwx.jp/esp-32-idf-on-linux-mint-ubuntu-vmware/
https://qwx.jp/esp32-esp-idf-hello-world-and-blink-on-linux/

ESP32開発環境としてdebianを使ってる人は皆無で先人も少ない感じです。見た目のいいUbuntuが主流なんですね。ベースは同じなのに。

10年前まではFreeBSD派でkernel panicで落ちるLinuxは馬鹿にしていたのですが、最近は使い勝手の良さに負けてdebian系を使ってます。ラズパイがdebian系なので他のに手を出すとコマンド覚えきれません。

参考ページのとおり設定していけば環境構築は可能です。途中でいろいろと足りないとエラーが出るので、その都度調べてapt-get installが必要です。

サンプルのhello worldとblink(俗にいうLチカ)のコンパイルとESP32への転送、動作確認まで確認できました。状況は動画で。

まずは、hello worldですが、実行バイナリーがESP32に転送されてhello world表示して10秒カウントダウン後再びhello world表示と見た目は地味な動作が続きます。動画ではわかりずらいかもです。

次にblinkは、実行バイナリーがESP32へ転送されるとLEDがon/offします。

今回のまとめ

前回設定したWSLによるdebianにて動作するESP32開発環境のesp-idfを構築した。
また、サンプルプログラム2つ(hello world, blink)の動作を確認した。

ラズパイ日記...28日目...母艦の開発環境変更

母艦PCをx64のWin10にしました
。
これまでのi686 Win7使ってた環境をそのまま、64bit版へ移行すればと思っていましたが、そう簡単ではありません。
まずは、ESP32にpythonコードを送り込むuPycraftですが、Win10ではライブラリーがどうのとうんともすんとも動きません。

この際ちょっと面倒になりますが、C/C++環境で開発できるように環境を構築します。
参考はこちら。
https://watako-lab.com/2018/04/14/esp32_dev_env/

これはWin10にmsys2を入れて疑似Linuxな環境を作って、esp-idfを構築する方法です。

と、いろいろと先人の知恵を眺めているとWSL(Windows Subsytem for Linux)という素晴らしい機能がx64 win10から使えるようになったことがわかりました。
細部は「win10 WSL」というキーワードで検索してみてください。

linux kernelを模したLxsysとLxCoreというエミュレータがkernelの替わりをしてくれます。よって、アイコンクリック一発で立ち上がります。

早速、WSLを使えるようにしてdebianをインストールしました。
WSLを使う設定をして再起動します。その後、Microsoft storeからdebianをインストールします。起動するとCUIなコンソールが即立ち上がります。ものの5分でインストールは完了です。ただし、このdebian何も入ってません。いろいろとapt-get installが必要です。
あとは日本語化とか細かい設定は、以下を参考にしました。

https://scratchpad.jp/debian-on-windows10-2/

ファイルシステムはext4ではなく、NTFS上にVoIFSとかいうので構成され、Win10からも見えるのですが、触るといろいろと壊れるそうです。

これでUSB-serialもちゃんと動いてくれると、esp32開発用にもう一台準備しなくても十分な感じです。esp-idfの構築は、次回ということで。

今日のまとめ

Windows10のWSL(Windows Subsystem for Linux)を使えるように設定し、debianをインストールしました。

ラズパイ日記...番外編...母艦はWin10へ

メモリーの買い間違いありましたが、Amazonで返品交換してもらいようやくパーツがそろいました。

Amazonの返品対応は早いですね。返品ボタン押すと宛先と同封するバーコードの印刷画面が出てきてこれを印刷して、宅急便かゆうパックで送り返します。買い間違いは、送料元払いですが、不良品の場合は着払いで送料もかかりません。
市川AFCで返品はまとめてやってるようですね。
返品センターに届いたら検品等は数時間で完了し、Amazonポイントに反映され返品返金終わりです。クレジットカードだと入金まで1-2週間かかるようですが。

ノート用のDDR4-2400はこちら
デスクトップ用と横幅やpin数が違います。
さて、組み立てです。CPUは、変更不可です。第8世代のi5が入ってます。
 
下がM.2接続のSSDと上がDDR4メモリーです。ほぼ同じ大きさ、揮発性メモリーは16GB,不揮発性SSDは500GBです。 
 
本体は、下部のネジを4本回せば底蓋が空きます。メモリースロットは2つあります。
SSDは、M.2スロットに取り付けます。精密のプラスドライバーが必要です。
えらく発熱するそうなのでヒートシンクを取り付けました。
メモリーは16Gです。普通に使うのには十分だそうです。動画編集等するときに備えて、1スロット空けてあります。
Win10のhomeです。光学ドライブなくても、USB版というのを買えば問題ありません。
USB3.0からSSDへのインストールは15分もあれば終わりました。

ようやくWin10となりました。またこのNUCは、FANが無いため、全く音がしません。
電源オンからの立ち上がりも15秒ほどとなり、音は無音、画面もサクサク動くということで見違えるように環境が良くなりました。

Win10に慣れつつ、引き続き環境設定したいと思います

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

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