6. Software

Blynk

Abbildung 1: Blynk Benutzeroberfläche

V0: Display für aktuell gemessene Temperatur

V1: Slider für die Einstellung der Temperatur

V3: Display für die eingestellte Temperatur

V4: Auswahlmöglichkeit für Temperaturprofile

V5: Button zum Wählen eines Profils

V6: Button zum Speichern einer Temperatur in einem Profil

Arduino

Vollständiger Code: https://github.com/Lynncholy/Smarter-Getraenkewaechter/tree/main/Quellcode

Um den Infrarotsensor benutzen zu können, müssen wir uns zuerst die “Adafruit MLX90614 Library” herunterladen.

Adafruit_MLX90614 mlx = Adafruit_MLX90614();

Diese Zeile erzeugt ein Objekt des Sensors, mit dem wir im weiteren Verlauf arbeiten.

char auth[] = "rF0gN-Zo20v2XaCYwyDCLaqGx6aMTDcx";
char ssid[] = "";  //Your SSID
char pass[] = ""; // your Wifi password

Die Variable auth speichert den Token von Blynk ab. Ansonsten müssen vom Nutzer noch die SSID und das WLAN-Passwort hier eingetragen werden, sodass eine Verbindung zu Blynk hergestellt werden kann.

Methoden, die nicht funktionieren…

int slidervalue = 0;
int teaProfile = 0;
int coffeeProfile = 0;
int otherDrinkProfile = 0;
int chooseProfilePressed = 0;
int saveProfilePressed = 0;
int profile = 0; //1, 2 or 3
int activeProfile = 0;

Hier sind die Variablen initialisiert, die wir für die Getränkprofile benötigen. Der “slidervalue” speichert den Wert vom Slider (V1) ab. In den Variablen teaProfile, coffeeProfile und otherDrinkProfile werden die Temperaturen gespeichert, die der Nutzer durch das Drücken von V6 auslöst. Dabei ist “activeProfile” das jeweilige aktive Profil von den 3 Auswahlmöglichkeiten. Die Variablen chooseProfilePressed und saveProfilePressed können nur die Werte 1 (also Button gedrückt) oder 0 (Button nicht gedrückt) annehmen.

BLYNK_WRITE(V1)
{
  double i = param.asDouble();
  slidervalue = i;
  profile = slidervalue;
  Blynk.virtualWrite(V3, profile);

  Serial.println(i);
}

Diese Methode übernimmt den Wert vom Slider (V1) und zeigt den Wert im Display V3 an.

BLYNK_WRITE(V5)
{
  int i = param.asInt();
  chooseProfilePressed = i;
  if ((chooseProfilePressed == 1) && (teaProfile == profile)) { //if press the choose button, value of teaprofile is displayed
          //profile = teaProfile;
          Blynk.virtualWrite(V3, teaProfile);
        }
}

Diese Methode bestätigt die Wahl eines Profils. Bei der Bestätigung wird der gespeicherte Temperatur-Wert im Display V3 angezeigt. Dies soll nur geschehen, wenn der Nutzer beispielsweise das Tee-Profil ausgewählt hat und den Button V5 drückt.

BLYNK_WRITE(V6)
{
  int i = param.asInt();
  saveProfilePressed = i;
  if ((saveProfilePressed == 1) && (profile == 1)) { //if you press the save button, value of slider is saved to chosen profile
    teaProfile = slidervalue;
  }
  if ((saveProfilePressed == 1) && (profile == 2)) { //if you press the save button, value of slider is saved to chosen profile
    coffeeProfile = slidervalue;
  }
  if ((saveProfilePressed == 1) && (profile == 3)) { //if you press the save button, value of slider is saved to chosen profile
    otherDrinkProfile = slidervalue;
  }
}

Mit dieser Methode kann man die Temperatur aus dem Slider in Profile speichern. Dafür wählt man ein Profil in V4 aus und drückt gleichzeitig den Button V6.

WiFiManager

WiFi.mode(WIFI_STA); // explicitly set mode, esp defaults to STA+AP
  // it is a good practice to make sure your code sets wifi mode how you want it.

  Serial.begin(115200);

  //WiFiManager, Local intialization
  WiFiManager wm;

  // reset settings - wipe stored credentials for testing
  // these are stored by the esp library
  //wm.resetSettings();

  bool res;
  res = wm.autoConnect(); // auto generated AP name from chipid
  // res = wm.autoConnect("AutoConnectAP"); // anonymous ap

  if (!res) {
    Serial.println("Failed to connect");
    // ESP.restart();
  }
  else {
    //if you get here you have connected to the WiFi
    Serial.println("connected...yeey :)");
  }

Das Objekt wm der Klasse WiFiManager wird hier erzeugt. Mit dem WiFiManager kann man sich alternativ über einen Access Point mit Blynk verbinden und müsste so nicht seine SSID und Passwort im Code hinterlegen.

Wichtigsten Methoden

Blynk.begin(auth, ssid, pass, "iot.informatik.uni-oldenburg.de", 8080);
Blynk.virtualWrite(V0, mlx.readObjectTempC()); //displays current temperature on V0 (Blynk)

Hier wird eine Verbindung zu Blynk hergestellt. mlx.readObjectTempC() liefert dabei die aktuelle Temperatur des Sensors und gibt den Wert an das Display V0 in Blynk weiter. So hat man die aktuelle Temperatur des Getränks immer im Überblick.

if (mlx.readObjectTempC() < slidervalue) // Notificate if current temperature is below set temperature
  {
    Blynk.notify("Achtung! Deine Wunschtemperatur wurde jetzt erreicht!");
  }

Nachdem in Blynk der Slider (V1) bewegt wird, zeigt das Display V3 den ausgewählten Wert an. Fällt die aktuelle Temperatur des Getränks nun unterhalb die eingestellte Temperatur, so wird die Benachrichtigung “Achtung! Deine Wunschtemperatur wurde jetzt erreicht!” gesendet, auch wenn die App nicht im Vordergrund läuft.

Leave a Reply

Your email address will not be published. Required fields are marked *

*