Code
Der fertige Code, welcher die Daten verarbeitet und an ThingSpeak übermittelt. Im Code ist aber nicht der Benutzername und das Passwort für das Wlan. Außerdem fehlt der API Key für ThingSpeak und die dazugehörige Channel ID. Das müsste man im Nachhinein einfügen.
Zudem ist viel mit Bibliotheken gearbeitet worden, man sollte also vorher die Bibliotheken hinzufügen.
Zudem ist viel mit Bibliotheken gearbeitet worden, man sollte also vorher die Bibliotheken hinzufügen.
#include "HX711.h" // Bibliothek für den Verstärker, für den Gewichtssensor
#include <Arduino.h>
#include <WiFi.h> // Wifi Bibliothek
#include <esp_eap_client.h> //wpa2 Bibliothek für die Verbindung zu Enterprise Networks
#include "ThingSpeak.h" // ThingSpeak Bibliothek für die Verbindung zu ThingSpeak
#include <OneWire.h> // Bib für den Temp Sensor
#include <DallasTemperature.h> // Bib für den Temp Sensor
// Wlan Benutzername und Passwort
#define EAP_ANONYMOUS_IDENTITY "Benutzername"
#define EAP_IDENTITY "Benutzername" //gleicher Benutzername wie davor
#define EAP_PASSWORD "Passwort"
#define ONE_WIRE_BUS_1 5
#define ONE_WIRE_BUS_2 4
OneWire oneWire_in(ONE_WIRE_BUS_1);
OneWire oneWire_out(ONE_WIRE_BUS_2);
DallasTemperature sensor_inhouse(&oneWire_in);
DallasTemperature sensor_outhouse(&oneWire_out);
const char *ssid = "BBS2-ISERV"; // eduroam SSID , Wlan Name
const char *THINGSPEAK_API_WRITE_KEY = "..."; // API Key von ThingSpeak
unsigned long CHANNEL_ID = ... ; // ThingSpeak Channel ID
unsigned long CHANNEL_NUMBER = 1; //CHANNEL NUMMER HIER EINTRAGEN
unsigned long CHANNEL_NUMBER2 = 2; //CHANNEL NUMMER HIER EINTRAGEN
unsigned long CHANNEL_NUMBER3 = 3; //CHANNEL NUMMER HIER EINTRAGEN
HX711 scale;
WiFiClient client;
uint8_t dataPin = 25; //dataPin für den ESP32
uint8_t clockPin = 26; //clockPin für den ESP32
// Programm soll einmal durchlaufen werden
void setup()
{
Serial.begin(115200); //Ausgabe Baud
//mit dem Wlan connecten
Serial.println();
Serial.print(F("Connecting to network: "));
Serial.println(ssid);
WiFi.disconnect(true); // disconnecten des wifis um zum neuen wifi eine Verbindung herzustellen
WiFi.mode(WIFI_STA); // init wifi mode
esp_eap_client_set_identity((uint8_t *)EAP_ANONYMOUS_IDENTITY, strlen(EAP_ANONYMOUS_IDENTITY));
esp_eap_client_set_username((uint8_t *)EAP_IDENTITY, strlen(EAP_IDENTITY));
esp_eap_client_set_password((uint8_t *)EAP_PASSWORD, strlen(EAP_PASSWORD));
esp_wifi_sta_enterprise_enable();
WiFi.begin(ssid); // connect to wifi
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(F("."));
}
Serial.println("Wlan erfolgreich verbunden!");
configTzTime("CET-1CEST,M3.5.0,M10.5.0/3", "pool.ntp.org", "time.nis.gov");
ThingSpeak.begin(client); // ThingSpeak Setup, initialisiert
delay(2000);
// Start der Waagenkalibrierung
Serial.println(__FILE__);
Serial.print("HX711_LIB_VERSION: ");
Serial.println(HX711_LIB_VERSION);
Serial.println();
scale.begin(dataPin, clockPin);
Serial.print("UNITS: ");
Serial.println(scale.get_units(10));
Serial.println("\nStelle Sicher, dass die Waage leer ist und drücke Enter");
while(!Serial.available());
while(Serial.available()) Serial.read();
scale.tare();
Serial.print("UNITS: ");
Serial.println(scale.get_units(10));
Serial.println("\nLege 500 Gramm auf die Waage und drücke Enter um fortzufahren");
while(!Serial.available());
while(Serial.available()) Serial.read();
scale.calibrate_scale(500, 5);
Serial.print("UNITS: ");
Serial.println(scale.get_units(10));
Serial.println("\nDie Waage ist Kalibriert, drücke Enter um fortzufahren");
// Serial.println(scale.get_scale());
// Serial.println(scale.get_offset());
while(!Serial.available());
while(Serial.available()) Serial.read();
//Start für den TemperaturSensor
sensor_inhouse.begin();
sensor_outhouse.begin();
}
void loop()
{
//Ausgabe für Arduino IDE Druck Sensor
Serial.print("UNITS: ");
float wert= scale.get_units(10);
Serial.println(wert);
delay(2000);
//Temperatur Sensor
Serial.print("Temperaturabfrage...");
sensor_inhouse.requestTemperatures();
sensor_outhouse.requestTemperatures();
Serial.println("Fertig");
Serial.print("Innentemperatur: ");
float TempInnen = sensor_inhouse.getTempCByIndex(0);
Serial.println(TempInnen);
Serial.print("Außentemperatur: ");
float TempAussen = sensor_outhouse.getTempCByIndex(0);
Serial.println(TempAussen);
delay(2000);
ThingSpeak.setField(1, TempAussen); //Feld 1 in ThingSpeak wird auf Feld 1 zugewiesen
ThingSpeak.writeFields(CHANNEL_NUMBER, THINGSPEAK_API_WRITE_KEY); // Channel Nummer und API Key werden angegeben, sodass due Daten an Thingspeak gesendet werden
ThingSpeak.setField(3, TempInnen);// Feld 3 wird zugeordnet
ThingSpeak.writeFields(CHANNEL_NUMBER3, THINGSPEAK_API_WRITE_KEY);//Channel nummer wird zugeordnet und api key
ThingSpeak.setField(2, wert); //Feld 2 in Thingspeak wird auf Units zugewiesen
ThingSpeak.writeFields(CHANNEL_NUMBER2, THINGSPEAK_API_WRITE_KEY); //Channel Nummer und API key wird angegeben, sodass die Daten an Thingspeak gesendet werden
delay(20000); //lange Pause damit ThingSpeak die Daten akurat aufnehmen kann, für mehr Daten nicht mehr kostenlos
}
Zuletzt geändert: Donnerstag, 27. Februar 2025, 14:24