Go Down

Topic: Serielle Kommunikation zwischen Arduino mini und ESP(NodeMCU) (Read 656 times) previous topic - next topic

Thorsten4171

Das setup im Slave ist leer. Da muss doch auch wire.begin()rein um die Kommunikation zu starten.

Thorsten4171

wire.begin() steht tiefer hab ich erst jezt gesehen. #15 aus Gedächtniss streichen. :)

BJDK

Also D1 ist SCL und D2 ist SDA heißt sie sind für die I2C-Bus Verbindung zuständig, so habe ich es in anderen Projekten gesehen.
Hier :
http://www.electronicwings.com/nodemcu/nodemcu-i2c-with-arduino-ide

Wie füge ich den Bilder hier ein? ( ich kenne mich kein bisschen mit html aus)

Also ich habe D1(ESP) mit A4(Arduino) und D2(ESP) mit A5(Arduino) verbunden
als Analoge eingänge habe ich am Arduino A0-A3 belegt und dann noch A6 damit alle Werte aufgenommen werden. und dann natürlich Masse an Masse

BJDK

Also D1 ist SCL und D2 ist SDA heißt sie sind für die I2C-Bus Verbindung zuständig, so habe ich es in anderen Projekten gesehen.
Hier :
http://www.electronicwings.com/nodemcu/nodemcu-i2c-with-arduino-ide

Wie füge ich den Bilder hier ein? ( ich kenne mich kein bisschen mit html aus)

Also ich habe D1(ESP) mit A4(Arduino) und D2(ESP) mit A5(Arduino) verbunden
als Analoge eingänge habe ich am Arduino A0-A3 belegt und dann noch A6 damit alle Werte aufgenommen werden. und dann natürlich Masse an Masse
Bild ist doch mit Hochgeladen :)

combie

Quote
* Sensorik-Handschuh.jpg
Der Arduino, ist das ein 5V Modell?
Dann darf die 5V nicht an Raw, sondern muss an 5V.

Auch sehe ich keine I2C Pullup!
Das könnte das Versagen erklären.

Die sollten so ca. 1,8K haben und jeweils von SDA und SCL zu 3,3V gehen.
Schreie nach Besserem, bis du es auch erhältst.
Das noch Bessere verabschiedet sich rechtzeitig vor deinem Lärm.

Quelle: Martin Gerhard Reisenberg

BJDK

Die Spannung habe ich an RAW angeschlossen, weil ich dann mit 5V arbeiten kann. 3.3V wären eigentlich die Betriebsspannung, aber der Arduino mini Pro hat einen Spannungswandler,so das ich mit 5V arbeiten kann.


Die Pullups ist ein guter Punkt ich versuche das mal. Danke!

Thorsten4171

Habe deine beiden code auf nano und nodemcu ausprobiert ,dabei dein analogRead durch feste Werte ersetzt das läuft.



PS: getData fehlt aber eine Kleinigkeit :)

combie

Also ein 3,3V 8MHz Pro Mini?
Dann will ich (dazu) nichts gesagt haben!
Schreie nach Besserem, bis du es auch erhältst.
Das noch Bessere verabschiedet sich rechtzeitig vor deinem Lärm.

Quelle: Martin Gerhard Reisenberg

BJDK

Habe deine beiden code auf nano und nodemcu ausprobiert ,dabei dein analogRead durch feste Werte ersetzt das läuft.



PS: getData fehlt aber eine Kleinigkeit :)
Seltsam also bei mir Funktioniert es immer noch nicht. Hast du das auch mal mit variablen Werten versucht?
Bei mir kommt raus bei Festenwerten (1, 2,3,4,5):
131073
262147
5
0
0

Die Idee mit den Widerständen hat bis lang leider auch keine Veränderung gebracht

Thorsten4171

  data.Dwert =68; //analogRead(Daumen);
  data.Zwert =125 ;//analogRead(Zeigefinger);
  data.Mwert =1030 ;//analogRead(Mittelfinger);
  data.Rwert =20480 ;//analogRead(Ringfinger);
  data.Kwert =999 ;//analogRead(Kleinerfinger);


so gesendet und empfangen

BJDK

Also das ist dein Programm für den Slave?:
Code: [Select]
#include <Wire.h>// Einbindung der Bibliothek für das I2C Bus verfahren
//Pin und Variablen Deklarierung
#define Daumen A0
#define Zeigefinger A1
#define Mittelfinger A2
#define Ringfinger A3
#define Kleinerfinger A6
const int SLAVE_ADR = 2;
//Funktion um die Kommunikation zu starten
union data_u
{
  struct
  {
  int Dwert;
  int Zwert;
  int Mwert;
  int Rwert;
  int Kwert;
  };
  byte bytes[10];
};

data_u data;
void setup(){
}
//
void loop()
{
  data.Dwert = analogRead(Daumen);
  data.Zwert = analogRead(Zeigefinger);
  data.Mwert = analogRead(Mittelfinger);
  data.Rwert = analogRead(Ringfinger);
  data.Kwert = analogRead(Kleinerfinger);
  Wire.begin(SLAVE_ADR);,
  Wire.onRequest(requestEvent);
}

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

Und das das Programm für den Master?
Code: [Select]
#include <Wire.h>

const int SLAVE_ADR = 2;

union data_u
{
  struct
  {
  uint16_t Dwert;
  uint16_t Zwert;
  uint16_t Mwert;
  uint16_t Rwert;
  uint16_t Kwert;
  };
  byte bytes[10];
};

data_u data;

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

void loop()
{
  getData();
  delay(1000);
}

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.Dwert);
  Serial.println(data.Zwert);
  Serial.println(data.Mwert);
  Serial.println(data.Rwert);
  Serial.println(data.Kwert);
}

Thorsten4171



Thorsten4171

Hmm  bin mit meinem Latein am Ende. Wie gesagt habe nur eine nano als Slave eingesezt und als Master
eine NodeMcu und eben nochmal einen Wemos D1 mini. Wenn ich feste Werte eingebe geht es wie gesagt.
Vielleicht hat ja noch jemand hier im Forum einen Tip für dich , ich leider im Moment nicht mehr.


mfg Thorsten

BJDK

Alles klar Torsten dann vielen dank trotzdem!

Für alle anderen :

Bei mir sieht es so aus:
data.Dwert = 1456;
data.Zwert = 5642;
data.Mwert = 4563;
data.Rwert = 54;
data.Kwert = 5559;

und raus kommen die Werte

369755568
3543507
5559
0
0

Go Up