PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] wire-Bibliothek bei nodeMCU und Arduino



Moppi
29.09.2020, 07:38
Guten Morgen,

bei Beschreibungen im Netz habe ich zu WIRE gefunden, dass bei der Funktion, die Wire.onRequest übergeben wird, nur ein Befehl ausgeführt werden soll, also ein Wire.write(). ".write()" gibt es in unterschiedlichen Ausführungen, so dass man Strings und anderes übertragen kann. Aber mir ist noch nicht klar, warum man nur einmal Wire.write() ausführen soll, wenn eine Anfrage vom I2C-Master erfolgt. Ich könnte mir vorstellen, dass Wire.write() eine Kommunikation startet, die Daten überträgt und die Kommunikation dann wieder abschließt, darüber habe ich aber bisher nichts gefunden.

Außerdem, um das noch anzufügen, verstehe ich noch nicht, warum man nur auf Anfrage des Masters sendet, wenn es nur einen Master und einen Slave gibt. Bei mehreren Slaves ist mir das klar. Aber sonst könnte doch th. der Slave auch einfach Daten senden und der Master schaut ab und an, ob was angekommen ist und antwortet dann. Ich habe schon gelesen, dass bei nodeMCU und Arduino der MAster das nodeMCU sein soll und der Arduino der Slave, anders herum soll es Schwierigkeiten geben.


MfG

HaWe
29.09.2020, 10:16
Grundsätzlich ist i2c als Multi-Slave-Bussystem so gestrickt, dass ein Slave von sich aus nie etwas senden darf, ohne dazu aufgefordert worden zu sein, das gäbe sonst Datenmüll. Ob gesendet werden soll und wenn ja von wem, entscheidet immer nur ein Master. Dabei ist es egal, ob momentan nur 1 Slave am Bus hängt oder viele, i2c ist eben grundsätzlich für multi-slaves konzipiert, ohne Sonderfälle für ausnahmsweise single-Slave setup.
Grundsätzlich sind bei i2c aber auch mehrere Master erlaubt, ob und wie das Arduino implementiert hat, weiß ich allerdings nicht.
Zur Funktion von onRequest etc. hilft vlt dieser Link:
http://html.szaktilla.de/arduino/6.html

Dass der esp8266 sich bei i2c anders verhält als "normale" Arduinos, liegt sicher an seinem auf RTOS beruhenden single-core-Multithreading OS, bei dem der Scheduler zwischendurch von sich aus die cpu umschaltet zwischen Arduinoprogramm und WiFi-Firmwareroutinen; ich könnte mir vorstellen, dass er als Slave möglicherweise bestimmte Anfragen nicht erhält, wenn er gerade mit WiFi beschäftigt ist, während er als Master im Hauptprogramm nur dann auch i2c bedient, wenn er auch laut Scheduler "dran" ist.

Moppi
29.09.2020, 10:22
Ja, vielleicht so oder so ähnlich, I2C soll nur als Softwarelösung auf dem nodeMCU möglich sein.
Ja gut... Danke erstmal!

MfG