BOSCH社の9DoF 方位/慣性計測モジュールBNO055を使います。
###BNO055のおもな出力
3軸加速度計、3軸磁力計、3軸ジャイロスコープ単独の出力以外にオイラー角やクォータニオンの出力もあります。
- オイラーベクトル
- クォータニオン
- 角速度ベクトル
- 加速度ベクトル
- 磁界強度ベクトル
- 線形加速度ベクトル
- 重力ベクトル
- 気温
###Circuitpython履歴
PicoのI2C対応。リピーテッド・スタートは初期から対応済み。SCLクロック・ストレッチの対応は、順次行われ、6.2.0-rc.0でfix。
6.2.0-beta.3 SCLクロック・ストレッチに非対応。対応していないとメッセージが出る
6.2.0-beta.4 SCLクロック・ストレッチに対応、SDAクロックがスペックを満たしていない。動くこともあるが、途中で止まる
6.2.0-rc.0 SDAのクロックの修正
###接続
Adafruitのブレークアウト・ボードを利用します。I2C専用のSTEMMA QTコネクタでPicoと接続します。はんだ付けなどは不要です。
STEMMA QTコネクタ(ケーブルの色) | GPIOピン番号 |
---|---|
SCL 緑 | GP21 |
SDA 黄(白) | GP20 |
Vcc 赤 | 3.3V |
GND 黒 | GND |
###プログラム
examplesに入っていたサンプルです。
# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MIT
import time
import board
import busio
import adafruit_bno055
# Use these lines for I2C
i2c = busio.I2C(board.GP21, board.GP20)
sensor = adafruit_bno055.BNO055_I2C(i2c)
# User these lines for UART
# uart = busio.UART(board.TX, board.RX)
# sensor = adafruit_bno055.BNO055_UART(uart)
last_val = 0xFFFF
def temperature():
global last_val # pylint: disable=global-statement
result = sensor.temperature
if abs(result - last_val) == 128:
result = sensor.temperature
if abs(result - last_val) == 128:
return 0b00111111 & result
last_val = result
return result
while True:
print("Temperature: {} degrees C".format(sensor.temperature))
"""
print(
"Temperature: {} degrees C".format(temperature())
) # Uncomment if using a Raspberry Pi
"""
print("Accelerometer (m/s^2): {}".format(sensor.acceleration))
print("Magnetometer (microteslas): {}".format(sensor.magnetic))
print("Gyroscope (rad/sec): {}".format(sensor.gyro))
print("Euler angle: {}".format(sensor.euler))
print("Quaternion: {}".format(sensor.quaternion))
print("Linear acceleration (m/s^2): {}".format(sensor.linear_acceleration))
print("Gravity (m/s^2): {}".format(sensor.gravity))
print()
time.sleep(1)
実行例