Skip to main content

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:

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

Stvara 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

TipNazivOpis
I2Ci2cGotov objekt machine.I2C. Neobavezno.
intaddressI2C 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

TipNazivOpis
intnewAddrNova 7-bitna I2C adresa, 0x08 do 0x77.
grid.clearLEDs()returns None

Isključ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 used

Metoda 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

TipNazivOpis
intaddr7-bitna adresa za provjeru, ovdje NEW_ADDRESS.
bytesbufBajtovi 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.