Come modificare l'indirizzo I2C del sensore AM2322 ?

Buon giorno,

Ho ricevuto 8 sensori del tipo in oggetto però trovo scarna documentazione on line. Ho scaricato il data sheet dove si dice che tutti gli AM2322 hanno le stesso indirizzo, per cui solo un dispositivo può essere allocato sullo stesso bus, il che sarebbe una notevole limitazione.
C'è un modo per cambiare questi indirizzi, dato che sembra che il registro dove è allocato l'indirizzo è R/W ma non si sa dov'è? (il datasheets non è molto chiaro essendo una traduzione non completa dal cinese).

Pino_

Il datasheet è questo?
Dove hai letto che si può modificare l'indirizzo I2C?
Da quel che ho visto pare non si possa fare, ma forse ho letto male.

Comunque, dovesse essere impossibile modificarne l'indirizzo, puoi usare questo, che fa da multiplexer della linea I2C a 8 canali permettendoti di interrogare a turno 8 linee I2C che quindi possono essere connesse ad 8 dispositivi con lo stesso indirizzo.
Io ho postato il datasheet del cip ma ci sono schede già pronte.

Non l'ho ancora provato personalmente ma ne ho ordinato uno e appeno ho un po' di tempo lo provo.

Questo è un modulo già pronto.

Ma se Pino voleva collegare TUTTI i sensori con UN SOLO cavo non credo che questa soluzione possa andargli bene.

Ciao,
P.

Sul datasheet leggo questo:

The AM2322 sensor has the same address for each I squared C and is 0xB8.Therefore, only one AM2322 sensor can be mounted on the same bus, and the sensor only responds to the host at the same time it receives the initial signal and its own I squared C address.

Quindi indirizzo fisso e solo un device AM2322 sullo stesso bus.

maubarzi:
Il datasheet è questo?
Dove hai letto che si può modificare l'indirizzo I2C?
Da quel che ho visto pare non si possa fare, ma forse ho letto male.

Probabilmente interpreto male ciò che c'è scritto a pag. 7 del datasheet:

From the machine address

The I squared C bus does not require additional address decoders and film selection signals.Multiple devices with the I squared C
bus interface can be connected to the same I squared C bus, which is distinguished by the device address.I squared C bus
addressing process is usually the first byte after starting conditions which determine the host selection from the machine,
namely the seven addressing address (the other is a 10 addressing address, is different, the sensor adopts seven
addressing address).The first byte of a defined as shown in figure 10, the first byte of the first seven formed from the
machine address, the least significant bit (LSB) is the eighth, it determines the direction of the message, the first byte of
the least significant bit (LSB) is "0", said the main chance to write information to the selected from the machine, "1" is the
main opportunity to read information from machine.
picture
The first byte after the initial condition
Send an address, each device in the system after the starting conditions, head seven if, as compared with his address device
will think she is the host address and as for the receiver or transmitter from the machine from machine by R/W for the
decision.Host is the main control device, he does not need the device address, other devices belong to the machine, must have
the device address.You must ensure that all the addresses on the
I squared C bus are unique and cannot be repeated, otherwise the I squared C bus will not work properly.

!

Secondo me in quella sezione stanno dando una spiegazione di come funziona il bus I2C in generale, quindi presumo si stiano riferendo a dispositivi generici con indirizzi distinti e univoci perchè in tutto il resto del datasheet rimarcano il fatto che l'indirizzo del sensore è uno solo, come riportato nella citazione fatta anche da @steve-cr.
Però forse mi sbaglio io ad interpretare.
Comunque, nel caso l'indirizzo sia unico e immodificabile, il cip che ti ho indicato dovrebbe sopperire e risolverti il problema, se non te ne crea altri di altro tipo.

Credo che gli unici che si siano posti il problema di una catena di sensori siano quelli della Dallas che hanno tirato fuori i sensori e la tecnologia 1wire. Purtroppo credo ci sia solo il sensore di temperatura ds18b20 e non di altri parametri.

zoomx:
Credo che gli unici che si siano posti il problema di una catena di sensori siano quelli della Dallas che hanno tirato fuori i sensori e la tecnologia 1wire. Purtroppo credo ci sia solo il sensore di temperatura ds18b20 e non di altri parametri.

Infatti, sono stato spiazzato dal funzionamento dei ds18b20 che però vanno su bus 1Wire, con il problema della lunghezza del bus. Il bus I2C viene dato efficiete fino ad una lunghezza di 30 metri, nella quale ci sto tranquillo.

Insomma l'unica soluzione sembra essere l'accoppiare ogni AM2322 ad un Attiny85 configurato slave con 1Wire così abbiamo due protocolli. Vabbè non tutti i mali vengono per nuocere; in questo caso posso anche mettere un lcd per la lettura in locale della temperatura e umidità.

Potrei anche pensare al collegamento wi-fi con l'EPS8266, tanto, quella gira comunque per casa e quindi forse non si va a peggiorare la situazione inquinamento elettromagnetico.

Pino_

Io uso gli ESP8266, principalmente schede ESP01, ma devi stare attento a tenere lontano il sensore una decina di centimetri e forse oltre perché altrimenti l'ESP8266 lo scalda.

zoomx:
Io uso gli ESP8266, principalmente schede ESP01, ma devi stare attento a tenere lontano il sensore una decina di centimetri e forse oltre perché altrimenti l'ESP8266 lo scalda.

Con il sensore AM2322 collegato su bus I2C?

Io ho provato il sensore con Arduino e la libreria di Rob Tillaart (l'unica a quanto pare in circolazione) ma facendo alcune prove non sono riuscito a farla funzionare con l'ESP8266. Funziona invece bene con Arduino.

L'idea è di creare 8 punti di misura ognuno con un ESP8266 come slave via IP, saltando in un passo la necessità di bus cablato e l'inconveniente di non poter collegare più di uno AM2322; però sembra che la libreria del sensore in locale (ESP8266=>AM2322) non funzioni, anche se scorrendo i listati .h e .ccp pare previsto l'utilizzo anche con l'ESP8266.

Forse i sensori non gradiscono il funzionamento a 3.3 Volt?, La prossima prova è vedere se sul bus ci sono i segnali di attività; se ci sono vuol dire che i sensori non rispondono ...

Pino_

Pino.

Io uso i BME280 della Bosh in I2C, uso la libreria dell'Adafruit.

L'ESP8266 richiede che siano specificati i pin utilizzati per l'I2C, esempio per i GPIO0 e 2 come SDA e SCL
Wire.begin(0, 2)
Se non li specifichi lo sketch viene compilato lo stesso e non hai errori (forse warning?) ma non ti funzionerà.

Non ho quel sensore, che sembra maledettamente simile al DHT22 che però non sembra usare I2C. per cui non so dirti se c'è un problema di alimentazione, per quello dovresti consultare il datasheet.

zoomx:
Io uso i BME280 della Bosh in I2C, uso la libreria dell'Adafruit.

L'ESP8266 richiede che siano specificati i pin utilizzati per l'I2C, esempio per i GPIO0 e 2 come SDA e SCL
Wire.begin(0, 2)
Se non li specifichi lo sketch viene compilato lo stesso e non hai errori (forse warning?) ma non ti funzionerà.

Non ho quel sensore, che sembra maledettamente simile al DHT22 che però non sembra usare I2C. per cui non so dirti se c'è un problema di alimentazione, per quello dovresti consultare il datasheet.

Non l'avevo fatto perchè da qualche parte avevo letto che di default l'I2C è su D5-D6
Ho comunque specificato le porte con Wire.begin(6,5)

Ora il wdt resetta in continuazione e l'errore che mi da' è:

ets Jan 8 2013,rst cause:4, boot mode:(3,6)

wdt reset
load 0x4010f000, len 1384, room 16
tail 8
chksum 0x2d
csum 0x2d
v951aeffa
~ld

Pino_

C'è qualche operazione che porta via molto tempo rubandolo alla parte WiFi e scatta il watchdog, almeno di solito la causa è questa.
https://www.esp8266.com/viewtopic.php?f=6&t=468

Pino_:
Infatti, sono stato spiazzato dal funzionamento dei ds18b20 che però vanno su bus 1Wire, con il problema della lunghezza del bus. Il bus I2C viene dato efficiete fino ad una lunghezza di 30 metri, nella quale ci sto tranquillo.

Il bus I2C liscio è creato per distanze non superiori a 30cm, ovvero nello stesso pcb. Può essere usato senza grossi problemi fino ad 1 mero aumentando la corrente sul bus.
Se vuoi andare oltre il metro e fino a 20 metri ti servono 2 "extender" come i P82B715 o simili.

Anche il bus 1wire era nato per le corte distanze ma alla Dallas si sono posti il problema

Guidelines for Reliable Long Line 1-Wire Networks

PaoloP:
Il bus I2C liscio è creato per distanze non superiori a 30cm, ovvero nello stesso pcb. Può essere usato senza grossi problemi fino ad 1 mero aumentando la corrente sul bus.
Se vuoi andare oltre il metro e fino a 20 metri ti servono 2 "extender" come i P82B715 o simili.

Veramente il datasheets dell'AM2322 dice che il bus i2c può essere lungo fino a 30 metri; è con il bus One-wire che si ha la limitazione a 30 cm, però io ho fatto una prova con due DS18B20 con un bus One-wire su una coppia del cavo di rete cat 5 schermato lungo 30 metri e le letture erano stabili, sicure senza sbagliare un colpo.

Pino_

Pino_:
Veramente il datasheets dell'AM2322 dice che il bus i2c può essere lungo fino a 30 metri; è con il bus One-wire che si ha la limitazione a 30 cm

Puoi allegare il datasheet ed indicare dove è scritta questa cosa?

Perché in quello che trovo QUI (che è in inglese) non riesco a trovare questa indicazione che, in ogni caso, considero un refuso, dato che i valori dovrebbero essere invertiti. ::slight_smile:

Guglielmo

Nell'application note del post #14

Network weight is limited by the ability of the cable to be charged and discharged quickly enough to satisfy the 1-Wire protocol. A simple resistor pullup has a weight limitation of about 200m

zoomx:
Nell'application note del post #14

... difatti parlano di 1-Wire :wink:

Guglielmo

Ma io non stavo replicando a te, Guglielmo, ci mancherebbe. In caso contrario l'avrei scritto espressamente.

Addirittura credevo che 1Wire prevedesse già le distanze ma l'application note dice che invece originariamente era pensato come I2C. Solo che poi scrivono che con una sola resistenza arriva a 200m il che non è affatto male per un protocollo pensato per distanze centimetriche.

Per distanze centimetriche esiste una libreria per DS18B20 che fa uso del solo pullup interno. L'ho provata e funziona.