INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
NodeMCU und Nano über I2C verbinden Werte sind falsch
09.10.2018, 18:51
Beitrag #1
NodeMCU und Nano über I2C verbinden Werte sind falsch
Ein nettes Hallo ,

ich versuche nun seit gut zwei Stunden einen Nano (slave) und einen NodeMCU (master) über I2C über das Beispiel in diesem
Link: https://forum.arduino.cc/index.php?topic...msg3199520
zu verbinden. Es kommen auch Daten an aber die Werte sind falsch:
Die Werte im slave sind:
10
40
120
32000
-1000

und im Master kommt an:
2621450
2097152120
-1000
-1
-1

Ich kann es mir nicht erklären wenn ich ein char übertrage geht es (Beispielcode)

Ich stehe auf dem Schlauch und komme einfach nicht weiter.

Anbei noch meine Codes dich ich mit Serial.print erweitert habe

Master
Code:
#include <Wire.h>

const int SLAVE_ADR = 8;

union data_u
{
struct
{
   int value1;
   int value2;
   int value3;
   int value4;
   int value5;
};
byte bytes[10];
};

data_u data;

void setup()
{
Serial.begin(9600);
Serial.println("Master");
Serial.println("-----------------------------");
Wire.begin(D1, D2);

// getData();
}

void loop()
{
getData();
}

void getData()
{
  Wire.requestFrom(SLAVE_ADR, sizeof(data));
  for (unsigned int i = 0; i < sizeof(data); i++)
    data.bytes[i] = Wire.read();

  Serial.println(data.value1);
  Serial.println(data.value2);
  Serial.println(data.value3);
  Serial.println(data.value4);
  Serial.println(data.value5);
  Serial.println("-----------------------------");

  delay (3000);
}

Slave
Code:
#include <Wire.h>

const int SLAVE_ADR = 8;

union data_u
{
struct
{
   int value1;
   int value2;
   int value3;
   int value4;
   int value5;
};
byte bytes[10];
};

data_u data;

void setup()
{
data.value1 = 10;
data.value2 = 40;
data.value3 = 120;
data.value4 = 32000;
data.value5 = -1000;

Serial.begin(9600);
Serial.println("Slave");
Serial.println("-----------------------------");

Wire.begin(SLAVE_ADR);
Wire.onRequest(requestEvent);
}

void loop()
{
Serial.println(data.value1);
Serial.println(data.value2);
Serial.println(data.value3);
Serial.println(data.value4);
Serial.println(data.value5);
Serial.println("-----------------------------");
delay (3000);
}

void requestEvent()
{
Wire.write(data.bytes, sizeof(data));
}

Ich möchte mehrere Werte (die Zahl steht noch nicht endgültig fest) über Sensoren des Nano oder Unos aufnehmen, dann per I2C an den NodeMCU übergeben und dann per wlan in einem MySQL Datenbank übergeben.

Gruß und schonmal danke fürs ansehen
Franzel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.10.2018, 19:04
Beitrag #2
RE: NodeMCU und Nano über I2C verbinden Werte sind falsch
Ich habe das etwas anders gelöst. Schaue Dir mal https://www.arduinoforum.de/arduino-Thre...%BCber-I2C an.
Interessant sollte auch dieses und dieses sein.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.10.2018, 16:49
Beitrag #3
RE: NodeMCU und Nano über I2C verbinden Werte sind falsch
Hallo Tommy,

danke für die Links. Die Informationen darin sind sehr hilfreich und haben mir näher gebracht was das Problem ist und wo mein Denkfehler lag.
Leider bin ich noch nicht soweit mit meinen Wissen, dass ich dein Sript so ändern und bei mir einfügen könnte, dass ich 5 Int Werte von dem Arduino zum NodeMCU richtig übergeben könnte. Ich werde mich aber weiter daran versuchen.

Gruß und nochmals danke
Franzel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.10.2018, 17:19
Beitrag #4
RE: NodeMCU und Nano über I2C verbinden Werte sind falsch
Zuerst musst Du festlegen, wer der Master ist (wahrscheinlich der NodeMCU), denn der muss die Kommunikation führen.
Dann kommt die Festlegung was gemacht werden soll.

Wenn Du z.B. nur die 5 int auf Anforderung vom Arduino holen willst, dann ist das, was Du dorthin sendest egal. Nehmen wir mal an eine 1.

Wichtig ist, dass die Zahlen auf beiden Systemen gleich groß sind.
Deshalb sollte die gleiche Definition mit Längenangabe in beiden Sketchen genutzt werden. (ungetestet)
Alles gepackt, damit das Array auf beiden Systemen gleich lang ist.
Code:
// ---------------- das in beiden Sketchen
#pragma pack (push, 1)
uint16_t zahlen[5];  // andere Schreibweise für int
#pragma pack (pop)
byte *bytePtr = (byte *)zahlen; // wir betrachten die 5 int als Byte  
const ARRLEN = sizeof(zahlen); // 10 Bytes
// ------------------------------------------------


// NodeMCU
// senden
uint8_t i = 0, b;
  Wire.beginTransmission(SLAVE_ADR);
  Wire.write(1);
  Wire.endTransmission();
  delay(1);
  // Antwort abholen
  Wire.requestFrom(SLAVE_ADR, ARRLEN);
  while (Wire.available() > 0) {
    b = Wire.read();
    if (i < ARRLEN) {
      bytePtr+i = b;
      i++;
    }

// Arduino
// Frage empfangen
void receiveEvent(int wieviel) { // nutzen wir hier nicht
    uint8_8 w = Wire.read();
    // Die 5 Ints mit Deinen Daten füllen, also die Antwort vorbereiten
}

// Antwort senden auf Wire.requestFrom(SLAVE_ADR, menge);
void requestEvent()
{
  Wire.write(bytePtr,ARRLEN);
}

Das ist jetzt nur mal grob runter geschrieben, ich habe gerade keinen passenden Aufbau zum Testen hier.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.10.2018, 12:16
Beitrag #5
RE: NodeMCU und Nano über I2C verbinden Werte sind falsch
Hallo Tommy,

danke für die Hilfe. das habe ich nun verstanden und werde es am Wochenende versuchen umzusetzen. ich melde mich wie es mir ergieng.

Gruß
Franzel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  NodeMCU und HC-SR501 Sensor komisches verhalten Ardu2018 19 3.907 11.01.2019 09:49
Letzter Beitrag: HansDampf
  NODEMCU sendet keine Email mehr 4miranda 9 872 15.12.2018 12:21
Letzter Beitrag: Tommy56
  NodeMCU Push Nachricht JanReum 3 663 03.11.2018 08:52
Letzter Beitrag: Fips
  Remote Ausgaben über Websocket zum Debuggen Tommy56 4 1.927 17.10.2018 10:31
Letzter Beitrag: Tommy56
  NodeMCU - 12E Modul RCudino 32 4.391 05.10.2018 18:50
Letzter Beitrag: RCudino
  Spiffs Verwaltung -->> ESP...Datei Verwaltung für ESP8266, Nodemcu, Wemos, Sonoff Fips 3 2.489 25.09.2018 07:56
Letzter Beitrag: Fips
Heart Nodemcu DS18B20 und der boiler sandmaenchen 12 1.672 06.09.2018 10:39
Letzter Beitrag: ardu_arne
  SD Card für NodeMCU ESP8266 ESP 12E rothpe 12 2.074 04.09.2018 08:06
Letzter Beitrag: rothpe
  NODEMCU vs. ESP8266 uk1408 41 5.079 19.06.2018 15:44
Letzter Beitrag: Tommy56
  Wie kann man OTA Übertragungen an versehentlich falsch gewählte Teilnehmer verhindern ardu_arne 6 1.180 31.05.2018 21:36
Letzter Beitrag: ardu_arne

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste