D1 Mini ESPnow Sensordaten MAX6675

Hallo zusammen,

ich bin neu im Forum und noch ziemlich neu in der Arduino-Welt.
Bisher habe ich viel gelesen (im Vergleich wahrscheinlich eher wenig) und bin jetzt nicht weiter gekommen.

Mein verlorenes Ziel: Lassen Sie einen D1 Mini mit dem Sensor MAX6675 eine Temperaturmessung durchführen und über ESPnow an drei andere D1 Mini senden. Diese sollen ein Servo mit den politischen Informationen steuern, um die Zuluft eines Rauchers zu regulieren.

Ich habe herum experimentiert und das Ganze über HTTP mit einem Client ausprobiert, aber es hat mit mehreren nicht funktioniert. Da ich gelesen habe, dass ESPNow eine Eins-zu-Viele-Kommunikation durchführen kann, arbeite ich daran.

Der folgende Fehler

‘Thermoelement’ benennt keinen Typ.

#include <ESP8266WiFi.h>
#include <espnow.h>
#include <Thermocouple.h>
#include <MAX6675_Thermocouple.h>

#define SCK_PIN 14
#define CS_PIN 15
#define SO_PIN 12

Thermocouple * Thermoelement;
Thermoelement = neues MAX6675_Thermocouple (SCK_PIN, CS_PIN, SO_PIN);
const double celsius = Thermoelement -> readCelsius ();

// MAC-Adresse
uint8_t BroadcastAddress1 [] = {0x50, 0x02, 0x91, 0x79, 0x3E, 0x99};

// Strukturbeispiel zum Senden von Daten
// Muss mit der Empfängerstruktur
übereinstimmen typedef struct test_struct {
 celsius;
} test_struct;

// Erstelle eine struct_message namens test, um zu sendende Variablen zu speichern   
test_struct temp;

unsigned long lastTime = 0; 
unsigned long timerDelay = 2000; // Zeitgeber für Messwerte senden

// Rückruf beim Senden von Daten
void OnDataSent (uint8_t * mac_addr, uint8_t sendStatus) {
char macStr [18];
Serial.print ("Paket an:");
snprintf (macStr, sizeof (macStr), "% 02x:% 02x:% 02x:% 02x:% 02x:% 02x",
      mac_addr [0], mac_addr [1], mac_addr [2], mac_addr [3], mac_addr [4], mac_addr [5]);
Serial.print (macStr);
Serial.print ("Send Status:");
if (sendStatus == 0) {
 Serial.println ("Liefererfolg");
 Serial.println (celsius);
}
else {
 Serial.println ("Lieferung fehlgeschlagen");

// Gerät als Wi-Fi Station
einstellen WiFi.mode (WIFI_STA);
WiFi.disconnect ();

// ESP-NOW
initialisieren if (esp_now_init ()! = 0) {
 Serial.println ("Fehler beim Initialisieren von ESP-NOW");
 Rückkehr;
}

esp_now_set_self_role (ESP_NOW_ROLE_CONTROLLER);

Esp_now_register_send_cb (OnDataSent);


registrieren esp_now_add_peer (BroadcastAddress1, ESP_NOW_ROLE_SLAVE, 1, NULL, 0);


void loop () {
if ((millis () - lastTime)> timerDelay) {
 // Zu sendende Werte festlegen

 // Nachricht über ESP-NOW senden
 esp_now_send (0, (uint8_t *) & celsius, sizeof (celsius));

 lastTime = millis ();
}
}

Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
Dann ist er auch auf mobilen Geräten besser lesbar.
Das kannst Du auch noch nachträglich ändern.

Außerdem entferne bitte die unnötigen Leerzeilen.

Gruß Tommy

Danke für den Tipp.
Ich hoffe das Passt so.

Hast du denn einen Tipp für mich?

Grüße
Nico

Ich bezweifle, dass der Code kompiliert:

Thermoelement = neues MAX6675_Thermocouple (SCK_PIN, CS_PIN, SO_PIN);
const double celsius = Thermoelement -> readCelsius ();

Gib uns mal Links zu den beiden Thermo*-Libs. Da sind doch bestimmt Beispiele drin.
Das solltest Du zuerst zum Laufen bringen, bevor Du Dich mit der Vernetzung beschäftigst.

Gruß Tommy

#include <Thermocouple.h>
#include <MAX6675_Thermocouple.h>

#define SCK_PIN 14
#define CS_PIN 15
#define SO_PIN 12

Thermocouple* thermocouple;

void setup() {
  Serial.begin(115200);
  
  thermocouple = new MAX6675_Thermocouple(SCK_PIN, CS_PIN, SO_PIN);
}

void loop() {
  
  const double celsius = thermocouple->readCelsius();


// Output of information
  Serial.print("Temperature: ");
  Serial.print(celsius);
  Serial.println(" C, ");

  delay(1000);
}

Mit diesem Code habe ich die Temp schon seriel auslesen können also funktionieren tut es grundsätzlich

Das ist ja auch nicht der Code vom Eröffnungsposting.

Gruß Tommy

nico123159:
Mit diesem Code habe ich die Temp schon seriel auslesen können also funktionieren tut es grundsätzlich

Schön wenn es funktioniert.

Dann verstehe ich dein Problem nicht.

Das Problem ist, dass ich es nicht in kombination mit dem ESPNow hinbekomme.
Der zweite Code den ich geschickt habe dient lediglich zum serielen auslesen an einem D1 mini und nicht zum übertragen an andere D1 mini´s...

nico123159:
Das Problem ist, dass ich es nicht in kombination mit dem ESPNow hinbekomme.
Der zweite Code den ich geschickt habe dient lediglich zum serielen auslesen an einem D1 mini und nicht zum übertragen an andere D1 mini´s...

Ok, da ich ESPNow bisher nicht genutzt habe, kann ich da auch nicht weiter helfen.
Da gibt es sicher hier noch Tipps.

Evtl. kannst du es ja auch mit UDP versuchen.

Kennst du dich damit aus?
Davon habe ich noch gar keine Ahnung

nico123159:
Kennst du dich damit aus?
Davon habe ich noch gar keine Ahnung

UDP ist in deinem ESP8266-packet, welches du in der IDE installiert hast, enthalten.
Schau mal in die Beispiele.
Für alle Fälle hier nochmal der Link zu Wifi.
Auch da sind alle Beispiele vorhanden.

Das ist eigentlich sehr simpel.
Einfach mal einrichten und bei Fragen....fragen.

Mein verlorenes Ziel: Lassen Sie einen D1 Mini mit dem Sensor MAX6675 eine Temperaturmessung durchführen und über ESPnow an drei andere D1 Mini senden. Diese sollen ein Servo mit den politischen Informationen steuern, um die Zuluft eines Rauchers zu regulieren.

Das ist unverständlich.
Wenn ESPnow ein Musskriterium ist, - darfst du das überhaupt ändern?
Welche Art von Aufgabe ist das?

hi entschuldige
also zukünftig soll ein D1 mini die Temperatur messen und dann sollen 3 D1 mini`s diese Temp enpfangen und ein servo entsprechend bedienen.

Es ist nicht an ESPNow gebunden. Nur ich kenne mich mit den WEBSocket servern nicht so aus dass ich mich darantraue. Und ein einfacher HTTP Request kann nur einen D1 mini gleichzeitig mit infos bedienen

Du hast die ganze Welt offen:

a) Die Messstelle kann den Wert zu den 3 Servo-Stellen pushen
b) Die Servo-Stellen können die Messstelle um den aktuellen Wert fragen
c) die Messstelle kann einen UDP Broadcast machen und die Servo-Stellen können das Empfangen

a) und b) gehen mit UDP, TCP, HTTP und ESP now
c) kenn ich nur mit UDP und ESP now

Insgesamt hast du 10 Varianten wie du das angehen kannst.
Eigentlich liegt es an dir, jene Variante auszusuchen wo du dich am sichersten fühlst.

nico123159:
hi entschuldige
also zukünftig soll ein D1 mini die Temperatur messen und dann sollen 3 D1 mini`s diese Temp enpfangen und ein servo entsprechend bedienen.

Ja, wo genau ist jetzt dein Problem.
Ich hatte dir doch schon den Vorschlag mit UDP gemacht, inkl. der Beschreibung.