Hallo,
ich bräuchte Unterstützung zum Verständnis vom Aufbau und Abbau von I2C Verbindungen wenn mehrere I2C Clients angeschlossen sind.
Meiner Ansicht nach müsste ich doch bei jedem Aufruf eines I2C Clients mit seiner Adresse die Verbindung gestartet werden, Daten übertragen, dann die Verbindung beendet, um das Gleiche beim nächsten Client mit einer anderen Adresse zu wiederholen.
Filktives Beispiel für zwei Clients unter den Adressen 1 und 2, an die ein "X" und ein "Y" geschickt wird:
Mein konkretes Problem:
Ich scheitere damit derzeit bei der Kombination des Aufrufs eines CO2 Sensors Sensirium SCD30 und eines I2C Clients (2. Arduino als i2Client nach dem Standardbeispiel).
(GitHub - Sensirion/arduino-i2c-scd30: Arduino I2C driver for Sensirion's SCD30 sensor, Sensirion I2C Example).
Der Sensirion I2C Beispielssketch geht ja, aber ich weiß nicht, wie ich für diesen Sensor die I2C Verbindung beenden kann, um einen anderen Client ansprechen zu können-
Es gibt für den CO2 Sensor keinen Befehl sensor.endTransmission() oder sensor.end , der Compiler meckert. Soll ich da einfach pauschalt dann wire.end oder Wire.endTransmission() nutzen ?
ich finde in der Sensirion-lib dort auch unter keywords.txt nichts passendes, oder wäre das "StopMeasurement" richtig ?
Wie wäre es, wenn du mal in die Doku schaust, wie man eine Verbindung schließt bzw. offen hält.
Parameters stop: true or false. True will send a stop message, releasing the bus after transmission. False will send a restart, keeping the connection active.
Danke für die Info, daß die I2C Verbindung schon innerhalb des Sensirion-Sensoraufrufs dann wieder beendet wird (so verstehe ich agmue).
Wenn ich dann aber über I2C Daten an einen anderen Client schicken will (hier dient ein Arduino als I2C->parallel Wandler für ein Display) , kommt auf der seriellen Schnittstelle nur noch Datenmüll raus, der Sensor scheint sich laufend zu resetten (die Initialisierung ist über die serielle Schnitstelle immer wieder neu zu sehen), und es wird nichts auf der Anzeige angezeigt.
Nur falls nach der Hardware gefragt werden sollte:
Das Ansteuern des Displays für sich alleine geht, da Ansteuern des CO2 Sensors für sich alleine auch. Hardwaremäßig wird am Aufbau nichts geändert. Der Arduino zur Anzeige wird über einen Levelshifter mit 5V-Signalen versorgt, der CO2 Sensor direkt mit den 3,3V Signalen die aus dem ESP8266 (Wemos D1 Mini) herauskommen .
ich tippe daher eher auf ein Fehler in meinem Softwareverständnis.
Warum gibts eine Behandlung für Escapes/27? Sehe im Sender nicht, wo Escape Sequenzen herkommen sollen?
Warum überhaupt so kompliziert?
Warum fixierst du am Master das CO2konz nicht einfach auf 16 oder 32bit Breite und überträgst dann die 2 bzw. 4 Byte ohne dem ganzen Zahlenlänge-Ermitteln - padden - Fixtext " CO2" hinten dran?
Und warum postest du die Sketche nicht so, wie es gehört, hier direkt in den Beitrag in Code-Tags. Dann können den auch alle lesen und du hättest mehr Helfende.
@combie
Bei den kleinen Levelshifter-Platinen fand ich es praktischer, auf einer Seite die Stiftleisten nach unten zu löten für Steckbretter, auf der anderen nach oben für Kabel.
@noiasca
Die Escapesequenz wird genutzt um die Helligkeit des Displays einstellen zu können, das ist auf der Senderseite hier noch nicht implementiert.
Den Code für die Ansteuerung des Displays habe ich von Arno Welzel übernommen. Siehe
Ich gelobe zukünftige Besserung mit der Einbindung des Codes, für längeren Code hatte ich bei direkter Einbindung Bedenken bzgl. der Lesbarkeit.
@noiasca
Dieser ganze Teil mit der Zahlenlängenermittlung dient einer ästhetischen rechtsbündigen Darstellung des Messwerts vor der Angabe der Einheit.