ESP32 CAM watchdog

Uživatelský avatar
visk52
Příspěvky: 146
Registrován: 29 led 2020, 15:51
Reputation: 0

Re: ESP32 CAM watchdog

Příspěvek od visk52 » 24 bře 2022, 11:21

martinius96 píše:
20 bře 2022, 21:30
visk52 píše:
20 bře 2022, 10:43
18.37%=Temp,3.52%=Volt,-53%=dB pochopitelně jde mi o to to síla signálu wifi RSSI() -53% to bych musel nějak připsat díky
Posielaš to PHP scriptu v takomto formáte?
To je dosť nevhodné, keďže percentá sa používajú pri encodingu špeciálnych znakov, ktoré môže payload nadobúdať, najmä pri texte, diakritike v znakoch a podobne.

Taktiež položku dB so silou prijatého signálu (RSSI) zrejme nemáš správne pomenovanú.
Keďže RSSI je vyjadrené v jednotkách dBm, ktorá nadobúda hodnoty 0 až -110.
0 znamená výborný signál, -110 minimálny, resp. žiadny signál.
Teda -53 dBm neznamená -53% signálu, ale v prepočte to bude cca 51% sila signálu, ak by bol rozsah väčší, videl by si tam vyššiu chybu.
Ak by si to chcel z toho rozsahu vyjadriť v percentách môžeš nato využiť napríklad funkciu map() v Arduino IDE.

Kód: Vybrat vše

void setup()
{
	int myRSSI = -35; 
	int val = map(myRSSI, -110, 0, 0, 100);
	Serial.println(val);
}

Kód: Vybrat vše

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <DNSServer.h>
#include <WiFiManager.h>          //https://github.com/tzapu/WiFiManager
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
#define TRIGGER_PIN 0                          // tlacitko na GPIO0
const int httpPort = 80;
const char* host = "api.thingspeak.com";  
const char * hoste = "******************";// Informace pro připojení k thingspeak.com
const char* APIkey   = "*************";
const unsigned long SamplingTime = 60000;//3600000;  //60000 *3600;                 // Hodina perioda odesilani [ms]
unsigned long TimeStamp;
float temp;
const char* po=" C,Vcc ";
OneWire oneWire(ONE_WIRE_BUS);                 // Inicializace DS18B20 na pinu GPIO2
DallasTemperature DS18B20(&oneWire);
//---------------------------------------------------------------------------------
ADC_MODE(ADC_VCC);
void setup() {
  Serial.begin(115200);                        // Otevření komunikace po sériové lince
  pinMode(TRIGGER_PIN, INPUT);                 // tlacitko na GPIO0
  WiFi.begin();                                // Inicializace připojení k síti
  WiFi.mode(WIFI_STA);
  WiFi.setAutoReconnect(true);
  // deset sekund se pokousi o pripojeni k WiFi
  Serial.println("\r\nWaiting for wifi");
  for (uint8_t i = 0; (WiFi.status() != WL_CONNECTED) && (i < 10); i++) {
    delay(1000);
    Serial.print(".");
  }
  // Potvrzení připojení k síti
  if (WiFi.status() == WL_CONNECTED) {
    Serial.println("\r\nWiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
    Serial.println();
  }
  else {
    Serial.println("\r\nWiFi not connected!\r\nPress the GPIO button to start the WifiManager");
  }
  DS18B20.requestTemperatures();               // Prvni vzorek
  temp = DS18B20.getTempCByIndex(0);
  TimeStamp = millis();
}
//---------------------------------------------------------------------------------
void loop() {
  // je volan WifiManager?
  if ( digitalRead(TRIGGER_PIN) == LOW ) {
    WiFiManager wifiManager;
    wifiManager.startConfigPortal("OnDemandAP");
    Serial.println("connected...yeey :)");
  }
  // Měření a odesílání teploty probíhá v intervalu SamplingTime,
  // ale pouze pokud existuje pripojeni k WiFi
  if ((millis() > SamplingTime) && ((millis() - SamplingTime) > TimeStamp) && (WiFi.status() == WL_CONNECTED)) {
    TimeStamp = millis();
    DS18B20.requestTemperatures();               // Získání informace o teplotě teploty
    temp = DS18B20.getTempCByIndex(0);
    Serial.print("Temperature: ");
    Serial.println(temp);
    char charVal[12];
    // Konverze vyčtené teploty do stringu
    // (hodnota, počet míst, počet desetinných míst,
    // umístění stringu)
    dtostrf(temp, 8, 2, charVal);
    Serial.print("connecting to ");
    Serial.println(host);
    WiFiClient client;
    if (!client.connect(host, httpPort)) {
      Serial.println("connection failed");
      return;
    }
    // Vytvoření URL pro odeslání informace o teplotě
    String url = "/update?key=";
    url += APIkey;
    url += "&field1=";
    url += charVal;
    Serial.print("Requesting URL: ");
    Serial.println(url);
    // Odeslání požadavku na server
    client.print(String("GET ") + url + " HTTP/1.1\r\n" +
                 "Host: " + host + "\r\n" +
                 "Connection: close\r\n\r\n");
               
    Serial.println();
    while (client.available()) {
      String line = client.readStringUntil('\r');
      Serial.print(line);                        // tisk informací přijatých ze serveru
     delay(10);  }
    Serial.println();
    Serial.println("connection completed");      // potvrzení ukončení odesílání
    Serial.println();
    Serial.println(); 
    Serial.println(WiFi.RSSI());
    
    float getVcc = ESP.getVcc()/1000.00;
    //*************************************
     if (client.connect(hoste, 80)) {
                 dtostrf(temp, 4,2, charVal); //úprava 4.1.2021
                 String username = charVal;
                 //username += po;
                 username += getVcc;
                 username += WiFi.RSSI();
                 Serial.println(username);
                 
                 Serial.println(getVcc);
                 String urli = "/som*********.php?use***********=" + u***********;
                 //**
                 Serial.println(urli);
                 // uprava 10.1.2021
    client.print(String("GET ") + urli + " HTTP/1.0\r\n" + "Host: " + hoste + "\r\n" + "Connection: close\r\n\r\n");
    delay(1000);
    while (client.connected()) {
      String line = client.readStringUntil('\n');
      Serial.println(line); //VYPIS HTTP HLAVICKY
      if (line == "\r") {
        break;
      }
                 //***********************************
    
    
    Serial.println();
    Serial.println("posilani na druhe misto");      // potvrzení ukončení odesílání
    Serial.println();
    Serial.println();
  }
     }}}
Tímto provádím php skript který zapíše do souboru teplotu, napětí na desce a getVcc a sílu signálu wifi WiFi.RSSI() na mém webhostingu asi tak na vysvětlenou tomu skriptu, to je pochopitelně druhý projekt který je na desce ESP8266 -01.
Přemýšlím jestli neupravit ten projekt který posílá obrázky aby posílal i druhou hodnotu sílu signálu WiFi aby jsem věděl jestli není ten problém z kolísáním síly WiFi díky
Toto píši ve chvatu tak mi promiňte takový písemný projev :(

Uživatelský avatar
visk52
Příspěvky: 146
Registrován: 29 led 2020, 15:51
Reputation: 0

Re: ESP32 CAM watchdog

Příspěvek od visk52 » 25 bře 2022, 13:07

visk52 píše:
23 bře 2022, 12:44
Ještě mi napadlo jestli na tom pinu 10 nemusí být pull-up resistors který definuje logickou 1 nebo jestli se nedá zapojit vnitřně jestli není taková možnost? nemám čas studovat datasit té desky díky
kde mám dát na které místo ?díky

Kód: Vybrat vše

WiFi.reconnect();

Uživatelský avatar
kiRRow
Příspěvky: 1151
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: ESP32 CAM watchdog

Příspěvek od kiRRow » 25 bře 2022, 14:47

Tohle zkontroluje čas na akci, pak zkusí wifi, pokud nebude reconnectne - wifi to bude reconnectovat jen když nastane čas na akci a nebude wifi

Kód: Vybrat vše

if((millis() - TimeStamp) > SamplingTime){
	if(WiFi.status() == WL_CONNECTED)){
		TimeStamp=millis(); // tohle musí být až tady
		...
		...
		...
	} else {
		// není wifi - připoj se na wifi
		WiFi.reconnect();
		// možná nějaký delay
	}
}
Takhle to kdykoliv vypadne wifi bude zkoušet znovu - akce se bude provádět jen když bude wifi - toho je pak využito k tomu, že pokud se nepovede navázat wifi spojení a provést akci do 120s, je možno provést restart - nebo si uložit stavy proměnných atp abys veděl co se dělo poslední

Kód: Vybrat vše

if(WiFi.status() == WL_CONNECTED)){
	if((millis() - TimeStamp) > SamplingTime){
		TimeStamp=millis();
		...
		...
		...
	}
} else {
	// není wifi - připoj se na wifi
	WiFi.reconnect();
	// možná nějaký delay
	if((millis() - TimeStamp) > 120000){
		//reset celého systém
	}
}

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 13 hostů