Promjena I2C adrese
Što prikazuje ovaj primjer
GRID se prema zadanim postavkama odaziva na adresi 0x30. Ovaj primjer prebacuje ga na 0x31. Pločica sprema novu adresu u EEPROM mikrokontrolera ATtiny404 i odmah se odaziva na njoj, bez ponovnog pokretanja, a adresu zadržava i nakon isključivanja napajanja. Tako možete svakom GRID-u dodijeliti vlastitu adresu i više pločica može dijeliti istu I2C sabirnicu.
Promijenite NEW_ADDRESS u adresu koju želite (0x08 do 0x77). Ako pločica već koristi drugu adresu, postavite CURRENT_ADDRESS na nju. Za povratak na zadanu adresu pokrenite primjer s NEW_ADDRESS postavljenim na 0x30.
Ovaj primjer uvijek sam stvara I2C(0, scl=Pin(22), sda=Pin(21)). Promijenite te brojeve pinova ako su I2C pinovi vaše pločice drukčiji.
Kod primjera
Ovo je Examples/ChangeAddress.py iz fiksiranog modula, nepromijenjen. Spremite ga na svoju pločicu i pokrenite jednom.
# 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.")
🔗Otvorite cijeli primjer
Examples/ChangeAddress.py u commitu 36d3def
Očekivani rezultat:
Device found at 0x30. Changing address to 0x31 ...
Success! Device now at 0x31
Ako se pločica ne odazove na CURRENT_ADDRESS, InputronicGrid() baca iznimku s porukom Inputronic GRID not found. Check wiring. prije nego što se išta ispiše. Ako se ne odazove na novoj adresi, primjer ispisuje Device not found on new address. Re-flash firmware and try again.
Nakon promjene proslijedite novu adresu u svakom drugom programu, na primjer InputronicGrid(address=0x31).
Korištene funkcije
InputronicGrid(i2c=None, address=INPUTRONIC_GRID_DEFAULT_ADDR)returns InputronicGridStvara objekt upravljačkog programa i provjerava odaziva li se pločica. Ovdje dobiva vlastiti I2C objekt iz primjera i CURRENT_ADDRESS, adresu na kojoj se pločica trenutačno odaziva.
ReturnsObjekt upravljačkog programa. Baca iznimku s porukom 'Inputronic GRID not found. Check wiring.' kada se pločica ne odazove.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
I2C | i2c | Gotov objekt machine.I2C. Neobavezno. |
int | address | I2C adresa pločice. Neobavezno, zadano 0x30. |
grid.setAddress(newAddr)returns NoneŠalje novu adresu pločici, koja je sprema u EEPROM i počinje se odazivati na njoj. Objekt zatim koristi novu adresu za svaki sljedeći poziv. Adresa izvan raspona od 0x08 do 0x77 se zanemaruje i ništa se ne šalje; I2C pogreška tijekom slanja također se zanemaruje.
ReturnsNišta. Rezultat provjerite ispitivanjem nove adrese, kao što to radi primjer.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
int | newAddr | Nova 7-bitna I2C adresa, 0x08 do 0x77. |
grid.clearLEDs()returns NoneIsključuje svih 16 LED dioda. Isto je kao setAllLEDs(0, 0, 0). Ovdje se izvodi na novoj adresi, nakon uspješne promjene.
ReturnsNišta.
i2c.writeto(addr, buf)returns not usedMetoda machine.I2C u MicroPythonu: upisuje bajtove iz buf na uređaj na adresi addr. S praznim buf-om samo provjerava odaziva li se uređaj tamo, što na isti način provjerava pločicu i konstruktor modula.
ReturnsPrimjer zanemaruje povratnu vrijednost. Kada se na adresi addr ne odazove nijedan uređaj, poziv baca OSError, kojeg primjer hvata.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
int | addr | 7-bitna adresa za provjeru, ovdje NEW_ADDRESS. |
bytes | buf | Bajtovi za slanje; u primjeru b"". |
Ovaj primjer koristi i machine.I2C, koji nije dio biblioteke Soldered Inputronic GRID: dolazi uz MicroPython.
Sve zajedno
Konstruktor dokazuje da se pločica odaziva na CURRENT_ADDRESS. setAddress() šalje novu adresu, primjer čeka 50 ms, a prazan i2c.writeto() provjerava odaziva li se uređaj na NEW_ADDRESS. clearLEDs() se zatim izvodi preko istog objekta, koji već koristi novu adresu.