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 }
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
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?
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.
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)
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
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/
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.
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.
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.
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ß
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
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.
Zzz schrieb: > Ist das javudino? Ich kenne javac aber javudino noch nicht. Auch dir schöne Adventstage.
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.
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
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
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.
> 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.
Sebastian R. schrieb: > haben wir doch schon diskutiert... Richtig, 1 Thread zum Thema reicht. Ich habe die beiden mal zusammengeführt.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.