#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
}


Last modified: Thursday, 27 February 2025, 2:24 PM