【電子工作】嘘でしょ?加速度が取得できないなんて・・
加速度が取得できない
初心者ならハードルの低いであろう、あの「加速度」の 取得ができないというお話
アリアハン、レーヴェ、ロマリア
DQ3の最初の最初の街、村の名前です
レベルをあげて、アリアハン→レーヴェ→ロマリアという順序で旅をするのです
僕の今の電子工作レベルはLv1です
アリアハンから冒険へと旅立ち、まずはロマリアを目指したいというところ
ロマリアへはLv8くらいで行けたでしょうか、楽しみですね
さぁ、冒険の旅へ
当然、第一歩は先人の知恵から知ることが大事です
なんと僕はLv1ですが、「ググル」という呪文を何度も使えます
Nagaholishはググルをとなえた
インターネッツのせんじんのちえがなみのようにあらわれた
NagaholishはArduinoIDEでmicro:bitのプログラムをビルドしてアップロードすることをおぼえた
ふむふむ
インターネッツの先人たちはライブラリをインストールしてサンプルを実行すれば、いともたやすく加速度が取得できている様子
これはすぐ習得できそうだ!
いきなり瀕死!サンプルが動かない!
街の外へ出た途端、いきなり強敵が現れました
加速度が取得できないのです
本体を傾けても、ブンブン振っても、同じ値を返し続けているようです
え? 年末に買ったmicro:bit、2個ともそうなの?
2個ともそうでした
両方とも故障してるの・・? うそでしょ・・?
USB・・?
はっ!・・USBなのか・・?
先日、M5 ATOM matrix がなぜかPCにつないでも見つからない、という事がありました
それはUSBがデータ転送できるUSBではなかったから、というオチだったのです
このせいで2~3日悩みましたが、落ち着いて考えれば、そりゃそうだよねって思います
ほんと、初心者泣かせだよね
まさか、これと同じでUSBケーブルが悪いんじゃ?
いや、プログラムがアップロードできている時点で、それはないでしょ
でも一応、試しておこう・・
やはり、他のUSBでも、加速度が取得できません
デモ・・?
そういえば、micro:bitが初期状態の時は、デモの中で加速度つかって遊ぶデモがあったよね
MakeCodeなら加速度取得できるってこと?
Nagaholishはググルをとなえた
インターネッツのせんじんのちえがなみのようにあらわれた
NagaholishはMakeCodeのつかいかたをざっくりおぼえた
まじか、ちゃんと取得できておられる・・
っていうことは故障じゃない
MakeCodeでできて、ArduinoIDEではだめ
ということは、ビルド環境?ファームウェア?がダメとか・・?
これは根が深そうだな・・
ファームウェア・・?バージョン・・?
はて、ファームウェア・・か・・
Nagaholishはググルをとなえた
インターネッツのせんじんのちえがなみのようにあらわれた
Nagaholishはmicro:bitにバージョンがそんざいすることをおぼえた
Nagaholishはmicro:bitのバージョンのしらべかたをおぼえた
お?お・・?
v1、v1.5、v2.0、v2.21・・?
なんと、バージョンがあったのかmicro:bitよ!
いったい自分はどのバージョンを掴まされたんだ!?
v2.21、最新じゃないか!
これはボードが最新だが、ファームウェアが古い説だな
ありがちだよね!
Nagaholishはググルをとなえた
インターネッツのせんじんのちえがなみのようにあらわれた
Nagaholishはmicro:bitのファームウェアのしらべかたをおぼえた
Nagaholishはmicro:bitのファームウェアのアップデートのやりかたをおぼえた
・・ファームウェアもばっちし最新ですやん
v1系とv2系で互換あるって、書いてある記事あるけど・・?
自動でv2用にコンバートしてくれるってこと?
v2のボードだけど中身がv1だったりするの・・?
まさか買った2つとも・・?
そんなことありえないでしょ・・
Nagaholishはググルをとなえた
インターネッツのせんじんのちえがなみのようにあらわれた
しかし、なにもわからなかった
ビルド環境・・?
他の原因はビルド環境・・・?
Mac、Windowsで結果は同じだったしな・・
ArduinoIDEのボードはBBC microbit v2・・
・・気が付かなかったけどv2って書いてあるのね
しかも、BBC microbit の方もある
実は、こっちで動くのでは?
NagaholishはArduinoIDEのボードというものをすこしおぼえた
しかし、かそくどはしゅとくできなかった
ですよねー動きませんよねー
ピン・・?
だめだ・・つまった・・ロマリアに行けない・・
このままじゃ、レーヴェにも着けないよ・・
Nagaholishはググルをとなえた
インターネッツのせんじんのちえがなみのようにあらわれた
このページはなにかたいせつなことがかいてありそうだ
ん・・? この人の記事・・これは読んでおいたほうが良い気がする
Nagaholishはmicro:bitのv1.5、v2.xではピンのしようがちがうことをおぼえた
v1.5とv2.xで、ピンの仕様が違うのか・・
それって互換あるって言えるの・・?
NagaholishはVSCodeでmicro:bitのプログラムがかけることをおぼえた
VSCode x PlatformIO
なるビルド環境があるのか・・
これはこれは良さげですね、あとでやってみよう
v2.21の公式や回路やデータシートまで見るようになってきたぞ・・
よく読むと加速度センサーがv1とv2で違うぞ・・
Nagaholishはmicro:bitが、v1とv2でかそくどセンサーのデバイスじたいがちがうことをおぼえた
んんん? ということは、使っている加速度のライブラリが間違ってる?
MMA8653 はv1用なのでは・・?
LSM303AGR こっちがv2っぽいぞ
FXOS8700 こっちもv2なのか・・?
加速度センサーって2つもついてるのか・・?
LSM303AGR、FXOS8700のライブラリ・・あるじゃん・・
これが原因じゃん!絶対!!
いざ、ライブラリを変えてーーーー
・・みても、やはり、サンプルは同じく正しい加速度を取得できない・・
ライブラリ・・?
だいたい、内部の取得処理はどうなってるんだ・?
Nagaholishはライブラリのどうくつにはいった
ふむふむ
Wire、Serialなるものを使ってるね
これは、自分でいじる必要あるの?
サンプルを実行している人たちの記事を読むにはそんなことしていないんだけどな
デバイスの状態は、ピン番号、アドレス指定してデータを読んだり書き込んだりってやるんだね
当たり前だけど、データの読み書きってアドレスに対して行うんだよね
ゲームロジックばっかり書いているとアドレスとかの意識が薄くなってしまうよね
おや?
ここでエラー扱いになって、加速度を返してくれていないっぽい?
I2C・・?NACK・・?
新しい敵、多くない・・?
まだここアリアハンだよね・・?
I2C・・?
NagaholishはI2Cスキャンをおぼえた
I2Cスキャン・・なんだこれは?
I2Cするデバイスを見つけるサンプルとな・・
ざっと読む限り、加速度センサーがつながってるはずなんだ、やってみよう
・・・
・・・
・・・
not found....
・・・
・・・
見つからないって言ってる
もう壊れてるんでしょ、僕のmicro:bitは
それなのにMakeCodeだとちゃんと取得できてるんだもんなー
なんでインターネッツのみなさんはできてるのよ・・
どうしてアリアハンにいる僕はデータシートなんて読んでるのよ・・
ほほう、who am iレジスタなんてあるんだ、へー
こういう電子機器のアドレスは固定なんだねーそりゃそうだよね
PlatformIO・・?
VSCode x PlatformIO も試してみよう
Nagaholishはググルをとなえた
インターネッツのせんじんのちえがなみのようにあらわれた
NagaholishはPlatformIOのつかいかたをおぼえた
しかし、VSCodeがふあんていになっている
ライブラリもArduinoと同じようにそこそこにあるっぽいですね
Adfruitとかがサポートしてるんだね
お、LSM303AGRのライブラリもあるね
こっちだと、ブレークポイントもデバッグもできる!!
こっちのほうがもしかしてよい・・?
いざ加速度取得に再挑戦!!
・・・
やっぱりだめか・・
同じだなーWire内で失敗してるな
MakeCode・・?MicroPython・・?
MakeCode側ではどうやって実装されるんだろうか
Nagaholishはググルをとなえた
インターネッツのせんじんのちえがなみのようにあらわれた
NagaholishはMakeCodeではブロックのチャートのソースコードがかくにんできることをおぼえた
やっぱり面倒なところは書かれていないよね
では、MicroPythonのリポジトリをクローンしよう
NagaholishはMicroPythonをgrepしたが、なにもわからなかった
ざっと加速度周りをみても、やはりpinを指定してI2C通信しているっぽい
どの実行環境でもおそらく同じような事をしているんだろうな
お手上げ・・?
もう手がかりが見つからない・・
闇雲に書き込み装置とかSoftwareDeviceとか変えてみるさ
NagaholishはなんとなくかきこみそうちとSoftwareDeviceのことをおぼえた
micro:bit v1のほうで使えるものっぽいね
BLE使う時にどれを使っているかを知っている必要があるのか
・・しかし・・どれを試しても動かない・・
経験が囁いているんだけど、この設定変更を調べるのはさすがに、違う気がする・・
I2C・・
調べるなら、I2C通信だよね
Nagaholishはググルをとなえた
インターネッツのせんじんのちえがなみのようにあらわれた
NagaholishはI2Cのじょうほうりょうについていけない!
ぐぅぅ、ヘコタレナイんだから!
・・専用のピンを通してデータ通信するのね
・・データを確認するのに、beginTransmission~endTransmissionするものなのね
・・NACKってのはACKみたいなデータフォーマットの一部?なのね
・・SPI通信・・?
新しい敵ぃ・・もう薬草ないよ
決断
決断しました、なりふり構ってられません・・
恥を忍び、頼れるものは頼ります!
Yahoo知恵袋にも聞く!
会社の上司にも聞く!
宿屋を使わず実家で寝まくります!
Yahoo知恵袋は音沙汰なし
上司は相談に乗ってくれました^^ 好きぃ!!
上司「わからないけど、ピンやポートが違うとか?」
僕「可能性が高いとは思うものの、それなら、micro:bitを使った先人も一言添えても良さそうな気がするんですよね」(すでにマインドが腐ってる)
I2C・・!!
やはりI2Cとピンを知ることは間違ってはいない気がする
これをもっと知るべきでしょう
Nagaholishはググルをとなえた
インターネッツのせんじんのちえがなみのようにあらわれた
NagaholishはI2Cのじょうほうりょうについていけない!
NagaholishはpinModeのじょうほうりょうについていけない!
NagaholishはGPIOのじょうほうりょうについていけない!
前に見つけたピンの仕様が違うと書いてくれた人の記事を見直して、ピン番号とGPIOの番号をもっと理解をする・・
NagaholishはArduinoでじっそうするときピンのばんごうについておぼえた
P.00とP0とか表記が違う・・
プログラムではpinModeに指定する番号はP0の方・・
変換ルールがわからん・・・
NagaholishはピンとGPIOのへんかんじょうほうをみつけた
Nordicのvariant.cppを見るのが正解か・・・理解してきたぞ
TwoWireでもピンを指定している・・SDA、SCL・・
これはI2C通信する時用のピン・・
Nagaholishはデータシートとピンのなまえをみくらべた
加速度センサーのピンの名前と番号がサンプルとデータシートで違う・・
TwoWireの初期化で指定しているピンは、I2C_EXT_SDA、I2C_EXT_SCL
回路上では、I2C_INT_SDA、I2C_INT_SCL
Ext=External?
Int=Internal?
そうゆうこと?
回路図を見る限り、I2C_INT_xxxのほうを参照させたほうがいいのでは?
やってみよう
TwoWireインスタンスの初期化処理は、どうやって修正するの?
まぁいいや
TwoWire変数をもう1つ作ってサンプルのdefineの参照先を変えよう
TwoWire MyWire(..., 30/*I2C_INT_SDA*/, 31/*I2C_INT_SCL*/);
アップロード!
:
:
:
:
:
:
:
:
:
:
お・・おおっ・・・!?!?!?
動いているっぽい・・
取得できているっぽいぞ・・!?
こ・・ここが・・ロマリアなのか・・・?
いつの間にか、旅の扉を突破していたというのか・・?
Nagaholishはかそくどをしゅとくできた
やったーーーーーーーーーーーーーーーーーーーー!!!
まだ理解できていないところが多いけど、
サンプルで加速度を取得するには、TwoWireインスタンスのピンの指定をEXTの方ではなく、INTの方にしなければいけない、と理解
上司様アドバイスありがとうございます!
MakeCodeの方で取得できていた理由も、きっとINTの方のピン番号を指定しているんだとおもう
INT=Internal=内蔵?
ってことだよね
サンプルやライブラリが、デフォルトでEXTの方を指定しているのは、どういうことなんだろう・・
これはまた別の機会に調査しよう
ずいぶんレベルがあがった気がします・・
知らないことをたくさん覚えた気がします・・
このうまくいった時の高揚感は、いつだって気分がいいものです・・
こうして、僕はアリアハンを出発することができ、ロマリアの陸に到着したのです・・
はたして、ここは本当にロマリアなのだろうか・・
この記事が気に入ったらサポートをしてみませんか?