Pomiar napiecia akumulatora na supla

dogu18
Posts: 259
Joined: Thu Oct 11, 2018 8:35 pm

Post

Wielkie dzięki 🙂 jak znajdę czas to dopisze to i zobaczę czy działa 🙂🙂🙂
Pozdrawiam
Grzegorz Labudda
dogu18
Posts: 259
Joined: Thu Oct 11, 2018 8:35 pm

Post

Dodałem to co napisaliście do softu @Yepestis NodeMCU v3 + BME280 wprawdzie pokazał mi się kanał kolejny ale nie mam na nim odczytu vcc:/

co może być nie tak

Code: Select all

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <EEPROM.h>



#define SUPLADEVICE_CPP
#include <SuplaDevice.h>

#include <DoubleResetDetector.h> //Bilioteka by Stephen Denne

#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
ADC_MODE(ADC_VCC);


#include <ESP8266WebServer.h>
#include <ESP8266HTTPUpdateServer.h>
extern "C" {
#include "user_interface.h"
}

#define EEPROM_SIZE           4096

#define EEPROM_SSID           32
#define EEPROM_PASSWORD       64
#define EEPROM_DHCPEN         190
#define EEPROM_ADRESS         4000
#define EEPROM_MASK           4015
#define EEPROM_GATEWAY        4030
#define EEPROM_SUPLASRV       300
#define EEPROM_SUPLALOCID     350
#define EEPROM_SUPLALOCPASS   360
#define EEPROM_HIGHTCAL       200

#define MAX_SSID           32
#define MAX_PASSWORD       32
#define MAX_DHCPEN         8
#define MAX_ADRESS         16
#define MAX_MASK           16
#define MAX_GATEWAY        16
#define MAX_SUPLASRV       32
#define MAX_SUPLALOCID     8
#define MAX_SUPLALOCPASS   8
#define MAX_HIGHTCAL       8

#define DRD_TIMEOUT 2// Number of seconds after reset during which a subseqent reset will be considered a double reset.
#define DRD_ADDRESS 0 // RTC Memory Address for the DoubleResetDetector to use
DoubleResetDetector drd(DRD_TIMEOUT, DRD_ADDRESS);

String config_Wifi_name = "SUPLA-BME280";
//const char* config_Wifi_pass = "12345678";
const char* update_username = "admin";
const char* update_password = "supla";

const char* suplaDeviceName = "SUPLA-BME280";
const String SuplaDevice_setName = "SUPLA - BME280 by Silar v0.3.0.1";


char Supla_server[40];
char Location_id[15];
char Location_Pass[20];
int aktualny_status;
String status_msg = "";
String old_status_msg = "";
int empty_start = 0;;

String esid = "";
String epass = "";

uint8_t mac[WL_MAC_ADDR_LENGTH];


word Licznik_iteracji = 0;

WiFiClient client;
const char* host = "supla";
const char* update_path = "/firmware";
String My_guid = "";
String My_mac = "";
String custom_Supla_server = "";
String Location_id_string = "";
String custom_Location_Pass = "";
bool DHCP = 0;
bool Nowy_pomiar = 0;

ESP8266WebServer httpServer(80);

String content;
String zmienna = "";

int zmienna_int = 0;

ESP8266HTTPUpdateServer httpUpdater;

byte Modul_tryb_konfiguracji = 0;

double last_temperature = -99.99;
double last_humidity = -99.99;
double last_pressure = -99.99;


//*********************************************************************************************************

float voMeasured = 0;
float calcVoltage = 0;
float dustDensity = 0;
const float alfa = 0.9;      //default 0.9

Adafruit_BME280 bme;         //I2C

//*********************************************************************************************************

void setup() {
  EEPROM.begin(EEPROM_SIZE);
  Serial.begin(115200);
  delay(100);
  Serial.print(" ");
  Serial.println(" ");
  Serial.print(" ");
  Serial.println(" ");
  Serial.print(" ");

  if (Odczytaj_zakres_eeprom(EEPROM_SSID, MAX_SSID)[0] == char(0xFF)) {
    Serial.println(" ");
    Serial.print("Brak skonfigurowanej sieci. Uruchamiam tryb konfiguracji");
    Serial.println(" ");
    //Serial.println(zmienna);
    empty_start = 1;
    Tryb_konfiguracji();
  }

  if (drd.detectDoubleReset()) {
    //drd.stop();
    Tryb_konfiguracji();
  }

  delay(2000);
  drd.stop();

  Pokaz_zawartosc_eeprom();

  Odczytaj_parametry_IP();

  if (WiFi.status() != WL_CONNECTED) {
    WiFi_up();
  }

  WiFi.hostname(config_Wifi_name);
  WiFi.softAPdisconnect(true); // wyłączenie rozgłaszania sieci ESP

  // Inicjalizacja BME280
  Wire.begin(); //(1,3);                           // GPIO1 - SDA GPIO3 - SCL domyślnie 5, 4

  if (!bme.begin()) {
    Serial.println("Nie znaleleziono czujnika BME280, sprawdz poprawność podłączenia i okablowanie!");
    while (1);
  }

  WiFi.macAddress(mac);

  char GUID[SUPLA_GUID_SIZE] = {0x20, 0x18, 0x10, 0x30,
                                mac[WL_MAC_ADDR_LENGTH - 6],
                                mac[WL_MAC_ADDR_LENGTH - 5],
                                mac[WL_MAC_ADDR_LENGTH - 4],
                                mac[WL_MAC_ADDR_LENGTH - 3],
                                mac[WL_MAC_ADDR_LENGTH - 2],
                                mac[WL_MAC_ADDR_LENGTH - 1],
                                0x04, 0x12, 0x34, 0x56, 0x78, 0x91
                               };

  My_guid = "20181227-" + String(mac[WL_MAC_ADDR_LENGTH - 6], HEX) + String(mac[WL_MAC_ADDR_LENGTH - 5], HEX) + "-" + String(mac[WL_MAC_ADDR_LENGTH - 4], HEX) + String(mac[WL_MAC_ADDR_LENGTH - 3], HEX) + "-" + String(mac[WL_MAC_ADDR_LENGTH - 2], HEX) + String(mac[WL_MAC_ADDR_LENGTH - 1], HEX) + "-041234567890";

  if (mac[WL_MAC_ADDR_LENGTH - 6] <= 15) {
    My_mac = "0" + String(mac[WL_MAC_ADDR_LENGTH - 6], HEX) + ":";
  } else {
    My_mac = String(mac[WL_MAC_ADDR_LENGTH - 6], HEX) + ":";
  }
  if (mac[WL_MAC_ADDR_LENGTH - 5] <= 15) {
    My_mac += "0" + String(mac[WL_MAC_ADDR_LENGTH - 5], HEX) + ":";
  } else {
    My_mac += String(mac[WL_MAC_ADDR_LENGTH - 5], HEX) + ":";
  }
  if (mac[WL_MAC_ADDR_LENGTH - 4] <= 15) {
    My_mac += "0" + String(mac[WL_MAC_ADDR_LENGTH - 4], HEX) + ":";
  } else {
    My_mac += String(mac[WL_MAC_ADDR_LENGTH - 4], HEX) + ":";
  }
  if (mac[WL_MAC_ADDR_LENGTH - 3] <= 15) {
    My_mac += "0" + String(mac[WL_MAC_ADDR_LENGTH - 3], HEX) + ":";
  } else {
    My_mac += String(mac[WL_MAC_ADDR_LENGTH - 3], HEX) + ":";
  }
  if (mac[WL_MAC_ADDR_LENGTH - 2] <= 15) {
    My_mac += "0" + String(mac[WL_MAC_ADDR_LENGTH - 2], HEX) + ":";
  } else {
    My_mac += String(mac[WL_MAC_ADDR_LENGTH - 2], HEX) + ":";
  }
  if (mac[WL_MAC_ADDR_LENGTH - 1] <= 15) {
    My_mac += "0" + String(mac[WL_MAC_ADDR_LENGTH - 1], HEX);
  } else {
    My_mac += String(mac[WL_MAC_ADDR_LENGTH - 1], HEX);
  }

  //Add Supla channels
  SuplaDevice.addPressureSensor();    // channel 0 pressure from BME280 (kPa)
  SuplaDevice.addDS18B20Thermometer();    // chaneel 1 Wifi RSSI
  SuplaDevice.addDHT22();                 // channel 2 temperature & humidity from BME280
  SuplaDevice.addDS18B20Thermometer(); // zasilanie
  SuplaDevice.setPressureCallback(&get_pressure);
  SuplaDevice.setTemperatureHumidityCallback(&get_temperature_and_humidity);
  SuplaDevice.setStatusFuncImpl(&status_func);

  Read_auth_param();
  int Location_id = Location_id_string.toInt();

  if (custom_Supla_server != "") {
    strcpy(Supla_server, custom_Supla_server.c_str());
    strcpy(Location_Pass, custom_Location_Pass.c_str());

    SuplaDevice.setName(suplaDeviceName);
    SuplaDevice.begin(GUID,              // Global Unique Identifier
                      mac,               // Ethernet MAC address
                      Supla_server,      // SUPLA server address
                      Location_id,       // Location ID
                      Location_Pass);    // Location Password
  }

  Serial.println();
  Serial.println("Uruchamianie serwera aktualizacji...");
  WiFi.mode(WIFI_STA);

  while (WiFi.waitForConnectResult() != WL_CONNECTED) {
    Serial.println("Brak WiFi.");
  }

  createWebServer();

  httpUpdater.setup(&httpServer, update_path, update_username, update_password);
  httpServer.begin();
}

//*********************************************************************************************************

void loop() {

  delay(5);

  if (WiFi.status() != WL_CONNECTED) {
    WiFi_up();
  }

  SuplaDevice.iterate();
  SuplaDevice.setPressureCallback(&get_pressure);
  SuplaDevice.setTemperatureHumidityCallback(&get_temperature_and_humidity);

  ++Licznik_iteracji;

  if (Nowy_pomiar == 1) {
    SuplaDevice.iterate();
    Licznik_iteracji = 0;
    Nowy_pomiar = 0;
  }

  if (Licznik_iteracji == 100) {
    Licznik_iteracji = 0;
    SuplaDevice.iterate();

    switch (aktualny_status) {
      case 2:  status_msg = "ALREADY INITIALIZED";      break;
      case 3:  status_msg = "CB NOT ASSIGNED";          break;
      case 4:  status_msg = "INVALID GUID";             break;
      case 5:  status_msg = "UNKNOWN SERVER_ADDRESS";   break;
      case 6:  status_msg = "UNKNOWN LOCATION_ID";      break;
      case 7:  status_msg = "INITIALIZED";              break;
      case 8:  status_msg = "CHANNEL LIMIT EXCEEDED";   break;
      case 9:  status_msg = "DISCONNECTED";             break;
      case 10: status_msg = "REGISTER IN PROGRESS";     break;
      case 11: status_msg = "ITERATE FAIL";             break;
      case 12: status_msg = "PROTOCOL VERSION ERROR";   break;
      case 13: status_msg = "BAD CREDENTIALS";          break;
      case 14: status_msg = "TEMPORARILY UNAVAILABLE";  break;
      case 15: status_msg = "LOCATION CONFLICT";        break;
      case 16: status_msg = "CHANNEL CONFLICT";         break;
      case 17: status_msg = "REGISTERED AND READY";     break;
      case 18: status_msg = "DEVICE IS DISABLED ";      break;
      case 19: status_msg = "LOCATION IS DISABLED";     break;
      case 20: status_msg = "DEVICE LIMIT EXCEEDED";    break;
    }

    if (old_status_msg != status_msg) {
      Serial.println(status_msg);
      Serial.println("");
      old_status_msg = status_msg;
    }
  }

  if (Licznik_iteracji == 0 or Licznik_iteracji == 20 or Licznik_iteracji == 40 or Licznik_iteracji == 60 or Licznik_iteracji == 80) {
    httpServer.handleClient();
  }
}

//*********************************************************************************************************

// Odczyt z czujnika BME280 temperatury i wilgotności
void get_temperature_and_humidity (int channelNumber, double *temp, double *humidity) {

  // wygładzenie temperatury nie będzie gwałtownych skoków
  static double usrednionaWartoscT = bme.readTemperature();
  usrednionaWartoscT = (alfa * usrednionaWartoscT) + ((1 - alfa) * bme.readTemperature());

  *temp = usrednionaWartoscT; //- 0.5;  // - 0.5 korekta odczytu
  //*temp = bme.readTemperature() -0.5;   // bez uśredniania
  *humidity = bme.readHumidity();
  Serial.print("BME Temperatura: ");
  Serial.print(*temp);
  Serial.print("   Wilgotność : ");
  Serial.println(*humidity);
  Serial.print("   napiecie : ");
  Serial.println("ESP.getVcc");
  Serial.println("");


  last_humidity = *humidity; //GUI
  last_temperature = *temp; //GUI

  if ( isnan(*temp) || isnan(*humidity) ) {
    *temp = -275;
    *humidity = -1;
  }
}

//*********************************************************************************************************

// Odczyt z czujnika BME280 ciśnienie i siły sygnału Wifi z ESP
double get_pressure(int channelNumber, double last_val) {

  double t = -275;
  switch (channelNumber)
  {
    case 0:
      t = (bme.readPressure() + Odczytaj_zakres_eeprom(EEPROM_HIGHTCAL, MAX_HIGHTCAL).toFloat()) / 100.0F; // + 1450 korekta uwzględniająca wysokość na jakiej znajduje się czujnik co do poziomu morza
      Serial.print("BME Ciśnienie: ");          // podzielone przez 1000 a nie przez 100 gdyż temperatura w supli wyświetlana jest tylko do 1000st
      Serial.println(t);
      last_pressure = t; //GUI
      break;
    case 1:
      t = WiFi.RSSI();
      Serial.print("ESP RSSI : ");
      Serial.println(t);
      break;
      
      case 2:
      t = (ESP.getVcc()/1000.0);  //  - TU MASZ NAPIĘCIE ZASILANIA
                    break;
                   
 
  };
  return t;
}

//*********************************************************************************************************


 tu był opis strony konfiguracyjnej
 
 
Pozdrawiam
Grzegorz Labudda
User avatar
lesny8
Posts: 3132
Joined: Mon Dec 11, 2017 9:43 pm
Has thanked: 10 times
Been thanked: 9 times

Post

Nie jakoś biegły w Arduino IDE ale chyba kanały nie pokrywają Ci się z case-em w funkcji

Code: Select all

  //Add Supla channels
  SuplaDevice.addPressureSensor();    // channel 0 pressure from BME280 (kPa)
  SuplaDevice.addDS18B20Thermometer();    // chaneel 1 Wifi RSSI
  SuplaDevice.addDHT22();                 // channel 2 temperature & humidity from BME280
  SuplaDevice.addDS18B20Thermometer(); // zasilanie
zasilanie dodałeś na kanał 3, a tu masz w case, że 2

Code: Select all

// Odczyt z czujnika BME280 ciśnienie i siły sygnału Wifi z ESP
double get_pressure(int channelNumber, double last_val) {

  double t = -275;
  switch (channelNumber)
  {
    case 0:
      t = (bme.readPressure() + Odczytaj_zakres_eeprom(EEPROM_HIGHTCAL, MAX_HIGHTCAL).toFloat()) / 100.0F; // + 1450 korekta uwzględniająca wysokość na jakiej znajduje się czujnik co do poziomu morza
      Serial.print("BME Ciśnienie: ");          // podzielone przez 1000 a nie przez 100 gdyż temperatura w supli wyświetlana jest tylko do 1000st
      Serial.println(t);
      last_pressure = t; //GUI
      break;
    case 1:
      t = WiFi.RSSI();
      Serial.print("ESP RSSI : ");
      Serial.println(t);
      break;
      
      case 2:
      t = (ESP.getVcc()/1000.0);  //  - TU MASZ NAPIĘCIE ZASILANIA
                    break;
                   
 
  };
  return t;
}
SOP 2023 :heavy_check_mark:
SOP 2024 :heavy_check_mark:
Czekam na kolejne Supla Offline Party :upside_down_face:
🧩: 🔑cz->b ⛴️+ila
dogu18
Posts: 259
Joined: Thu Oct 11, 2018 8:35 pm

Post

Dzięki teraz działa. Zmieniłem case na 3 i zaskoczyło
Pozdrawiam
Grzegorz Labudda
User avatar
Elektryk Szczecin
Posts: 92
Joined: Fri Jan 03, 2020 11:14 pm

Post

Może jest binarka i warto by było zrobić pomiar napięcia i prądu DC może ktoś ma jakieś przemyślenia 😀

elmaya
Posts: 1485
Joined: Wed Jun 27, 2018 5:48 pm
Location: El Saucejo - Sevilla

Post

Elektryk Szczecin wrote: Wed Jan 22, 2020 10:57 am Może jest binarka i warto by było zrobić pomiar napięcia i prądu DC może ktoś ma jakieś przemyślenia 😀
viewtopic.php?f=9&t=5333
piomar2
Posts: 369
Joined: Fri Apr 26, 2019 5:32 pm
Location: Bukowice

Post

Kiedyś było o pomiarze aku.
viewtopic.php?f=6&t=5210
PioKar
Posts: 411
Joined: Thu May 03, 2018 5:56 am

Post

piomar2 wrote: Wed Jan 22, 2020 5:06 pm Kiedyś było o pomiarze aku.
viewtopic.php?f=6&t=5210
I to cały czas jest online.
Jakoś jesienią odczyty zanikły.
Ale u mnie duża bateria ładuje małą baterię która zasila stację pogodową i cały czas mam z niej odczyty.
https://www.ecowitt.net/home/index?id=3790
Więc czekam do wiosny i słońca.

Return to “Ogólna dyskusja”