Daten mit dem Octopus an Blynk verschicken

by

Ein weitere Möglichkeit, neben Thingsspeak, Daten zu verschicken und visuell sichtbar zu machen, ist Blynk. Wir brauchen dazu immer die Blynk App für das Smartphone (iOs, Android), dort müßen wir uns anmelden, mit einer E-Mail Adresse.

https://twitter.com/hosi1709/status/1310567907722702848?s=21

Blynk einrichten

Wir gehen in der App auf „new project“, by „choose device“ wählen wir „esp8266“. Wenn wir dann auf „create project“ drücken, bekommen wir den „Auth Token“ per E-Mail zugeschickt. Das ist ganz praktisch, denn so können wir ihn einfach per copy and paste in die Ardublocks Umgebung überführen.

In den Setup Bereich habe ich die WLAN Daten (Name und Passwort) eingetragen und den Auth token von Blynk (den unter API-Key). Beides sollte man im „Setup“ platzieren und nicht in der Schleife, weil der Octopus diese einmal laden sollte und dann ja im WLAN bleibt.

Über den „Pin“ im Blynk Block können wir unterschiedliche Werte in die App übermitteln. Wir setzen als Pin = 1 für den ersten Wert, etwa IAQ und dann Pin = 2, für den nächsten.

Noch ein Hinweis für diesen Sketch. Anstelle jedes mal den Sensorwert neu messen zu lassen, setze ich den Messwert als „Zahl Variable“ und verwende pro Durchgang (Schleife) immer diesen Wert. Dann muss der Sensor nicht immer neu messen und es geht auch schneller, bzw. es würde auch immer der Wert der angezeigt wird, auch seriell ausgegeben und weitergemeldet.

„Zahl Variable“ ist übrigens eine coole Sache. Damit kann man einmal eine Variable definieren und an zentraler Stelle ändern. Dazu sollte sie immer weit oben stehen (und als erstes gesetzt werden), das kann man auch etwa bei Wartezeit nutzten, anstelle eine feste Wartezeit einzugeben, die etwa ein Wert angezeigt werden soll, einfach eine „Zahl-Variable“ Wartezeit definieren und dann bei Bedarf zentral ändern.

Auf dem Octopus und im Ardublockly ist es also relativ einfach. In der App wird es ein wenig schwieriger.

In der App gehen wir auf „New Project“ und drücken lange auf die schwarze Fläche – um das rauszufinden habe ich ein wenig gebraucht – da werden uns gleich eine ganze Reihe von Anzeigemöglichkeiten angeboten und da kommt der nun der Pferdefuß in dieser App: man hat recht wenig „Akkupunkte“ und muss die ggf. hinzukaufen.

Da ich also sparsam bin, nehme ich das „Value Display. Das wird oben links eingefügt. Einmal drauf tatschen und findet man die Einstellungen. Also etwa einen Titel setzen, hier IAQ. Bei „input“ gehen wir auf „select pin“, drehen das Rächen auf „Virtual“ und den virtuellen Pin auf V1.

„Refresh Interval“ lasse ich bei „push“. Dann gibt es noch zwei Zahlen neben dem Pin: Null und eine Kurve nach 1023. Da sich IAQ irgendwo zwischen 0 und 200 bewegen kann, setze ich die einfach auf 200. Das ist hier bei einem Feld das Zahlen anzeigt nicht so wichtig. Aber es gibt auch Balken- oder Gebirgsgrafiken oder Tachometer. Da sollte man die Skala dann konfigurieren.

Mit dem Druck auf das Dreieck oben rechts bringt man die Anwendung zum laufen.

so kann eine fertige Übersicht der IAQ Werte mit Blynk aussehen.

Dokumentation von Blynk

Quellcode

Den Quellcode findet ihr hier:

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <bsec.h>
#include <Wire.h>
#include <Ticker.h>
String matrixausgabe_text  = " "; // Ausgabetext als globale Variable
volatile int matrixausgabe_index = 0;// aktuelle Position in Matrix
IPAddress myOwnIP; // ownIP for mDNS 
int IAQ = 0 ;
/* 
 Bosch BSEC Lib, https://github.com/BoschSensortec/BSEC-Arduino-library
 The BSEC software is only available for download or use after accepting the software license agreement.
 By using this library, you have agreed to the terms of the license agreement: 
 https://ae-bst.resource.bosch.com/media/_tech/media/bsec/2017-07-17_ClickThrough_License_Terms_Environmentalib_SW_CLEAN.pdf */
Bsec iaqSensor;     // Create an object of the class Bsec 
Ticker Bsec_Ticker; // schedule cyclic update via Ticker 
// ------------------------   Helper functions Bosch Bsec - Lib 
void checkIaqSensorStatus(void)
{ 
  String output; 
  if (iaqSensor.status != BSEC_OK) {
    if (iaqSensor.status < BSEC_OK) {
      output = "BSEC error code : " + String(iaqSensor.status);
      for (;;) {
        Serial.println(output);
        delay(500);
      } // Halt in case of failure 
    } 
    else {
      output = "BSEC warning code : " + String(iaqSensor.status);
      Serial.println(output);
    }
  }
  if (iaqSensor.bme680Status != BME680_OK) {
    if (iaqSensor.bme680Status < BME680_OK) {
      output = "BME680 error code : " + String(iaqSensor.bme680Status);
      for (;;){
        Serial.println(output);
        delay(500);
      }  // Halt in case of failure 
    } 
    else {
      output = "BME680 warning code : " + String(iaqSensor.bme680Status);
      Serial.println(output);
    }
  }
}
// Housekeeping: scheduled update using ticker-lib
void iaqSensor_Housekeeping(){  // get new data 
  iaqSensor.run();
}
void setup(){ // Einmalige Initialisierung
  Serial.begin(115200);
  Wire.begin(); // ---- Initialisiere den I2C-Bus 
  iaqSensor.begin(BME680_I2C_ADDR_PRIMARY, Wire);
  String output = "\nBSEC library version " + String(iaqSensor.version.major) + "." + String(iaqSensor.version.minor) + "." + String(iaqSensor.version.major_bugfix) + "." + String(iaqSensor.version.minor_bugfix);
  Serial.println(output);
  checkIaqSensorStatus();
  bsec_virtual_sensor_t sensorList[10] = {
    BSEC_OUTPUT_RAW_TEMPERATURE,
    BSEC_OUTPUT_RAW_PRESSURE,
    BSEC_OUTPUT_RAW_HUMIDITY,
    BSEC_OUTPUT_RAW_GAS,
    BSEC_OUTPUT_IAQ,
    BSEC_OUTPUT_STATIC_IAQ,
    BSEC_OUTPUT_CO2_EQUIVALENT,
    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT,
    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE,
    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY,
  };
  iaqSensor.updateSubscription(sensorList, 10, BSEC_SAMPLE_RATE_LP);
  checkIaqSensorStatus();  
  iaqSensor_Housekeeping();
  Bsec_Ticker.attach_ms(3000, iaqSensor_Housekeeping);
  Serial.println();
  //------------ WLAN initialisieren 
  WiFi.persistent(false);
  WiFi.mode(WIFI_STA);
  delay(100);
  Serial.print ("\nWLAN connect to:");
  Serial.print("BIG-RUCKUS");
  WiFi.begin("BIG-RUCKUS","prestige999%!");
  while (WiFi.status() != WL_CONNECTED) { // Warte bis Verbindung steht 
    delay(500); 
    Serial.print(".");
  };
  Serial.println ("\nconnected, meine IP:"+ WiFi.localIP().toString());
  matrixausgabe_text = " Meine IP:" + WiFi.localIP().toString();
  myOwnIP = WiFi.localIP();
  matrixausgabe_index=0;
  Blynk.config("SZ2mHs8Dk3poz6mbxC3BBeh4cgIH7DLb","blynk-cloud.com",80);// Downloads, docs, tutorials: http://www.blynk.cc
  int BlynkCon = 0;
  while (BlynkCon == 0) {
    Serial.print ("\nBlynk connect ... ");
    BlynkCon=Blynk.connect();
    if (BlynkCon == 0) {
      Serial.println("failed, try again");
      delay(1000);
    }
  }
  Serial.println("connected");
}
void loop() { // Kontinuierliche Wiederholung 
  Blynk.run();// Blynk Housekeeping
  IAQ = iaqSensor.iaq ;
  Serial.print(":"+String(String(IAQ)));
  Serial.println();
  Blynk.virtualWrite(1,IAQ);// Wert an Blynk-Server übermitteln
  Blynk.run();// Blynk Housekeeping
  delay( 5000 );
}

Weitere Octopus Basteleien:

Auf der Website von Umweltcampus Birkenfeld gibt es eine gute Übersicht zum Octopus allgemein, mit Anleitungen für unterschiedliche Betriebssysteme und die Programmblöcke. Sowie auch die Anleitung zur CO2 Ampel.

Schlagwörter: , , , , , , ,

Hinterlasse einen Kommentar

Diese Seite verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden..