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
  WEMOS D1 Mini Pro 16M Flash ArduTux 12 290 Heute 10:25
Letzter Beitrag: Majorshark
  NodeMCU mit CH340 oder CP2102 kaufen? torsten_156 2 33 Heute 00:30
Letzter Beitrag: Fips
  NodeMCU - WLAN Zugangsdaten von Browser einstellbar ? Stargazer 8 462 16.02.2018 22:55
Letzter Beitrag: uk1408
  Mega2560 send float über i2c zum Wemos D1 Mini Pro ArduTux 3 136 15.02.2018 09:45
Letzter Beitrag: ArduTux
  Einfacher Webserver Nodemcu Esp8266 Onboard Led (Pin) schalten Fips 31 3.102 06.01.2018 20:41
Letzter Beitrag: Tommy56
  Blynk und NodeMCU Yannis 3 559 15.12.2017 18:23
Letzter Beitrag: ElEspanol
  NodeMcU V3 hätte da mal bitte Hilfe nötig Anwender 14 1.247 24.11.2017 19:41
Letzter Beitrag: Anwender
  nodeMCU ESP 12E V3 - Frage zum Beispielsketch "Hello Server" Stargazer 2 894 13.08.2017 21:09
Letzter Beitrag: Stargazer
Lightbulb SPIFFS DOWNLOAD UPLOAD & DELETE Esp8266 NodeMCU Fips 24 3.020 14.07.2017 07:24
Letzter Beitrag: Fips
  NodeMCU steuert UNO/NANO über I2C Tommy56 7 5.321 11.02.2017 15:30
Letzter Beitrag: Binatone

Gehe zu:


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