Inhaltsverzeichnis

Serielle Kommunikation vom ESP8266 zum Arduino

zurück zur Übersicht

ESP8266

HardwareSerial_8266_TX.ino
/*
 * Verwendung des 2. seriellen Anschlusses auf dem NodeMCU 1.0
 * TX: D4
 * RX: nicht existent, transmit only
 * 
 * TX mit RX am anderen Board verbinden
 * GND mit GND am anderen Board verbinden
 */
 
int count = 0;
String data = "";
 
void setup() {
  Serial.begin(38400);
  delay(100);
  Serial.print("Setup ...");
  Serial1.begin(38400);
  Serial.println(" done.");
}
 
 
void loop() {
  data = "t:" + String(24.2) + ";h:" + String(47) + ";c:" + String(count);
  count++;
  Serial1.println(data);
  Serial.println(data);
  delay(3000);
  data = "t:" + String(23.9) + ";h:" + String(46) + ";c:" + String(count);
  count++;
  Serial1.println(data);
  Serial.println(data);
  delay(3000);
  data = "t:" + String(23.7) + ";h:" + String(45) + ";c:" + String(count);
  count++;
  Serial1.println(data);
  Serial.println(data);
  delay(3000);
}

Arduino

HardwareSerial_Arduino_RX.ino
/*
 * Arduino als Empfänger für Daten an der seriellen Schnittstelle
 * Dateneingang über Pin RX
 *
 * RX mit TX am anderen Board verbinden
 * GND mit GND am anderen Board verbinden
 */
String data;
int index = 0;
 
void setup() 
{
  Serial.begin(38400);
  /*while (!Serial)
  {
    // wait for serial to connect
  }*/
  Serial.println("Setup done.");
}
 
void loop() 
{
  if (Serial.available())
  {
    double temp;
    double hum;
    int count;
 
    // von der seriellen Schnittstelle einlesen
    data = Serial.readString();
    data.trim();
 
    // Nachricht am Semikolon aufteilen
    String first = data.substring(0, data.indexOf(";"));
    String remaining = data.substring(data.indexOf(";") + 1, data.length());
    String second = remaining.substring(0, remaining.indexOf(";"));
    String third = remaining.substring(remaining.indexOf(";") + 1, remaining.length());
 
    // Nachricht nach Temperatur und Luftfeuchte auswerten
    if (first.substring(0, 2) == "t:")
    {
      temp = first.substring(first.indexOf(":") + 1, first.length()).toDouble();
    }
    if (second.substring(0, 2) == "h:")
    {
      hum = second.substring(second.indexOf(":") + 1, second.length()).toDouble();
    }
    if (third.substring(0, 2) == "c:")
    {
      count = third.substring(third.indexOf(":") + 1, third.length()).toDouble();
    }
 
    // Ausgabe
    Serial.print("Temperatur: ");
    Serial.print(temp);
    Serial.print(", Luftfeuchte: ");
    Serial.print(hum);
    Serial.print(", Zähler: ");
    Serial.println(count);
  }
}

zurück zur Übersicht