bno055 — Pilote IMU BNO055¶
Ce module fournit un pilote pour le capteur Bosch BNO055 d’orientation absolue à 9 axes via I2C. Le BNO055 fusionne les données de l’accéléromètre, du magnétomètre et du gyroscope directement sur la puce et expose des sorties de quaternion, d’angles d’Euler, d’accélération linéaire et de gravité en plus des canaux bruts du capteur.
Exemple d’utilisation
import time
from machine import I2C
import bno055
bus = I2C(1)
imu = bno055.BNO055(bus)
while True:
print(imu.euler())
time.sleep_ms(100)
Classes¶
- class bno055.BNO055(bus: machine.I2C, address: int = 0x28, mode: int = NDOF_MODE, axis: bytes = AXIS_P4)¶
Construit une instance de pilote BNO055.
busest un objet de busmachine.I2Cconfiguré, utilisé pour communiquer avec le capteur.addressest l’adresse I2C 7 bits du périphérique. Vaut0x28par défaut.modeest le mode de fonctionnement dans lequel le périphérique est placé après la réinitialisation. Voir les constantes de mode de fonctionnement ci-dessous. VautNDOF_MODEpar défaut.axisest une valeur de configuration de remappage des axes sur 2 octets. Voir les constantes de placement des axes ci-dessous. VautAXIS_P4par défaut.
Le constructeur vérifie l’identifiant de la puce, effectue une réinitialisation logicielle, passe à l’alimentation normale, applique la configuration des axes et entre dans le mode de fonctionnement demandé en utilisant l’oscillateur externe. Déclenche une
RuntimeErrorsi les valeurs attendues des registres d’identifiant ne sont pas relues.- read_registers(register: int, size: int = 1) bytes¶
Lit
sizeoctets depuis le registre de périphérique indiqué et les renvoie sous forme d’objetbytes.
- write_registers(register: int, data: bytes) None¶
Écrit les octets
dataindiqués sur le périphérique à partir deregister.
- operation_mode(mode: int = None) int¶
Obtient ou définit le registre de mode de fonctionnement. Sans argument, renvoie le mode actuel sous forme d”
int. Avec un argumentmode, écrit le nouveau mode sur le périphérique. Voir les constantes de mode de fonctionnement ci-dessous.
- system_trigger(data: int) None¶
Écrit
datadans le registre de déclenchement système (0x3F). Cela est utilisé en interne pour émettre une réinitialisation logicielle (0x20) et pour sélectionner l’oscillateur externe (0x80).
- power_mode(mode: int = None) bytes¶
Obtient ou définit le registre de mode d’alimentation. Sans argument, renvoie le contenu actuel du registre de mode d’alimentation. Avec un argument
mode, écrit le nouveau mode d’alimentation sur le périphérique.
- page(num: int = None) None¶
Obtient ou définit la page de registre. Sans argument, lit le registre de page actuel. Avec un argument
num, sélectionne la page.
- temperature() int¶
Renvoie la valeur du registre de température de la puce sous forme d’octet non signé.
- read_id() bytes¶
Renvoie le bloc d’identifiant de 4 octets lu depuis le registre
0x00. La valeur attendue estb'\xA0\xFB\x32\x0F'.
- axis(placement: bytes = None) bytes¶
Obtient ou définit la configuration de remappage des axes. Sans argument, renvoie la configuration d’axes actuelle sur 2 octets. Avec un argument
placement, écrit la configuration d’axes fournie sur 2 octets. Utilisez l’une des constantesAXIS_P0..``AXIS_P7`` ci-dessous.
- quaternion() list¶
Renvoie l’orientation fusionnée sous forme de liste de 4 éléments
[w, x, y, z]de nombres à virgule flottante mis à l’échelle dans la plage du quaternion unitaire.
- euler() list¶
Renvoie l’orientation fusionnée sous forme de liste de 3 éléments
[yaw, roll, pitch]de nombres à virgule flottante en degrés.
- accelerometer() list¶
Renvoie la lecture de l’accéléromètre sous forme de liste de 3 éléments
[x, y, z]de nombres à virgule flottante en m/s^2.
- magnetometer() list¶
Renvoie la lecture du magnétomètre sous forme de liste de 3 éléments
[x, y, z]de nombres à virgule flottante en micro-Tesla.
- gyroscope() list¶
Renvoie la lecture du gyroscope sous forme de liste de 3 éléments
[x, y, z]de nombres à virgule flottante en degrés par seconde.
Constantes¶
Modes de fonctionnement¶
- bno055.CONFIG_MODE: int¶
Mode de configuration (
0x00). Le périphérique doit être dans ce mode pour modifier les registres de configuration.
- bno055.COMPASS_MODE: int¶
Mode de fusion boussole utilisant l’accéléromètre + le magnétomètre (
0x09).
Placements des axes¶
Les valeurs de 2 octets suivantes sont passées à BNO055.axis() pour remapper le système de coordonnées du périphérique. Chaque constante est la paire de registres (AXIS_MAP_CONFIG, AXIS_MAP_SIGN) issue de la fiche technique du BNO055 (Section 3.4, Axis remap), pré-encodée pour l’une des huit orientations de placement standard.
Choisissez la constante dont les axes de sortie correspondent à la manière dont la puce est physiquement montée sur le circuit imprimé hôte :
Constante |
Sortie X |
Sortie Y |
Sortie Z |
Octets |
Montage |
|---|---|---|---|---|---|
|
|
|
|
face vers le haut, 90° dans le sens antihoraire par rapport à P1 |
|
|
|
|
|
face vers le haut, valeur par défaut de la fiche technique |
|
|
|
|
|
face vers le haut, pivoté de 180° |
|
|
|
|
|
face vers le haut, 90° dans le sens horaire par rapport à P1 |
|
|
|
|
|
face vers le bas, retourné autour de X (valeur par défaut du constructeur) |
|
|
|
|
|
face vers le bas, pivoté de 90° dans le sens antihoraire par rapport à P4 |
|
|
|
|
|
face vers le bas, pivoté de 180° par rapport à P4 |
|
|
|
|
|
face vers le bas, pivoté de 90° dans le sens horaire par rapport à P4 |
Xc / Yc / Zc désignent les axes intrinsèques de la puce (tels qu’imprimés dans la fiche technique du BNO055). Les colonnes « Sortie » sont les axes que le périphérique fournit via BNO055.euler(), BNO055.gyro(), etc. P0 à P3 sont les quatre rotations de 90° de la puce dans l’orientation côté composants vers le haut ; P4 à P7 sont les mêmes quatre rotations après retournement de la puce sur son dos.
- bno055.AXIS_P0: bytes¶
Puce face vers le haut, pivotée de 90° dans le sens antihoraire par rapport à
AXIS_P1. Axes de sortie :X = -Yc,Y = +Xc,Z = +Zc.
- bno055.AXIS_P1: bytes¶
Puce face vers le haut dans l’orientation par défaut de la fiche technique du BNO055. Aucun remappage n’est appliqué :
X = +Xc,Y = +Yc,Z = +Zc.
- bno055.AXIS_P2: bytes¶
Puce face vers le haut, pivotée de 180° par rapport à
AXIS_P1. Axes de sortie :X = -Xc,Y = -Yc,Z = +Zc.
- bno055.AXIS_P3: bytes¶
Puce face vers le haut, pivotée de 90° dans le sens horaire par rapport à
AXIS_P1. Axes de sortie :X = +Yc,Y = -Xc,Z = +Zc.
- bno055.AXIS_P4: bytes¶
Puce retournée sur son dos (côté composants vers le bas) par rapport à
AXIS_P1. Axes de sortie :X = +Xc,Y = -Yc,Z = -Zc. C’est le placement utilisé par le constructeurBNO055lorsqu’aucun argumentaxisn’est fourni.
- bno055.AXIS_P5: bytes¶
Puce face vers le bas, pivotée de 90° dans le sens antihoraire par rapport à
AXIS_P4. Axes de sortie :X = +Yc,Y = +Xc,Z = -Zc.