I2C-Adresse ändern
Was dieses Beispiel zeigt
Das GRID antwortet werkseitig auf 0x30. Dieses Beispiel ändert die Adresse auf 0x31. Das
Board speichert die neue Adresse im EEPROM des ATtiny404 und antwortet sofort
darauf, ohne Reset, und behält die Adresse auch nach dem Ausschalten. Geben Sie
jedem GRID auf diese Weise eine eigene Adresse, dann können sich mehrere Boards einen I2C-Bus teilen.
Ändern Sie NEW_ADDRESS auf die gewünschte Adresse (0x08 bis 0x77). Wenn das Board
bereits eine andere Adresse verwendet, setzen Sie CURRENT_ADDRESS auf diese. Um zur
Standardadresse zurückzukehren, führen Sie das Beispiel mit NEW_ADDRESS gleich 0x30 aus.
Dieses Beispiel erstellt immer selbst I2C(0, scl=Pin(22), sda=Pin(21)). Ändern Sie
diese Pin-Nummern, falls die I2C-Pins Ihres Boards andere sind.
Der Beispielcode
Dies ist Examples/ChangeAddress.py aus dem festgelegten Modul, unverändert. Speichern Sie es auf
Ihrem Board und führen Sie es einmal aus.
# FILE: ChangeAddress.py
# AUTHOR: Josip Šimun Kuči @ Soldered
# BRIEF: Example showing how to change the I2C address of the Inputronic GRID.
# Sends a new I2C address to the device. The firmware validates the address,
# stores it in EEPROM, and re-initializes on the new address — no reset required.
# The address is retained across power cycles.
# To restore the default address (0x30), call setAddress(0x30) while
# connected on whatever address the device currently uses.
# WORKS WITH: Inputronic GRID: www.soldered.com
# LAST UPDATED: 2026-05-12
from machine import I2C, Pin
from InputronicGrid import InputronicGrid
import time
# ── Configuration ─────────────────────────────────────────────────────────────
# Current address the device is on (change if you already moved it)
CURRENT_ADDRESS = 0x30
# New address to assign (must be a valid 7-bit I2C address: 0x08-0x77)
NEW_ADDRESS = 0x31
# ─────────────────────────────────────────────────────────────────────────────
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
grid = InputronicGrid(i2c=i2c, address=CURRENT_ADDRESS)
print("Device found at 0x{:02X}. Changing address to 0x{:02X} ...".format(
CURRENT_ADDRESS, NEW_ADDRESS))
grid.setAddress(NEW_ADDRESS)
# Give the firmware time to apply the change
time.sleep_ms(50)
# Probe device on new address
try:
i2c.writeto(NEW_ADDRESS, b"")
print("Success! Device now at 0x{:02X}".format(NEW_ADDRESS))
grid.clearLEDs()
except OSError:
print("Device not found on new address. Re-flash firmware and try again.")
🔗Vollständiges Beispiel öffnen
Examples/ChangeAddress.py im Commit 36d3def
Erwartetes Ergebnis:
Device found at 0x30. Changing address to 0x31 ...
Success! Device now at 0x31
Wenn das Board auf CURRENT_ADDRESS nicht antwortet, löst InputronicGrid() eine
Exception mit der Meldung Inputronic GRID not found. Check wiring. aus, bevor
etwas ausgegeben wird. Wenn es auf der neuen Adresse nicht antwortet, gibt das Beispiel
Device not found on new address. Re-flash firmware and try again. aus.
Übergeben Sie nach der Änderung die neue Adresse in jedem anderen Programm, zum Beispiel
InputronicGrid(address=0x31).
Verwendete Funktionen
InputronicGrid(i2c=None, address=INPUTRONIC_GRID_DEFAULT_ADDR)returns InputronicGridErstellt das Driver-Objekt und prüft, ob das Board antwortet. Hier erhält es das I2C-Objekt des Beispiels und CURRENT_ADDRESS, die Adresse, auf der das Board jetzt antwortet.
ReturnsDas Driver-Objekt. Löst eine Exception mit 'Inputronic GRID not found. Check wiring.' aus, wenn das Board nicht antwortet.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
I2C | i2c | Ein fertiges machine.I2C-Objekt. Optional. |
int | address | I2C-Adresse des Boards. Optional, standardmäßig 0x30. |
grid.setAddress(newAddr)returns NoneSendet die neue Adresse an das Board, das sie im EEPROM speichert und darauf zu antworten beginnt. Das Objekt verwendet die neue Adresse danach für jeden weiteren Aufruf. Eine Adresse außerhalb von 0x08 bis 0x77 wird ignoriert und es wird nichts gesendet; ein I2C-Fehler beim Senden wird ebenfalls ignoriert.
ReturnsNichts. Prüfen Sie das Ergebnis, indem Sie die neue Adresse abfragen, wie es das Beispiel tut.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
int | newAddr | Die neue 7-Bit-I2C-Adresse, 0x08 bis 0x77. |
grid.clearLEDs()returns NoneSchaltet alle 16 LEDs aus. Es entspricht setAllLEDs(0, 0, 0). Hier läuft es auf der neuen Adresse, nachdem die Änderung erfolgreich war.
ReturnsNichts.
i2c.writeto(addr, buf)returns not usedMethode machine.I2C von MicroPython: schreibt die Bytes in buf an das Gerät unter addr. Mit leerem buf prüft sie nur, ob dort ein Gerät antwortet; so prüft auch der Konstruktor des Moduls das Board.
ReturnsDas Beispiel ignoriert den Rückgabewert. Wenn unter addr kein Gerät antwortet, löst der Aufruf einen OSError aus, den das Beispiel abfängt.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
int | addr | Die zu prüfende 7-Bit-Adresse, hier NEW_ADDRESS. |
bytes | buf | Die zu schreibenden Bytes; im Beispiel b"". |
Dieses Beispiel verwendet außerdem machine.I2C, das nicht Teil der Soldered
Inputronic-GRID-Bibliothek ist: Es gehört zum Lieferumfang von MicroPython.
Zusammenspiel
Der Konstruktor beweist, dass das Board auf CURRENT_ADDRESS antwortet. setAddress()
sendet die neue Adresse, das Beispiel wartet 50 ms, und ein leeres
i2c.writeto() prüft, ob auf NEW_ADDRESS eine Antwort kommt. clearLEDs() läuft dann
über dasselbe Objekt, das bereits die neue Adresse verwendet.