ラズパイ日記...番外編...Pi4Bと中華アンプでradikoを聞く

ラズパイ日記...番外編...3台機能引っ越し

ラズパイ日記...番外編...Pi4B購入しました

ラズパイ日記...番外編...ADS-Bを受信する

ラズパイ日記...番外編...Win10のファイルが消える

ラズパイ日記...番外編...esp32-camを9V電池運用へ

ラズパイ日記...34日目...6軸センサーmpu6050

ラズパイ日記...番外編...esp32-camを試す

電車好きな職場の上司とだべっていたところ「模型の先頭にカメラをつけて見てみたい。市販品は2万円もする」とのこと。
ラズパイだと本体大きすぎて模型電車には載らないけど、esp32ならできるのではと調べてみました。

昨年の夏に発売されたこちら。ということで、

今日は、

esp32-camを使って動画を携帯等のブラウザーで確認するまでを試してみます。
 ボードは、27x40mmの基盤両面にesp32と2Mpixelのカメラモジュールが付いてます。Amazonで在庫してたのでポチ。1,240円です。
母艦PCと接続するためにUSB-serial変換器は別途用意する必要があります。

接続配線

USB-serial変換器と接続はVCC,GNDにTx,Rxと4線です。
あと、プログラム書き込み時にesp32を書き込みモードにするためにIO0をGNDに接続する必要があります。

ソフトウェア等

サンプルはArduinoで書かれたものがあります。git cloneして取ってきます。
https://github.com/igrr/esp32-cam-demo
いつもはArduno使ってないのでArduino IDEをインストール。
USB-serial変換器FT232RLのFTDIチップドライバーを母艦PCにインストール必要があります。

構築

makeして
flashしてmonitorすると動かない。WiFiのセットアップで止まっているようです。
いろいろと調べていると電圧が足りないようです。確かにFT232RLの3.3V出力をテスターで測ってみると3.22V。これをesp32-camの3.3Vへ入力してさらにレギュレータを通るようです。ということで電源を5Vにして配線変更しました。結果、無事解決です。
esp32-camがWebcameraサーバーとなり待ち受けるので、ブラウザーでアドレスたたくと設定画面と動画が飛んできます。

このままだと、家のWiFiルータ環境でしか使えません。esp32-camをアクセスポイントにして直接携帯電話等からアクセスできる方法を検討します。

WiFiのAP化

参考はこちら
http://rikoubou.hatenablog.com/entry/2017/05/09/180847
結構esp32の記事を探すとsoftAP化というサンプルが結構あります。それとdemoプログラムのソースを見比べて、10行ほど書き換えます。
make→flash→monitorすると問題なく動いてます。携帯電話からも動画が見られることを確認できました。
携帯電話使ってるので動画はありません。スクリーンショットです。

あとは連続運用の試験とか電池運用できるか等を調べていきたいと思います。

まとめ

esp32-camを使って動画を撮影し携帯等のブラウザーで確認するところまで確認できました。

ラズパイ日記...33日目...SSD1306に表示する

esp-idfで引き続き頑張ります。

今日は、

C/C++でesp-idfを使って有機液晶SSD1306に表示させます。
環境は、VScode+PlatformIOです。

このソースを参考にしてます。
https://github.com/yanbe/ssd1306-esp-idf-i2c

今回は意外とすんなりいって、make中のエラーも無かったです。
SDAとSCLのpin番号を設定してあげれば、デモパターンを表示してくれます。

これでC/C++デモは2つ出来ました。C/C++な書きっぷりをもう少し勉強したいと思います。次は、6軸センサーのbmx055かmpu6050を読み込んで角度等を表示できればと思います。C/C++でArduinoはたくさんサンプルあるのですが、esp-idfとなると途端に先人が減ります。

今日の成果は、動画でどうぞ。

今日のまとめ

C/C++でesp-idfを使って有機液晶の表示を確認できました。

ラズパイ日記...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...