Grundlegende Messwerte
Was dieses Beispiel zeigt
Liest in einer Schleife die Beschleunigung auf allen drei Achsen aus und rechnet sie in g um. Dies ist das einfachste Beispiel des Moduls und das, das der Schnellstart verwendet.
Das Beispiel erstellt den I2C-Bus 0 mit SCL an GPIO 9 und SDA an GPIO 8. Ändern Sie diese Pins auf die Pins, die Sie verdrahtet haben.
Der Beispielcode
# FILE: bma400-basicReadings.py
# AUTHOR: Soldered Electronics
# BRIEF: Reads X, Y, Z acceleration from the BMA400 sensor over I2C
# WORKS WITH: BMA400 Accelerometer breakout: www.solde.red/333419
# LAST UPDATED: 2026-09-17
from bma400 import BMA400, BMA400_OK
from machine import I2C, Pin
import time
# Change these to match how your board wires I2C
i2c = I2C(0, scl=Pin(9), sda=Pin(8))
sensor = BMA400(i2c)
if sensor.status != BMA400_OK:
raise Exception("Failed to initialize BMA400: " + sensor.status_string())
print("BMA400 connected!")
while True:
if sensor.get_sensor_data() == BMA400_OK:
print(
"X: {:.3f} g\tY: {:.3f} g\tZ: {:.3f} g".format(
sensor.data.accel_x, sensor.data.accel_y, sensor.data.accel_z
)
)
else:
print("Failed to read acceleration:", sensor.status_string())
time.sleep_ms(20)
🔗Vollständiges Beispiel öffnen
bma400-basicReadings.py im Commit 484a5be
Dieses Beispiel verwendet außerdem machine.I2C
(MicroPython-Referenz)
und machine.Pin
(MicroPython-Referenz).
Beide sind Teil der MicroPython-Firmware und gehören nicht zum Modul
bma400.
Erwartetes Ergebnis, wenn das Breakout an ein NULA DeepSleep angeschlossen ist (IO8 an SDA, IO9
an SCL) und flach liegt:
BMA400 connected!
X: 0.008 g Y: -0.028 g Z: 1.003 g
X: 0.020 g Y: -0.018 g Z: 1.006 g
X: 0.018 g Y: -0.009 g Z: 1.003 g
X: 0.014 g Y: -0.018 g Z: 1.009 g
X: 0.008 g Y: -0.021 g Z: 1.001 g
Nach der ersten Zeile folgt etwa alle 20 ms eine Zeile pro Messung: X:, Y:
und Z:, jeweils in g mit drei Nachkommastellen und gefolgt von g, durch Tabulatoren getrennt.
Schlägt ein Lesevorgang fehl, lautet die Zeile Failed to read acceleration: und enthält dahinter den Grund.
Verwendete Funktionen
BMA400(i2c=None, address=BMA400_I2C_ADDRESS_SDO_LOW)returns BMA400Konstruktor. Setzt den Sensor per Soft-Reset zurück, prüft seine Chip-ID (0x90) und versetzt ihn in den normalen Energiemodus. Löst eine Exception aus, wenn der Sensor nicht antwortet oder ein anderer Chip antwortet. Ohne i2c-Objekt verwendet er I2C(0, scl=Pin(22), sda=Pin(21)), wenn sich die Firmware als esp32, esp8266 oder eine ältere Soldered-Board-Firmware meldet, und löst auf jedem anderen Board eine Exception aus.
ReturnsDas Sensorobjekt.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
I2C | i2c | Ein initialisiertes machine.I2C-Objekt. Nur auf den Boards optional, die die Bibliothek erkennt (siehe den Konstruktor oben). |
int | address | I2C-Adresse. BMA400_I2C_ADDRESS_SDO_LOW (0x14, der Standardwert) oder BMA400_I2C_ADDRESS_SDO_HIGH (0x15). |
get_sensor_data(sensor_time=False)returns intLiest eine neue Messung, rechnet sie mit dem aktuellen Messbereich in g um und speichert sie in sensor.data.accel_x, sensor.data.accel_y und sensor.data.accel_z.
ReturnsBMA400_OK (0) bei Erfolg, andernfalls ein Fehlercode.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
bool | sensor_time | Bei True wird zusätzlich der Zeitzähler des Sensors in sensor.data.sensor_time_ms gelesen. Standardwert ist False. |
status_string()returns strBeschreibt den aktuellen sensor.status-Code, zum Beispiel Communication failure oder Sensor not found.
ReturnsDie Beschreibung oder ein leerer String, wenn der Status BMA400_OK ist.
Alles zusammengesetzt
Der Konstruktor löst bereits eine Exception aus, wenn der Sensor nicht erreichbar ist,
daher ist die Prüfung von sensor.status danach eine zweite Absicherung. Das Modul ändert
Messbereich und Datenrate beim Start nicht, daher misst der BMA400 nach dem Reset
mit ±4 g und 200 Hz. Bei jedem Durchlauf der Schleife wird get_sensor_data() aufgerufen
und die drei Achsen aus sensor.data werden ausgegeben, wenn BMA400_OK zurückgegeben wird.
Für ein Board, das auf 0x15 eingestellt ist, erstellen Sie den Sensor mit
BMA400(i2c, address=BMA400_I2C_ADDRESS_SDO_HIGH) und importieren diese Konstante
aus bma400.