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コードの実行を簡単に行えます。

2年目のラズパイ...12日目...ESP32始動

秋月で買ったものの長らく手付かずだったESP32ですが、始動します。
確か1,500円くらいだった記憶です。こちらです。
「ESP32」「micropython」というキーワードで先人の知恵を探します。
とりあえず、この辺が参考になるかと
http://www.zikko.net/micom/?p=152

ESP32のFlashを書き換えるツール
https://www.espressif.com/en/support/download/other-tools?keys=&field_type_tid%5B%5D=13

その前にCP210xというUSB-Serial変換するドライバーが必要だそうです。
https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers 

ドライバー入れるとCOM7にて認識されました。
上記のFlash書き換えツールでバイナリーを書き換えます。

一番下の緑のバーが左から右へ進んで書き込み状況を表してます。
1分くらいかかります。書き込みは0x1000からと、おまじないがあります。

USBケーブルを再接続してリセットしてから、TeraTermでCOM7をたたいてみると
micropythonのターミナルが表示されており、環境はインストール完了です。
毎回シリアルでプログラムを書き込むのが面倒なので、便利なツールがあるようです。
「uPyCraft」というのが、Win,mac,unix用それぞれあります。

秋月で売ってるDEvkitCのpin配置はこちら。
とりあえずESP32のmicropython環境は、整いました。中身は次回からと言うことで

2年目のラズパイ...11日目...radikoでラジオ

久しぶりの更新です。

ラズパイでラジコを聞こえるようにしました。

家のPCは、10年ほど前に購入したDELLのセットもの。
CPUはceleron2.2GHzにMemは4GBと当時はそこそこでしたが、
WWW調べて、ラジオ聞いて、Teratermでラズパイをたたいてとやってると、ラジオの音が途切れます。
 

こちらのラズパイは、机の上に常時置いてあり電源ONになってます。半年以上温度+湿度+気圧を15分毎に測定して、Ambientのサーバーにデーターを送っています。
それにしか使っていないので、恒常的な負荷はかかってません。

参考にしたのはこちら。
http://d.hatena.ne.jp/zariganitosh/20130124/rtmpdump_radiko_access

いろいろと先人が開拓してます。
ラジコの仕様が変わるたびに追従する必要があります。

とりあえず
#apt-get update
#apt-get upgrade
で、ライブラリ等を最新版に。

radiko.shというのが転がっているのでそれをget。
ただし、radikoの前の仕様のものがほとんどなので、10箇所ほど修正が必要です。
修正したものを最下部へ張っておきます。

関連リンクを参考に必要なpkgやlibをインストールすれば、問題なく動きます。

#radiko.sh  FMJ

で、J-Waveがストリーミングされ、オーディオジャックかHDMIいずれかへ出力します。デフォルトautoで認識してくれます。

うちでは、HDMI接続でAVアンプに接続してます。

ここからradiko.sh修正版

環境更新...27インチディスプレイ

工作環境で使っているPCは、10年くらい前に買ったdellのセットもの。

メモリー増やしたり、HDDをSDDに変えたりと向上させながら使ってます。
最近、WWWを調べながらTeraTermたたいたりとやってると、画面が小さいのが気になりだしました。19インチだとやはり限界です。

Amazon調べると27インチモニターは、2万円でお釣りが来ることが判明。もっと、お値段するものという先入観でした。迷わずポチッ。4,000円クーポンとこの前のAmazonカードで1.3万円でした。

購入したのはこちら。

古いマザーボーボードに乗ってるビデオチップなので最高でも1280x1024までしか解像度上がりません。
それはいかんと、追加でビデオボードもポチっ。

ここからちょっとはまります。ビデオカード買うときにPCI expressは、x1でもx16でもそれぞれ互換性あるとのことだったので、安心してたのですが。

マザーボードは、PCI expressが1本とPCIが2本。このPCI expressは、すごく小さいコネクタです。x1とx2~x16は、コネクターが違います。がーん。
買い直すか、もう本体新しいの買っちゃうかと調べてみると、ありましたきわものが。
PCI expressのx1とx2以上を変換して接続してくれるケーブルです。ただし。これ使うとビデオカードをマザーボードに固定できないので、ビデオケーブルをビデオカードに接続しPCケースの中に宙ぶらりんで収納する必要があります。

いろいろとはまり、追加ポチっでビデオカード5千円、きわものケーブルが2千円と結局ディスプレイ交換は2万円ほどかかりました。
おかげで、

1920x1080まで表示できるようになり、画面がすごく広くなりました。

 工作環境のbefore,afterです。
before

after
工作環境は、工具類が整理されPC環境もよくなりました。あとは、中身の充実です。

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

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