• Du musst dich registrieren, bevor du Beiträge verfassen kannst. Klicke auf Jetzt registrieren!, um den Registrierungsprozess zu starten. Registrierte User surfen werbefrei, können Suchen durchführen und sehen die volle Darstellung des Forums mit vielen anderen Unterforen!!!

WLAN Thermometer Micro

Falls du jetzt Serial0 benutzt, schau dir doch mal im Seriallen Monitor am PC an, was über die Schnittstelle läuft. Da dürfte jetzt ja nur t0.txt="bla"ffffff kommen (wobei die ff glaub ich anders dargestellt werden). Ganz am Anfang kommt glaube ich noch ein "page 0" von der nextion.init. Wenn das funktioniert, liegt es entweder daran, dass du Rx und Tx vertauscht hast, oder das die Baudrate nicht stimmt. Setz in Preintialize Event von page0 folgendes: bauds=115200. Damit speicherst du die Geschwindigkeit fest in den EEPROM des Displays.
 
Guten Morgen.

Es sind weder die Bauds, noch RX / TX.
Ich denke ich mache da irgendwas grundlegendes falsch, und komme da aber einfach nicht drauf.

Am serialmonitor sehe ich eine riesen Zeile mit Sonderzeichen und das wars.
Im moment versuche ich es noch mit eingebundener Nextion.h, bin auch der Meinung, dass ich da alles richtig eingerichtet hab (Serial in NexConf.h geändert) und auch die Daten richtig an die Klasse / die Methode zum Text setten übergebe. Aber es passiert einfach nichts...

So langsam bin ich dann kurz vor der Entscheidung, dass es nur ein Webinterface gibt...
 
Am serialmonitor sehe ich eine riesen Zeile mit Sonderzeichen und das wars.
Komisch.
Die ITEADLIB setzt die Bauds in seiner Init auf 9600, hast du das berücksichtigt? Unter NexHardware.cpp ab Zeile 200 ist die nexInit(), dort kannst du die Bauds ändern.

Hast du mal eins der Beispiele aus der ITEADLIB verwendet? Da sind sowohl .ino als auch die passenden .hmi drin, so dass du es auf dein Display anpassen kannst. Diese einfachen Skripte sollten ja ohne Probleme laufen, dann hat man auch keine Störeinflüsse von anderen Programmteilen.

Wenn ich bei mir die "CompText.ino" auf den ESP draufspiele (vorher die .ino um #include "SPI.h"; #include "SD.h"; #include "SoftwareSerial.h" erweitert und unter NexConfig.h nexSerial auf Serial eingestellt und dbSerial auskommentiert) dann bekomm ich beim Start folgende Ausgabe im Serialen Monitor:

Unbenannt.png


Wenn es so aussieht, sollte die Verbindung mit dem Display funktionieren, außer die Verkabelung stimmt nicht.
 

Anhänge

  • Unbenannt.png
    Unbenannt.png
    4 KB · Aufrufe: 848
Moin.

Das Display läuft jetzt, es war tatsächlich die Baudrate in der NexHardware.cpp.
Danke für den Tipp!
Dann fehlen jetzt erstmal nur noch die ganzen Bauteile die im Zulauf sind, dann kann gelötet werden und dann geht's mit dem Code weiter :-)
Das Layout für die neue Platine steht auch schon fast, werde auch den MCP3208 nehmen, aber als SMD Version. Momentan ist die Platine ca 45mm x 72mm mit mehr als ausreichend Platz. Der ESP bekommt dann auch seinen Platz auf der Platine, so dass man den reinen ESP nutzen kann und nich die große NodeMCU nutzen muss.
 
So nu sind die Bauteile da, und zwei Platinen bestückt. Vielen Dank nochmal für eure Hilfe, das hat mich auf jeden Fall weiter gebracht! Ich häng mal noch zwei Bilder an, falls wer so eine unbestückte Platine will, hab noch 5 Stück übrig...

IMG_1711.JPG


IMG_1712.JPG
 

Anhänge

  • IMG_1711.JPG
    IMG_1711.JPG
    460,9 KB · Aufrufe: 753
  • IMG_1712.JPG
    IMG_1712.JPG
    470,3 KB · Aufrufe: 747
Hat man eigentlich eine Chance dort SSID und Passwort irgendwie auf einfachem Wege einzustellen?
 
Ich hab vor, dafür auf einer SD Karte einfach ein Textfile zu hinterlegen.
Alternativ könnte man auch im Flash ein File ablegen das man ändern kann.
Könnte man dann auch per Touchscreen realisieren.
 
Hallo Björn,

schau mal in meinen code auf GitHub. Ich nutze dazu die Library https://github.com/tzapu/WiFiManager
Beim ersten start, erstellt diese einen AP auf den Du dich dann verbinden kannst. Hier können dann SSID und Passwort über den Browser eingegeben werden.
Dieser werden dann im EEPROM gespeichert. Du kannst dann noch einen Knopf definieren der einen Reset durchführt.
Fest definieren oder mittels Textdatei halte ich für zu statisch.

Gruß,
Marco
 
Servus Marco,

wenn du willst, kannst du die calcT() noch etwas zusammenfassen:

Code:
// -----------------------------------------------------------------
// Temperaturen berechnen
float calcT(uint32_t r, uint32_t typ){

  float Rmess = 47;
  float a, b, c, Rn;

  switch (typ) {
  case 1: { // Maverik
    Rn = 1000; a = 0.003358; b = 0.0002242; c = 0.00000261;
    break; }
  case 2: { // Fantast-Neu
    Rn = 220; a = 0.00334519; b = 0.000243825; c = 0.00000261726;
    break; }
  case 3: { // NTC 100K6A1B (lila Kopf)
    Rn = 100; a = 0.00335639; b = 0.000241116; c = 0.00000243362;
    break; }
  case 4: { // NTC 100K (braun/schwarz/gelb/gold)
    Rn = 100; a = 0.003354016; b = 0.0002460380; c = 0.00000340538;
    break; }
  default: { // NTC 5K3A1B (orange Kopf)
    Rn = 5; a = 0.0033555; b = 0.0002570; c = 0.00000243; }
  }
 
  float Rt = Rmess*((4096.0/(4096-r)) - 1);
  float v = log(Rt/Rn);
  float erg = (1/(a + b*v + c*v*v)) - 273;
  return (erg>-10)?erg:0x00;
}
 
WiFiManager kann ich auch empfehlen, damit habe ich auch schon mal was gemacht. Da ich aber eh die Daten per MQTT weiterschicke ist fuer mich die Homie-Bibliothek besser geeignet.

Ich habe Heute den ersten 'richtigen' Test mit meinem Bastelprojekt gemacht. In den Ansaetzen ganz gut, aber noch nicht das gelbe vom Ei: http://9247.de/s74q

In Tests bei Raumtemperatur waren die Werte von den beiden Hochtemperatur-Fuehlern zwar nicht exakt gleich, die Verlaeufe aber parallel zu denen der Fleisch-Fuehler. Draussen am Grill haben die dann ueberhaupt nichts brauchbares mehr geliefert. Statt zu steigen gingen die Temperaturen nach und nach auf 0 runter. Dem muss ich noch nachgehen.

Wenn alles fertig ist werde ich Euch auch dankend erwaehnen, ich habe mich hier ausgiebig inspirieren lassen. Danke dafuer!
 
Das sind K-Type Elemente, haengen wie beschrieben an jeweils einem MAX6675. Ich hatte das Ding mehrere Tage messen lassen. Die Temperaturen waren durchgehend etwa 5 Grad hoeher als bei den Einstichthermometern (die duerften Dir bekannt vorkommen, Danke noch mal!). Aber wenn es im Raum waermer wurde haben die auch entsprechend hoehere Temperaturen angezeigt. Im Grill sind die Werte gar nicht erst gestiegen, das war als ob da irgendwo das Vorzeichen vertauscht ist -- die waren erst auch auf Aussentemperatur und sind dann ziemlich schnell auf 0 Grad gefallen.

Ich hatte die Module mit den MAX6675 schon vor laengerer Zeit gekauft. Hab mich ehrlich gesagt nie damit beschaeftigt ob ich die Fuehler auch mit dem MCP3208 auslesen koennte... haette ich vielleicht mal machen sollen...
 
MAX6675 und der Übergang Thermoelementdraht->Kupfer müssen auf der gleichen Temperatur liegen, sonst funktioniert das nicht.
 
Du hast zwar fertige Module, das Problem ist aber die Art deines Anschlusses:

Screenshot_1.png


Du ziehst die Anschlüsse von den Modulen auf die Lochrasterplatine, wenn ich das richtig erkenne, und von dort an die Anschlussklemmen. Allein das sorgt für verschiedene Temperaturpotenziale. Außerdem solltest du die K-Type-Thermoelemente nicht über Klinkenbuchsen anschließen. Der saubere Weg ist, die Anschlussklemmen direkt auf die Modulplatinen löten und das Anschlusskabel vom K-Type-Thermoelement direkt dort einschrauben. Alles andere macht Probleme.

Hab mich ehrlich gesagt nie damit beschaeftigt ob ich die Fuehler auch mit dem MCP3208 auslesen koennte... haette ich vielleicht mal machen sollen...
Geht nicht. Weil es keine klassischen Fühler sondern Thermoelemente sind.
 

Anhänge

  • Screenshot_1.png
    Screenshot_1.png
    315,7 KB · Aufrufe: 582
Wenn die K-Type bei richtigem Anschluss dann mal sauber laufen, solltest du in deiner Software noch mit RunningMedian.h arbeiten. So kannst du dir den mittleren Messwert aus einer Reihe von Messungen (der MAX darf aber nicht schneller als 200ms abgefragt werden) bestimmen, so springt die gemessene Temperatur nicht ständig zwischen +-0,25°C.
 
Servus Marco,

wenn du willst, kannst du die calcT() noch etwas zusammenfassen:

Code:
// -----------------------------------------------------------------
// Temperaturen berechnen
float calcT(uint32_t r, uint32_t typ){

  float Rmess = 47;
  float a, b, c, Rn;

  switch (typ) {
  case 1: { // Maverik
    Rn = 1000; a = 0.003358; b = 0.0002242; c = 0.00000261;
    break; }
  case 2: { // Fantast-Neu
    Rn = 220; a = 0.00334519; b = 0.000243825; c = 0.00000261726;
    break; }
  case 3: { // NTC 100K6A1B (lila Kopf)
    Rn = 100; a = 0.00335639; b = 0.000241116; c = 0.00000243362;
    break; }
  case 4: { // NTC 100K (braun/schwarz/gelb/gold)
    Rn = 100; a = 0.003354016; b = 0.0002460380; c = 0.00000340538;
    break; }
  default: { // NTC 5K3A1B (orange Kopf)
    Rn = 5; a = 0.0033555; b = 0.0002570; c = 0.00000243; }
  }
 
  float Rt = Rmess*((4096.0/(4096-r)) - 1);
  float v = log(Rt/Rn);
  float erg = (1/(a + b*v + c*v*v)) - 273;
  return (erg>-10)?erg:0x00;
}

Guten Morgen,
habe gestern mal versucht, diese Methode mit einem Fantast ans Laufen zu bringen, irgendwie berechnet er mir da aber müll..
Ich denke ich habe da ein Fehler in den verwendeten Werten.

Der übergebene Wert "r", ist der rohe Wert aus dem ADC? Oder ist das der berechnete Widerstand aus diesem Wert?
Warum ist Rmess = 47 und nicht 47000?
Rn ist der Widerstandswert bei 25°C?
 
Der übergebene Wert "r", ist der rohe Wert aus dem ADC?
Richtig. Wenn du die MCP3208 Lib verwendest (siehe Git-Repository von GrillMarco) ist der Aufruf: calcT(adc.analogRead(i), 2);
wobei i der entsprechende Kanal am MCP ist. Oder du schaust mal in Post 97 hier im Thread, da habe ich meine "readCH" zum Auslesen des MCP gepostet. So spart man sich die Lib. Die Lib von GrillMarco habe ich selbst noch nicht getestet.

Warum ist Rmess = 47 und nicht 47000?
Weil Rn auch in kOhm angegeben ist und sich das "k" somit rausrechnet: siehe: float v = log(Rt/Rn);
 
Danke.
Das macht natürlich Sinn, dass sich das "k" rausrechnet.
Die Lib die Grillmarco verwendet ist super, die tut soweit was sie soll, nimmt einem halt arbeit ab.
Ich habe mir jetzt gerade mal die Mühe gemacht, die Methode händisch durchzurechnen.

Wenn ich die Werte aus der Methode nehme und als "r" den Wert 694 (Laut Tabelle aus dem WLAN Thermo Git der Wert für 25°C am Fantast neu) komme ich auf ein Ergebnis von 58,31635.
Das kann ja irgendwie nicht stimmen, oder?
Ich find aber nicht raus, was ich falsch mache.
Oder sind schlicht die Werte aus der Tabelle falsch?
Hab leider die Hardware gerade nicht parad um nochmal mit wirklichen Messwerten du arbeiten...
 
Zurück
Oben Unten