2年目のラズパイ...16日目...9軸センサー

師匠に触発されて、9軸センサー購入しました。

動き系のセンサーは、どんなものか調べてみるのと、動力系と合わせて倒立振子をつくってみようと思ってます。
どんなものかは、Youtubeに沢山出てます。

センサー情報を元にモーターを制御するのはいろいろと難しい感じですが、結構サンプルもあるのでなんとかなりそうな感じです。目に見えて動くものはわかりやすいのでお勉強にはよろしいかと。

購入したのはBOSCH社BMX055です。めちゃくちゃ小さいです。3つ並んだ真ん中のチップに3つのセンサーが入ってます。他は電源レギュレータと信号線のレベル変換器です。
I2Cのアドレスや駆動電圧により、ジャンパーが必要です。
 JP1,JP2,JP3はすべてオープンのため、I2Cアドレスは以下のとおりです。
加速度 0x19
ジャイロ 0x69
磁気 0x13

JP6オープン,J7ショート,J8オープンとして、電源は3.3V,信号レベルは3.3Vに設定しました。J7は基盤の裏面を半田でジャンパーします。写真わかりにくいですがAEの右上を半田でジャンパーしてます。

ESP32基盤はこんな感じでいろいろと乗っかってます。
動作確認はmicropythonで実施します。先人の知恵をGithubで見つけました。すんなりいくかと思えばそうはいかずです。Pybordで動いたコードのようで、ちょっと修正が必要です。センサーは、I2Cアドレス3つでそれぞれ読み出さないといけないので、加速度、ジャイロ、地磁気センサーそれぞれを1つのデバイスに入れた感じです。コードもそのようになっていて、センサー毎にライブラリになってました。
こちらを参考に
https://github.com/micropython-IMU/micropython-bmx055
bma2x2.py→加速度センサ
bmg160.py→ジャイロセンサ
bmm050.py→地磁気センサ
それぞれがライブラリになっていて、importで読み込む必要があります。

今日のところは、加速度とジャイロまで読み取れるところまで出来ました。
uPyCraftの画面キャプチャーです。下の黄色枠に加速度の3軸(x,y,z)、ジャイロの3軸(x,y,z)計6個の値を0.5秒毎にESP32が読み取って表示しています。
地磁気は次回に。この値だけではよくわからないので、時間変化とともにわかるように可視化も必要です。センサー動かさなくても値が微妙に変わっているので、感度の調整や値の補正も必要なのかもです。
シリアルにセンサー情報をprintするためのpythonコードです。いろいろといらない部分もありますが。

2年目のラズパイ15日目...ESP32+BME280

引き続きESP32です。BOSCH製の温湿度・気圧センサーBME280を接続し、値を読み込み、先週のOLEDに表示するまでを頑張ります。

BME280は、秋月で買うと1,080円です。海外通販だと2-300円だそうです。送られてくるまで日数はかかるそうですが。 上位機種のBME680というのもあり、3項目に加えて空気中のガス濃度を測定してくれます。

BME280は 、ラズパイに接続しAmbientのクラウドに値を15分毎に送るのに使ってます。linuxでの設定は結構簡単だった記憶です。

BME280のドライバーは先人の知恵をいただきます。
https://github.com/catdog2/mpy_bme280_esp8266/blob/master/bme280.py

参考ページは、この辺で
https://qiita.com/tshimizu8/items/e64e1af656b3b00a92d9

 I2C接続のマスターはESP32なのでスレーブ側のセンサー等はバス接続でSCLとSDAの2線を共通にどんどん接続することが出来ます。
ただし、I2C アドレスが競合するとよくないので、その辺はそれぞれのデバイスのデーターシートをよく確認する必要があります。
 BM280の接続は、以下のとおりです。
1pin VDD
2pin GND
3pin CSB→VDD チップセレクトとありますが、I2Cは関係ないそうです。
4pin SDA
5pin SDO→GND I2C ADDR 0x76になります
6pin SCL

いきなり成果写真になってますが、BME280はOLEDの隣に設置し、SDAとSCLをOLED経由でバス接続で延ばして接続します。

 
OLED にセンサーから読み取った温度、湿度、気圧が30秒更新され表示されてます。
母艦PCのuPyCraftの通信状況部分にも確認のためprint文で表示させ、OLEDの表示とあってるか確認しました。モニター画面反射してますがすいません。
OLEDの日本語化とか最新データのグラフ化とか使い方はまだまだあります。
pythonコードは、以下のとおりです。

2年目のラズパイ...14日目...ESP32+OLED

ESP32続きます。

今日は仕事帰りに買ってきた大きなブレッドボードに ESP32を引越しして、
OLED(SSD1306)の表示を頑張ります。

OLEDとは、Organic Light Emitting Diodeの略称で、日本語で言うと有機ELダイオードでしょうか。最近は、テレビなどにも使われています。数年前までは、大きさとか寿命とか製造コスト等いろいろと問題ありでしたが、ようやく製品に採用されています。
液晶に比べて発色が綺麗とかバックライトがいらない等メリットは多いようです。

ちなみに購入したOLEDは、580円でした。

まずはブレッドボードの引越しです。センサーやOLED等配線すると狭くなってきたので。
こちらから


こちらへ


これで、接続して配線できるエリアが広がりました。もう2列くらい幅があるといいのですが。

次にOLEDです。参考にしたページはこちら。
https://qiita.com/inachi/items/ceb3e8e12022a7cbdf7b
 
接続は配線少ないI2Cで行います。 
VCC,GNDとSCL→IO4,SDA→IO5へ接続します。VCCは、3.3Vで大丈夫なようです。データシートには、Logic3.3V-5V、表示部7V-15Vとありましたが。

pythonのライブラリーは、先人の知恵を拝借します。
https://github.com/micropython/micropython/blob/master/drivers/display/ssd1306.py

これで準備完了です。uPyCraftでまずはライブラリーをアップロードします。


①で状況確認できます。②の領域でファイルの中身の確認、③はシリアルコンソールでここからコマンドも入力できます。④でファイルアップロードと実行がワンクリックです。
Teratermでコマンドたたくと結構大変ですが、この統合環境は優れものです。中華ものですが。

まずは、英数字の表示です。結構簡単です。参考ページのコードをそのままたたくと表示されました。日本語は、フォントを入れると表示できるそうですが、そこはまた次回ということで。



サンプルの3D CUBEは、サンプルコードそのままで問題なく動きました。

2年目のラズパイ...13日目...ESP32でLチカ

ESP32ですが、micropythonが動くように環境整備が終りました。

手始めに基本のLチカです。

ブレッドボードのGNDとESP32のGNDを青線で接続し、ESP32の
IO02とGND間に抵抗入りLEDを接続します。
これでIO02の出力を変化させると、LEDが着いたり消えたりするはずです。

pythonコードはこちら。
しかし、LEDがうんともすんとも光りません。

pythonコードとIOピンの番号が違うのかとdatasheetを見直したり、WWWを調べたりといきなりつまずいてます。「故障探求は下位レイヤーから」が基本です。
わかってしまえばなんだなのですが、青線でESP32とブレッドボードのGNDラインを接続しているのですが、ブレッドボード側が接触悪く、皮膜を剥き直して指し直すと問題なくLEDは点滅しました。
動画はこんな感じです。

引き続き、PWMでもわっと光らせてみます。
コードは、こちら。
こちらの動画はこんな感じです。ちょっと周期が早くてわかりづらいですが。

母艦PCとESP32間は、USBケーブルで接続します。ソフトは、TeraTermでチコチココマンドたたくのもいいのですが、uPyCraftというのを使うとESP32へのファイル転送やpythonコードの実行を簡単に行えます。

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

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