-
Notifications
You must be signed in to change notification settings - Fork 9
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
I2C スレーブアドレスの間違いに気付きにくい #6
Comments
micro:bitのmakecodeのI2CAPIは、該当スレーブアドレスに何もつながっていなくても、ご指摘の通り"0"が返却されてきてしまうという問題(というより仕様?)があります。今のところこの問題を回避する策はmakecode上でmicro:bit側のブリッジソフトウェアを組む限りは存在しないようです。(makecodeのバックエンドにあるより低レベルのフレームワーク上では"0"ではない例外の返却がなされるようになっているようですが、makecodeでは0にまとめられてしまっている) micro:bit版のi2cdetect webAppsは、苦し紛れに"0"が返却されてきたアドレスについては、別の適当なレジスタ番号を指定して改めてReadを繰り返し、"0"以外のデータが返ってくるまで確認してdetect結果としています。 現状としては、micro:bit版のi2cdetect webAppsを走らせてもらって確認する というのが次善の策でしょうか。 |
なるほど、makecode の pins には i2c 関連のメソッドが i2cReadNumber, i2cWriteNumber しかないから i2cdetect.html で苦し紛れに...とかいうコメントの入ったコードになってたんですね。 該当 API: 呼び出し先を順に: 取りあえず isseu 立てるだけ立てておいた: |
連続して 0 が返るケースについては「正しく応答があって 0 なのか何らかの問題 (接続されていない、アドレスが違う、その他の内部エラー) があるのか区別が付かない (現在の実装上の制限事項)」旨をこの issue の URL と共に console.info か console.warning あたりを出しておくのは、初心者へのデバッグヘルプとしては有効ですね。
くらいでしょうか。脱線ですが、ハードのローレベル API である WebGPIO/I2C については、ソフトウェア側ではないエラーが疑われるケースについて、この問題に限らずもう少しログに分かりやすいメッセージを出してあげると初学者向けに良いですね。raspi3 の polyfill の方も含めて考えてみたくなる。 |
CHIRIMEN Raspi3 だとスレーブアドレスが違う場合 (や競合している場合) には比較的すぐ分かるが microbit の場合はスレーブアドレスを間違っていても init() に成功してしまってそのまま readValue したら 0 が返ってくるという挙動になるだけで例外やエラーが発生せず原因が分かりにくいケースがある。
BME280 など個体によってスレーブアドレスが違うデバイスを使う時には経験者じゃないと判断が難しい状況になっているように思うので、該当スレーブアドレスのデバイスが見つからない場合に検知可能に出来ないか。
The text was updated successfully, but these errors were encountered: