Zdravím, od té sekvence jsem očekával, že mi to dá hodnotu, kterou bych pak přepočetl na Luxy. Zkoušel jsem to i v různých variantách za sebou, tedy:
ser.write(bytearray([0x55, 0x23, 0x00]))
ser.write(bytearray([0x55, 0x23, 0x01]))
ser.write(bytearray([0x55, 0x23, 0x20, 0x04]))
ser.write(bytearray([0x55, 0x23, 0x00]))
a s nějakou prodlevou pak ser.read(). Ale pořád buď žádná hodnota nebo nějaká ta 255.
Přiznám se na rovinu, že I2C sběrnici vůbec nerozumím a mým účelem je prostě si jen vyrobit ten regulátor podsvícení pro monitor a pak už se k takové věci okolo HW asi nedostanu.
I když to udělám podle toho odkazu, tak jsou výsledky stejné ...
Proč posíláš 0x55 0x23 ? Musíš nejdříve naadresovat device.
Ten převodník jsem nikdy nepoužíval, ale podle dokumentace by to mělo funfovat takto:
Víš jakou máš adresu BH1750?
Podle dokumentace má BH1750 tyto adresy (volí se podle úrovně na ADDR pinu - nastavení modulku):
ADDR = L:
- adresa pro zápis 0x46
- adresa pro čtení 0x47
ADDR = H:
- adresa pro zápis 0xB8
- adresa pro čtení 0xB9
A potom registry:
- Power ON: 0x01
- One Time Low resolution measurement mode (doporučím pro začátek): 0x23
No, a potom je sekvence jednoduchá:
1. Zapíšeš adresu device s nahozeným bitem pro zápis (protože v dalším kroku zapisuješ interní adresu)
2. Zapíšeš interní adresu
Takže pro zapnutí 0x55 0x46 (nebo 0xB9) 0x01
Pro jednorázové změření a čtení : WRITE [0x55 0x46 (nebo 0xB8) 0x23] WAIT 24 ms WRITE [0x55 0x47 (nebo 0xB9)] READ 2 Byty
A to by mělo funfovat.