Node-red a data z ADC

Project owner: Cyberian
Interested:
Related:
License: Uveďte původ-Zachovejte licenci CC BY-SA

Vzhledem k netušené náročnosti to trochu potrvá. Nicméně tvrdě na tom dělám ;-)

Začneme instalací Mosquitto brokera1. Jako systém jsem si zvolil Debian 9, na který jsem zvyklý. Příkazy jsou tedy uzpůsobeny pro něj:

Provedeme preventivní update a upgrade správce balíčků, následnou instalaci Mosquitto a Mosquiito klienta pro možnost posílat nebo odebírat zprávy z MQTT brokera:

apt-get update
apt-get upgrade
apt-get install mosquitto-dev mosquitto-clients

Před vlastní instalací node-red, je nutno nainstalovat nodejs. Zvolil jsem aktuální dostupnou verzi nodejs a jsem připraven čelit případným bugům:

curl -sL https://deb.nodesource.com/setup_12.x | bash - apt-get install -y nodejs Nainstalujeme g++ a zkusíme instalaci pomocí npm instalátoru, který je součástí nodejs: apt-get install g++ npm install -g –unsafe-perm node-red Prozatím je vysledek takový, že původně byl problém s absencí g++ a nyní je pro změnu problém v kódu, který se instalátor pokouší kompilovat modul nan. Viz https://github.com/nodejs/nan/issues/849

Přejdeme na verzi 11 než komunita verzi 12 opraví.Taktéž nainstalujeme node-red dashboard

apt get-install g++
curl -sL https://deb.nodesource.com/setup_11.x | bash -
apt-get install -y nodejs
npm install -g --unsafe-perm node-red
npm install node-red-dashboard

Nyní máme připravený node-red s dashboardem. Následovat budou drobné úpravy obvodu, vynechání displeje, připájení na pájitelné pole a přimontování do krabice. Pak se vrhneme na návrh v node-redu.

Materiál:

  • ip66 waterproof case
  • LVDO stabilizátor na 3,3V - LF33CV
  • elektrolytický kapacitor 2.2uF, 200V
  • trimr 20K
  • jumper
  • svorkovnice
  • pájitelné pole

Úpravy kódu:

  • přidání kódu pro zasílání zpráv s napětím pomocí mqtt protokolu na mqtt brokera
  • odebrání kódu pro OLED displej
  • deep sleep mód

// ADC_MODE(ADC_VCC);
#include <ESP8266WiFi.h>
#include <Wire.h>
#include <PubSubClient.h>
const char* mqtt_server = "192.168.xxx.xxx";

WiFiClient espClient;
PubSubClient client(espClient);
char msg[6];

void setup_wifi(){
 WiFi.begin("labka", "pwd"); 
  Serial.print(F("Verze jádra: ")); Serial.println(ESP.getCoreVersion());
  Serial.print("Connecting");
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(1000);
    Serial.print(WiFi.status());
  }
  Serial.println();
  Serial.print("Connected, IP address: ");
  Serial.println(WiFi.localIP());
  WiFi.printDiag(Serial);  
}

void reconnect() {
  // Loop until we're reconnected
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    // Create a random client ID
    String clientId = "ESP8266Client-";
    clientId += String(random(0xffff), HEX);
    // Attempt to connect
    if (client.connect(clientId.c_str())) {
      Serial.println("connected");
      // Once connected, publish an announcement...
      client.publish("AkkaReconnect", "Reconnect");
      // ... and resubscribe
      client.subscribe("inTopic");
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying
      delay(5000);
    }
  }
}

void setup() 
{
  pinMode(BUILTIN_LED, OUTPUT);     // pro MQTT PubSub: Initialize the BUILTIN_LED pin as an output
  digitalWrite(BUILTIN_LED, LOW);
  Serial.begin(9600);
  Wire.begin();
  setup_wifi();

  //MQTT
  client.setServer(mqtt_server, 1883);
  //client.setCallback(callback);
}

void loop() 
{

  int adcread=(analogRead(0));
  float napeti= (float)(map(adcread, 0, 1024, 0, 14490))/1000;
  Serial.print(F("ADC A0: "));Serial.print(adcread);Serial.print(F(" DEC, "));
  Serial.print(F("Napětí: "));Serial.print(napeti);Serial.println(F(" V"));

  digitalWrite(BUILTIN_LED, LOW);
  delay(20);
  digitalWrite(BUILTIN_LED, HIGH);
  
  //MQTT pošle zprávu
    if (!client.connected()) {
    reconnect();
  }
  client.loop();
  //snprintf(str, sizeof(str), "%.2f", f);
  snprintf(msg, 6, "%.2f", napeti);
  client.publish("AkkaMonitor", msg);
  delay(2000);
  }
 

  • project/esp8266_adc_grafana.txt
  • Last modified: 2019/06/10 06:38
  • by cyberian