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
Datenaustausch zwischen NodeMCU 1.0 und Pro Mini
18.02.2018, 19:44
Beitrag #25
RE: Datenaustausch zwischen NodeMCU 1.0 und Pro Mini
Das ist der Nachteil, wenn der eigentliche Zweck erst nach langer Zeit mal bekanntgegeben wird.
Das kannst Du auch direkt mit dem ESP8266 machen (Gießomat) mit 3,3V betrieben.
Hier ist das mit drin. Den Rest kannst Du raus werfen.
Code:
// feuchte
/* Überwachung Zyperngras Belegung NodeMCU

  GPIO4   (A0) Analog in Wasservorrat
  GPIO15  (D8) Spannung für Wasservorrat
  GPIO14  (D5) Spannung für Feuchte
  GPIO13  (D7) Input Feuchte (Interrupt Frequenzmessung)
  GPIO12  (D6) (LED)
  GPIO4   (D2) I2C SDA
  GPIO5   (D1) I2C SCL
*/

#include <ESP8266WiFi.h>
#include <Wire.h>  
#include <SHT21.h>
#include <Hash.h>
#include <MySQL.h>

#include "settings.h"

const byte FOUT = D5;
const byte FIN = D7;
const byte LED = D6;

volatile byte messState = 2;
volatile uint32_t startMicros;
volatile uint32_t stopMicros;
uint32_t wert = 0, lastWert = 0;
const uint32_t MESSINTERVALL = 15 * 60 * 1000;  // 15 Minuten
// const uint32_t MESSINTERVALL = 15 * 1000;  // 15 Sekunden
uint32_t last = 0, akt;
const int intervall = 20000;
uint32_t wertArr[10];
int idxfeucht = 0;
byte ausfeucht = LOW;
const int FAKTOR = 2;
float luftfeuchte, temperatur, vorrat, feuchte;
int pumpe, valCnt;
byte isBoot = 1;

SHT21 SHT21;
Connector my_conn;


uint8_t status = 0;

#define debug 1

// #define DEBUG 1

#if (DEBUG == 0)
  #define sp(...)
  #define spn(...)
  #define sbeg(...)
#else
  #define sp(...) Serial.print(__VA_ARGS__)
  #define spn(...) Serial.println(__VA_ARGS__)
  #define sbeg(...) Serial.begin(__VA_ARGS__); while(!Serial)
#endif

void ICACHE_RAM_ATTR pinSwitch() {
  noInterrupts();
  // Wenn noch nicht abgeholt, dann nix tun;
  if (messState >= 2) {
    interrupts();  
    return;
  }  
  // neue Messung starten
  if (messState == 0) {
    startMicros = micros();
    messState = 1;
  }
  else {
    stopMicros = micros();
    messState = 2;
    detachInterrupt(digitalPinToInterrupt(FIN));

  }
  interrupts();
}

void setup() {
char puffer[40];
int erg;
  digitalWrite(LED,LOW);
  pinMode(LED,OUTPUT);
  pinMode(FIN,INPUT_PULLUP);
  pinMode(FOUT,OUTPUT);

  sbeg(115200);
  spn("\nStart");
  SHT21.begin();
  status = 0;
  isBoot = 1;
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    sp(".");
  }
  
  spn("\nConnected to Wifi. Connecting to database . . .");
  if (my_conn.mysql_connect(dbhost, 3306, user, dbpassword)) {
    spn("DB-Connection ok.");
    delay(500);
  }
  else
    spn("DB-Connection failed.");
  strcpy(puffer,"use ");
  strcat(puffer,db);
  erg = my_conn.cmd_query(puffer);
  sp("Ergebnis: "); spn(erg);
  spn(puffer);
  digitalWrite(FOUT,HIGH);
}


void auswertenFeucht() {
uint32_t sum = 0, mittel;
  if (messState != 2) return;
  wert = stopMicros - startMicros;
  if (wert > 3) {
    wertArr[idxfeucht++] = wert *FAKTOR;
    if (idxfeucht >= 9) {
      idxfeucht = 0;
      messState = 4;
      ausfeucht = LOW;
      digitalWrite(FOUT,ausfeucht);
      for(int i=0; i<10; i++) sum += wertArr[i];
      mittel = sum / 10;
      sp("Mittel: ");
      spn(mittel);
      feuchte = mittel;
      status = 3;
    }
  }  
  if (messState != 4) messState = 3;
}

void startMessFeucht() {
  if (messState != 3) return;
    sp("StartMess"); spn(idxfeucht);
    messState = 0;
    attachInterrupt(digitalPinToInterrupt(FIN), pinSwitch, RISING);
}

void initialisierenFeucht() {
  ausfeucht = HIGH;
  digitalWrite(FOUT,ausfeucht);
  idxfeucht = 0;
  delay(200);
  messState = 3;
}

void zeitSteuerung() {
  akt = millis();
  if ((status == 0) && ((akt - last >= MESSINTERVALL) || (last == 0))) {
    last = akt;
    status = 1;
    digitalWrite(LED,HIGH);
  }  
}

void feuchteSteuerung() {
  if (status == 1) {
    initialisierenFeucht();
    status = 2;
    return;
  }  
  if (status == 2) {
    startMessFeucht();
    auswertenFeucht();
  }
}

void tempLuft() {
  if (status != 3) return;
  spn("Temperatur");
  luftfeuchte = SHT21.getHumidity();
  temperatur = SHT21.getTemperature();

  sp("Humidity(%RH): ");
  sp(luftfeuchte);
  sp("     Temperature(C): ");
  spn(temperatur);
  status = 4;
}

void vorratSteuerung() {
  if (status != 4) return;
  spn("Vorrat");
  status = 5;

}

///////////////////// DB-Hilfefunktionen ////////////////////////////
// fügt Komma vor Value ein
void addSeperator(char *buf) {
  if (valCnt != 0) {
    strcat(buf,",");
  }
  valCnt++;
}

void appendFloatVal(char *buf, const float val, int nachkomma = 2) {
char lbuf[20];  
  addSeperator(buf);
  // Länge 1, damit keine führenden Blank angelegt werden
  dtostrf(val,1,nachkomma,lbuf);
  strcat(buf,lbuf);
}


void appendIntVal(char *buf, const int val) {
char lbuf[20];  
  addSeperator(buf);
  strcat(buf,itoa(val,lbuf,10));
}

void senden() {
int erg;
boolean isTimeOut;
char puffer[80];

  if (status != 5) return;
  spn("Senden");
  // SQL-Statement
  valCnt = 0;
  strcpy(puffer, "insert into pflanze values (now(),");
  appendFloatVal(puffer,feuchte);  
  appendFloatVal(puffer,temperatur);  
  appendFloatVal(puffer,luftfeuchte);  
  appendFloatVal(puffer,vorrat);
  appendIntVal(puffer,pumpe);
  appendIntVal(puffer,isBoot);
  strcat(puffer,")");
  spn(puffer);  
  isBoot = 0;
  digitalWrite(LED,LOW);
  erg = my_conn.cmd_query(puffer);
  sp("Ergebnis: "); spn(erg);
  // Wenn Verbindung weg, Neustart versuchen
  isTimeOut = my_conn.isTimeout();
  if (isTimeOut) ESP.restart();
  // neuen Zyklus starten
  status = 0;
}

void loop() {
  zeitSteuerung();
  feuchteSteuerung();
  tempLuft();
  vorratSteuerung();
  senden();
  
  yield();
}

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
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  NODEMCU vs. ESP8266 uk1408 41 1.989 19.06.2018 15:44
Letzter Beitrag: Tommy56
  Vom NodeMCU ein externes Relais schalten. Stargazer 28 2.401 25.04.2018 22:18
Letzter Beitrag: Fips
  NodeMCU Werte übertragen Gian-Luca 11 1.304 16.04.2018 16:57
Letzter Beitrag: Tommy56
  Datenübergabe zwischen Arduino Uno und ESP8266 bastelmichi 2 1.861 10.04.2018 15:05
Letzter Beitrag: Tommy56
  NodeMCU und HC-SR501 Sensor komisches verhalten Ardu2018 16 1.597 05.04.2018 19:38
Letzter Beitrag: amithlon
  Spiffs Verwaltung -->> ESP...Datei Verwaltung für ESP8266, Nodemcu, Wemos, Sonoff Fips 1 776 01.04.2018 19:54
Letzter Beitrag: Tommy56
Lightbulb SPIFFS DOWNLOAD UPLOAD & DELETE Esp8266 NodeMCU Fips 30 5.894 23.03.2018 11:10
Letzter Beitrag: sfb2
  NodeMCU 5 Volt Gian-Luca 3 648 21.03.2018 20:56
Letzter Beitrag: Gian-Luca
  Nodemcu serielle Schnittstelle Blatzi 1 496 19.03.2018 17:12
Letzter Beitrag: Tommy56
  ESPlorer Software für NodeMCU georg01 3 689 13.03.2018 18:12
Letzter Beitrag: georg01

Gehe zu:


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