Zum Hauptinhalt springen

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:

ShellMicroPython
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 BMA400

Konstruktor. 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

TypNameBeschreibung
I2Ci2cEin initialisiertes machine.I2C-Objekt. Nur auf den Boards optional, die die Bibliothek erkennt (siehe den Konstruktor oben).
intaddressI2C-Adresse. BMA400_I2C_ADDRESS_SDO_LOW (0x14, der Standardwert) oder BMA400_I2C_ADDRESS_SDO_HIGH (0x15).
get_sensor_data(sensor_time=False)returns int

Liest 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

TypNameBeschreibung
boolsensor_timeBei True wird zusätzlich der Zeitzähler des Sensors in sensor.data.sensor_time_ms gelesen. Standardwert ist False.
status_string()returns str

Beschreibt 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.