Pomiar napiecia akumulatora na supla
-
dogu18
- Posts: 259
- Joined: Thu Oct 11, 2018 8:35 pm
Wielkie dzięki
jak znajdę czas to dopisze to i zobaczę czy działa 


Pozdrawiam
Grzegorz Labudda
Grzegorz Labudda
-
dogu18
- Posts: 259
- Joined: Thu Oct 11, 2018 8:35 pm
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
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
Grzegorz Labudda
Nie jakoś biegły w Arduino IDE ale chyba kanały nie pokrywają Ci się z case-em w funkcji
zasilanie dodałeś na kanał 3, a tu masz w case, że 2
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(); // zasilanieCode: 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 
SOP 2024
Czekam na kolejne Supla Offline Party
:
cz->b
+ila
SOP 2024
Czekam na kolejne Supla Offline Party
-
dogu18
- Posts: 259
- Joined: Thu Oct 11, 2018 8:35 pm
Dzięki teraz działa. Zmieniłem case na 3 i zaskoczyło
Pozdrawiam
Grzegorz Labudda
Grzegorz Labudda
-
Elektryk Szczecin
- Posts: 92
- Joined: Fri Jan 03, 2020 11:14 pm
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
viewtopic.php?f=9&t=5333Elektryk 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![]()
-
piomar2
- Posts: 369
- Joined: Fri Apr 26, 2019 5:32 pm
- Location: Bukowice
-
PioKar
- Posts: 411
- Joined: Thu May 03, 2018 5:56 am
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.
