Forum: Mikrocontroller und Digitale Elektronik Programm Temperaturfühler


von Ralf S. (blackvento)


Angehängte Dateien:

Lesenswert?

Hallo,
verbaut habe ich einen ESP8266 V3.0.0, zwei DS18B20 Temperatursensoren, 
einen Moisture Sensor v1.2, zwei Relais. Ich möchte im Gewächshaus 
Frischluft haben wenn die Temperatur von innen und außen mehr als 15C 
unterschied haben und bei Trockenheit Wasser an geht. Tasmota 10.0.0 ist 
auf dem Mini.

Mein erster Versuch ein Programm zu schreiben sieht folgendermaßen aus.
Aber es läuft nicht. Ich denke da sind einige Fehler drin die ich nicht 
finde.
Wie kann ich hier ein Programm mit Zeilennummer einfügen?
Danke im voraus für diejenigen die Zeit und Geduld haben.
MfG


// Zwei Temperaturfühler und Bodenfeuchtigkeitssensor

// 2 Temperatursensoren an Pin 7
#define ONE_WIRE_BUS 7

// One Wire Referenz Übergabe zum kommunizieren mit dem Sensor.
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

const int sensorTaktSek = 60*60*2;  // alle x Sekunden werden die 
Temperatursensoren ausgelesen
const byte bus_int = 6;        // GPIO12 D6 Pin für Temperatursensoren
const int luftPin = 7;        // GPIO13 D7 Relai für Lüfter
const int luftPinDuration = 600;    // Lüfterdauer in Sekunden
const int temp1=3C01E0769173    // Temperaturfühler-1
const int temp2=3C01F095A669    // Temperaturfühler-2

int sensorTakt = luftPinDuration * 1000;   // Umrechnung von ms auf 
Sekunden

void setup(void) {
Serial.begin(115200); //Starten der seriellen Kommunikation mit 115200 
baud
}

//wenn die aktuelle Temperatur kleiner als 25C bei Temperaturfühler-1 
dann soll das Programm für Lüfter stoppen
if(MIN_TEMP < 25C)
  else{  // gehe direkt zu Gartenhaus bewässern

// wenn Temperaturfühler-1 15C kleiner als Temperaturfühler-2 dann soll 
Relai an Pin 7 für 10 Min. laufen
if(temp1<temp2+15C)
  digitalWrite(luftPin, HIGH);  // Lüfter ein
 void attract() {
    digitalWrite(luftPin, LOW);    // Lüfter aus
    }

}



// Gartenhaus bewässern

const int sensorTaktSek = 60*60*2;    // alle x Sekunden wird der Sensor 
ausgelesen
const int soilMoistLevelLow = 750;    // Wert trocken
const int soilMoistLevelHigh = 320;   // Wert im Wasser
const int startWatering = 500;        // Schwellwert Bewässerung ein
const int wateringDuration = 7;       // Bewässerungsdauer in Sekunden
const int soilMoistPin = A0;          // ADC Pin
const int pumpPin = 8;                // GPIO15 D8

int lastSoilMoist = 0;
int sensorTakt = wateringDuration * 1000;   // Umrechnung von ms auf 
Sekunden

void setup() {
  Serial.begin(115200);
  pinMode(soilMoistPin, INPUT);
  pinMode(pumpPin, OUTPUT);
  digitalWrite(pumpPin, LOW); // Sicherstellen das die Wasserpumpe aus 
ist
}

void loop() {
  long now = millis();

    if (percentSoilMoist <= startWatering) {
    }
  }

void plantWatering() {
  digitalWrite(pumpPin, HIGH); // Wasserpumpe ein
  delay(wateringDuration*1000);

  digitalWrite(pumpPin, LOW); // Wasserpumpe aus
}

von my2ct (Gast)


Lesenswert?

Ralf S. schrieb:
> Wie kann ich hier ein Programm mit Zeilennummer einfügen?

Einfach den Hinweisen zur Formatierung folgen und deinen Code in die 
Code-Tags für C-Code einschließen

von my2ct (Gast)


Lesenswert?

Ralf S. schrieb:
> Gartenhaus.java

Was genau an der Datei ist java, wenn man mal von der Buchstabenfolge 
"java" im Dateinamen absieht?

> Aber es läuft nicht.

Was heißt "es läuft nicht"?
Rufst du den zum Code passenden Compiler auf?

von Ralf S. (blackvento)


Lesenswert?

Den Hinweis zur Formatierung habe ich mehrfach durchgelesen und nicht 
verstanden. Jetzt klappt es mit deiner Antwort.

Ich habe den Code mit Java Bücher und Foren Beiträge zusammen gestellt. 
Deswegen habe ich das "Java Programm" genannt.

Auch der Hinweis zu einem Compiler hilft mir weiter. Ich muss jetzt nur 
heraus finden was das ist.

von Sebastian R. (sebastian_r569)


Lesenswert?

Ralf S. schrieb:
> Ich habe den Code mit Java Bücher und Foren Beiträge zusammen gestellt.
> Deswegen habe ich das "Java Programm" genannt.
>
> Auch der Hinweis zu einem Compiler hilft mir weiter. Ich muss jetzt nur
> heraus finden was das ist.

Das ist C++ mit Arduino-Gedöns.

Was du suchst/brauchst ist die Arduino-IDE mit der ESP8266-Toolchain 
(kann man sehr leicht über den Boardmanager nachinstallieren)

von Ralf S. (blackvento)


Lesenswert?

Danke für deinen Hinweis.

Sebastian R. schrieb:
> (kann man sehr leicht über den Boardmanager nachinstallieren)

 man JA, ich wahrscheinlich nicht.
Ich habe zwei Monate gebraucht um so weit zu kommen wie ich jetzt bin 
mit Tasmota.

Ich war im Glauben ein Profi hätte das Programm in 3Minuten korrigiert 
und ich könnte das auf dem MINI übertragen. Nun werde ich weiter daran 
arbeiten und versuchen heraus zu finden was diese Begriffe (Compiler, 
IDE, Boardmanager, Toolchain u.s.w) bedeuten.
Zumindest habe ich Anhaltspunkte wo ich weiter machen kann.
Danke

von Oliver S. (phetty)


Lesenswert?

Wenn du Tasmota hast dann mach das doch über ein paar Rules:
https://tasmota.github.io/docs/Rules/

Die 10 Minuten Laufzeit würde ich über eine Pulsetime lösen.


Sollte das wider Erwarten nicht ausreichen gibt es sogar noch Skripting:
https://tasmota.github.io/docs/Scripting-Language/

von Sebastian R. (sebastian_r569)


Lesenswert?

Ralf S. schrieb:
> Ich war im Glauben ein Profi hätte das Programm in 3Minuten korrigiert
> und ich könnte das auf dem MINI übertragen. Nun werde ich weiter daran
> arbeiten und versuchen heraus zu finden was diese Begriffe (Compiler,
> IDE, Boardmanager, Toolchain u.s.w) bedeuten.
> Zumindest habe ich Anhaltspunkte wo ich weiter machen kann.
> Danke

Dazu eine Frage:

Wie bist du denn zu folgender Erkenntnis gekommen:

Ralf S. schrieb:
> Aber es läuft nicht.

So ein Programm läuft ja nicht einfach so.
Der Quelltext muss von einem Compiler in eine Maschinensprache übersetzt 
werden, die dein ESP8266 versteht. Dann muss das übersetzte Programm 
auch noch irgendwie auf den Controller kommen, das geht auch mit 
speziellen Softwares.

Alles, was zwischen Quelltext und programmiertem Controller passiert, 
ist die Toolchain.

von Stefan F. (Gast)


Lesenswert?

Ralf S. schrieb:
> const byte bus_int = 6;       // GPIO12 D6 Pin für Temperatursensoren
> const int luftPin = 7;        // GPIO13 D7 Relai für Lüfter
> const int pumpPin = 8;        // GPIO15 D8

Ich denke, dass 8 = GPIO8 ist, nicht D8. Wenn du D8 (=GPIO15) ansprechen 
willst, musst du entweder D8 oder 15 hinschreiben.

Bevor du komplexe Logik programmierst, teste erst einmal alle Ein- und 
Ausgabe-Schnittstellen einzeln.

von Ralf S. (blackvento)


Lesenswert?

OK, werde ich auf D6 D7 D8 ändern.

Die drei Sensoren werden korrekt in Tasmota angezeigt. Die Relais kann 
ich mit Tasmota schalten.
Jetzt geht es weiter mit Compiler, IDE, Boardmanager, Toolchain, github 
und Rules.
Danke an allen.

von Ralf S. (blackvento)


Lesenswert?

1
// 2 Temperaturfühler
2
3
public class Gartenhaus1 {
4
  public static void main (String[] args){
5
    
6
  char GPIO12=D6;        // GPIO12 D6 Pin für Temperatursensoren
7
  char GPIO13=D7;        // GPIO13 D7 Relai für Lüfter
8
  char temp1="DS18B20-1";        // Temperaturfühler-1
9
  
10
   digitalWrite(GPIO13, LOW);    // Lüfter aus
11
  if(temp1>20){
12
   digitalWrite(GPIO13, High);    // Lüfter an;
13
  }
14
  }
15
}

Ich habe javac Gartenhaus1.java eingegeben. Dann kam


C:\Java>javac Gartenhaus1.java
Gartenhaus1.java:6: error: cannot find symbol
        char GPIO12=D6;                         // GPIO12 D6 Pin f├╝r 
Temperatursensoren


  symbol:   variable D6
  location: class Gartenhaus1
Gartenhaus1.java:7: error: cannot find symbol
        char GPIO13=D7;                         // GPIO13 D7 Relai f├╝r 
L├╝fter


  symbol:   variable D7
  location: class Gartenhaus1
Gartenhaus1.java:8: error: incompatible types: String cannot be 
converted to char
        char temp1="DS18B20-1";                         // 
Temperaturf├╝hler-1


Gartenhaus1.java:10: error: cannot find symbol
         digitalWrite(GPIO13, LOW);             // L├╝fter aus


  symbol:   variable LOW
  location: class Gartenhaus1
Gartenhaus1.java:12: error: cannot find symbol
         digitalWrite(GPIO13, High);            // L├╝fter an;


  symbol:   variable High
  location: class Gartenhaus1
5 errors


1. Hat jemand Zeit das Programm zu korrigieren ?
2.Wie bekomme ich das Programm auf den Tasmota wenn es koregiert ist ?
  Ist der Programmname dann Gartenhaus1.class ?

Gruß

von MaWin (Gast)


Lesenswert?

Ralf S. schrieb:
> 2.Wie bekomme ich das Programm auf den Tasmota wenn es koregiert ist

https://tasmota.github.io/docs/Getting-Started/

Du bist ungefähr so weit weg vom erfolgreichen Programmieren, wie 
Christof Kolumbus um 1500 A.D. vom Mond.

Mach lieber was, was du kannst

von Zzz (Gast)


Lesenswert?

Ist das javudino?

von Ralf S. (blackvento)


Lesenswert?

MaWin schrieb:

> Du bist ungefähr so weit weg vom erfolgreichen Programmieren, wie
> Christof Kolumbus um 1500 A.D. vom Mond.

Da muss ich dir Recht geben.

> Mach lieber was, was du kannst

Ich bin seit 3Monaten an diesem Projekt dran und habe gehofft hier 
jemanden zu finden der mir weiter helfen kann.
Ich weiß das derjenige 99% der Arbeit machen würde. Mit dem was ich kann
habe ich kostenlos schon vielen Häusle Bauer geholfen und die wahren 
froh viel Geld gespart zu haben.

Schöne Adventstage wünsche ich dir.

von Ralf S. (blackvento)


Lesenswert?

Zzz schrieb:
> Ist das javudino?

Ich kenne javac aber javudino noch nicht.
Auch dir schöne Adventstage.

von Peter D. (peda)


Lesenswert?

Ralf S. schrieb:
> Ich bin seit 3Monaten an diesem Projekt dran und habe gehofft hier
> jemanden zu finden der mir weiter helfen kann.

Naja, man sollte schon im Topic angeben, um welche Hardware und welche 
Programmierumgebung es geht.
Dann brauchen die, die sich damit nicht auskennen, es nicht erst lesen 
und dumme Kommentare abgeben.
Java ist bei der MC-Programmierung nicht sehr verbreitet, also eher ne 
Nische.


Ralf S. schrieb:
> Wie bekomme ich das Programm auf den Tasmota

Ich würde da eher in den speziellen Tasmota-Foren suchen, als in einem 
allgemeinen MC-Forum.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Ralf S. schrieb:
> 1. Hat jemand Zeit das Programm zu korrigieren ?

Compiler hat dir schon alle Fehler schön ordentlich ausgeschrieben.
z.B.
1
Gartenhaus1.java:6: error: cannot find symbol
2
  symbol:   variable D6
Wo ist da irgendwelches Problem?

P.S.
Irgendwelchen Arduino code einfach abschreiben geht
natürlich nicht.

: Bearbeitet durch User
von Sebastian R. (sebastian_r569)


Lesenswert?

Dass das kein Java ist und welche Schritte (theoretisch) notwendig sind, 
haben wir doch schon diskutiert...

Beitrag "Bewässerung, Temperatur steuern Wemos D1 Mini V3.0.0"



Erfinde bitte erst einmal das Rad, bevor du zum Mond möchtest. Wenn du 
es geschafft hast, aufm WEMOS die LED mit eigenem Code zum Blinken zu 
bringen, lesen wir uns wieder.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Der "javac" Compiler eignet sich nur zum Compilieren von Java 
Programmen.

Dein Quelltext ist aber weder Java noch irgendeine andere mir bekannte 
Programmiersprache.

> char GPIO12=D6;

Das hier setzt voraus, dass D6 ein globales Symbol ist. In C/C++ würde 
man dazu eine Bibliothek einbinden. In Java geht das so gar nicht, weil 
es in Java nur Klassen (keine globalen Symbole) gibt.

Ich vermute, dass du in Arduino programmieren wolltest. Da werden die 
nötigen Bibliotheken vom Arduino System bereit gestellt, ohne dass man 
es extra hinschreiben muss.

> digitalWrite(GPIO13, LOW);

Das sieht auch nach Arduino aus. In Java gibt es keine Funktionen, nur 
Methoden.

> char temp1="DS18B20-1";

Das macht in keiner Programmiersprache Sinn. Variablen vom Typ char 
speichern nur 1 Zeichen, nicht 9.

> if(temp1>20)

Das ergibt keinen Sinn. Man kann in streng typisierten 
Programmiersprachen keine Zeichenketten mit Zahlen vergleichen. Selbst 
wenn es ginge, wäre der Ausdruck immer unwahr. Der Lüfter würde niemand 
an gehen.

von Stefan F. (Gast)


Lesenswert?

> Selbst wenn es ginge, wäre der Ausdruck immer unwahr.
> Der Lüfter würde niemand an gehen.

Anders herum: Der Ausdruck wäre immer wahr weil im ASCII Zeichensatz "2" 
vor "D" kommt.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Sebastian R. schrieb:
> haben wir doch schon diskutiert...
Richtig, 1 Thread zum Thema reicht. Ich habe die beiden mal 
zusammengeführt.

von Peter D. (peda)


Lesenswert?

Ralf S. schrieb:
> Ich war im Glauben ein Profi hätte das Programm in 3Minuten korrigiert

Um es nochmal klar zu sagen, Java ist nicht die einzige 
Programmiersprache und Tasmota nicht die einzige Entwicklungsumgebung. 
Und ein Profi kann nicht alles kennen, sondern spezialisiert sich auf 
weniges.

Deine Wahl ist dahingehend unglücklich, daß Java auf MCs recht 
ungebräuchlch ist. Und Tasmota ist eine recht neue und unbekannte 
Entwicklung einer einzigen Person.
Daher wird es wohl mit Deinen "Profis" ein Wunschtraum bleiben.

Es scheint auch so, als hätte der Autor der Tasmota Seite die Lust 
verloren.
Manche Links zeigen ins Leere und Produkte sind nicht mehr verfügbar.
https://www.tasmota.info/
Für einen Programmierneuling scheint mir das also die denkbar 
schlechteste Wahl.

Was Du da als Java titulierst, scheint Arduino-Code zu sein, also C++.
Ich glaub nicht, daß man das mit Tasmota verheiraten kann.
Allgemein ist C/C++ auf MCs recht weit verbreitet.
Arduino/C++ sind für Anfänger erheblich besser geeignet, als Deine 
exotische Wahl Java/Tasmota. Du wirst Dich wohl umstellen müssen.

von Sebastian R. (sebastian_r569)


Lesenswert?

Peter D. schrieb:
> Es scheint auch so, als hätte der Autor der Tasmota Seite die Lust
> verloren.
> Manche Links zeigen ins Leere und Produkte sind nicht mehr verfügbar.
> https://www.tasmota.info/
> Für einen Programmierneuling scheint mir das also die denkbar
> schlechteste Wahl.

Gut, eine deutsche Tasmota-"Fanpage" ist jetzt nicht gerade 
repräsentativ für das Projekt.

Das letzte große Release ist vom 19. Oktober diesen Jahres, der letzte 
Commit im Git ist 11 Stunden her.

https://tasmota.github.io/docs/
https://github.com/arendst/Tasmota

Um Geräte mit ESP2866 ins Smart Home zu bringen, braucht man für Tasmota 
keine Programmierkenntnisse. Auch wenn es offiziell auf MQTT ausgelegt 
ist, gibt's die Möglichkeiten, das Ding auch mit Alexa, Philips Hue und 
ähnlichem zu verwenden. Ganz ohne große Programmierkentnnisse.

Ansonsten ist Tasmota aber natürlich nur eine von vielen Varianten. Aber 
sicherlich eine der am besten gepflegten und communityreichsten, die es 
gibt.

von Martin (Gast)


Lesenswert?

Schau mal hier bevor du weiter machst:

http://www.elektronik-kompendium.de/sites/grd/index.htm

undzwar am Anfang anfangen und nichts auslassen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.