ESP a odeslani dat jen pokud je pripojen USB

Odpovědět
Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

ESP a odeslani dat jen pokud je pripojen USB

Příspěvek od Kony » 10 lis 2021, 18:59

Ahoj, resim takovy divny případ...
Mám v arduinu :

Kód: Vybrat vše

#include <ESP8266WiFi.h>
#include "DHT.h"
#include <Adafruit_BMP085.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <ESP8266HTTPClient.h>

LiquidCrystal_I2C lcd(0x27, 20, 4);
#define pinDHT D12
#define typDHT22 DHT22   // DHT 22 (AM2302)
DHT mojeDHT(pinDHT, typDHT22);
const int myPeriodic = 300; // Time to sleep (in seconds):

Adafruit_BMP085 bmp;

// Nazev Wi-Fi site, do ktere se mam pripojit
const char* ssid = "Kony";
// Heslo Wi-Fi site, do ktere se mam pripojit
const char* password = "hesloWIFI";
char server[] = "192.168.1.249"; //URL adresa serveru
WiFiClient client;
HTTPClient http;
HTTPClient http2;
unsigned long cas = 0;
String cas_aktualni;
String datum;
float tep;
float vlh;
float tlak_aktualni;

void setup() {
 lcd.begin();
 lcd.backlight();
 lcd.clear();
  // komunikace přes sériovou linku rychlostí 9600 baud
  Serial.begin(9600); 
  // zapnutí komunikace s teploměrem DHT
  mojeDHT.begin();
    if (!bmp.begin()) {
 //   Serial.println("Could not find BMP180 or BMP085 sensor at 0x77");
    while (1) {}
  }
 Serial.println();
 Serial.print("Pripojuji k ");
 Serial.println(ssid);
 WiFi.begin(ssid, password);

 // Dokud nejsem pripojeny k Wi-Fi,zapisuj do seriove linky tecky progressbaru
 while (WiFi.status() != WL_CONNECTED) {
 delay(100);
 Serial.print(".");
 lcd.setCursor ( 0, 0 ); 
 lcd.print(".");
 }

 // Jsem pripojeny k Wi-Fi a mohu pokracovat
 Serial.println();
 Serial.println("WiFi pripojena!");
 lcd.setCursor ( 0, 1 ); 
 lcd.print("Wifi Pripojena!");

 // Napis IP adresu, kterou mikropocitac dostal
 Serial.print("Pouzij k pripojeni tuto adresu: ");
 Serial.print("http://");
 Serial.println(WiFi.localIP());
 lcd.setCursor ( 0, 2 ); 
 lcd.print(WiFi.localIP());
 delay(2000);
 lcd.clear();
    lcd.setCursor ( 1, 1 );  
    lcd.print("Teplota : ");
    lcd.setCursor ( 1,2 );  
    lcd.print("Vlhkost : ");
    lcd.setCursor ( 2,3 );  
    lcd.print("Tlak   :");
}

void teplota_vlhkost() {
  tep = mojeDHT.readTemperature();
  delay(2000);
  vlh = mojeDHT.readHumidity();
  // kontrola, jestli jsou načtené hodnoty čísla pomocí funkce isnan
  if (isnan(tep) || isnan(vlh)) {
    // při chybném čtení vypiš hlášku
    Serial.println("Chyba při čtení z DHT senzoru!");
    lcd.setCursor ( 11, 1 );  
    lcd.print("          ");
    lcd.setCursor ( 11, 1 ); 
    lcd.print("chyba");
    lcd.setCursor ( 11,2 ); 
    lcd.print("chyba");
    teplota_vlhkost();
  } else {
    // pokud jsou hodnoty v pořádku,
    // vypiš je po sériové lince
    Serial.print("Teplota: "); 
    Serial.print(tep,1);
    Serial.println(" °C");
    Serial.print("Vlhkost: "); 
    Serial.print(vlh,0);
    Serial.println(" %");
    lcd.setCursor ( 11, 1 );  
    lcd.print("          ");
    lcd.setCursor ( 11, 1 ); 
    lcd.print(tep,1);
    lcd.print(" ");
    lcd.print((char)223);
    lcd.print("C");
    lcd.setCursor ( 11,2 ); 
    lcd.print(vlh,0);
    lcd.print(F(" % "));
  }
}

void tlak() {
  tlak_aktualni = (bmp.readPressure()/100)+38;
  Serial.print("Tlak : ");
  Serial.print(tlak_aktualni,0);
  Serial.println(" hPa");
  lcd.setCursor ( 11,3 ); 
  lcd.print(tlak_aktualni,0);
  lcd.print(F(" hPa"));
}

void hodiny() {
  String URL = "http://192.168.1.250/doma/cas.php"; // Works with HTTP
  http.begin(client, URL); // Works with HTTP
  int httpCode = http.GET();
  if (httpCode > 0) {
    cas_aktualni = http.getString();
    Serial.print("Cas : ");
    Serial.println(cas_aktualni); // Print response
  } 
  http.end();
  lcd.setCursor ( 15,0 );  
  lcd.print(cas_aktualni);
}

void den_tydnu() {
 String URL = "http://192.168.1.250/doma/datum.php"; // Works with HTTP
  http.begin(client, URL); // Works with HTTP
  int httpCode = http.GET();
  if (httpCode > 0) {
    datum = http.getString();
    Serial.print("Datum : ");
    Serial.println(datum); // Print response
  } 
  http.end();
  lcd.setCursor ( 0,0 ); 
  lcd.print("             "); 
  lcd.setCursor ( 0,0 ); 
  lcd.print(datum);
}

void odesli() {
 String URLodesli = "http://192.168.1.249/doma/loger_venku.php?teplota=" + String(tep,1) + "&vlhkost=" + String(vlh,0) + "&tlak=" + String(tlak_aktualni,0); // Works with HTTP
  http2.begin(client, URLodesli); // Works with HTTP
    int httpResponseCode = http2.GET();
  http2.end();
  Serial.println("Odeslano");
}

void loop() {  
                //1 minuta
                teplota_vlhkost();  
                tlak();  
                hodiny();
                den_tydnu();
                Serial.println("_________________________");
                delay(51000);
                //2 minuta
                teplota_vlhkost();  
                tlak();  
                hodiny();
                den_tydnu();
                Serial.println("_________________________");
                delay(51000);
                //3 minuta
                teplota_vlhkost();  
                tlak();  
                hodiny();
                den_tydnu();
                Serial.println("_________________________");
                delay(51000);
                //4 minuta
                teplota_vlhkost();  
                tlak();  
                hodiny();
                den_tydnu();
                Serial.println("_________________________");
                delay(51000);
                //5 minuta
                teplota_vlhkost();  
                tlak();  
                hodiny();
                den_tydnu();
                Serial.println("_________________________");
                delay(51000);
                //6 minuta
                teplota_vlhkost();  
                tlak();  
                hodiny();
                den_tydnu();
                Serial.println("_________________________");
                delay(51000);
                //7 minuta
                teplota_vlhkost();  
                tlak();  
                hodiny();
                den_tydnu();
                Serial.println("_________________________");
                delay(51000);
                //8 minuta
                teplota_vlhkost();  
                tlak();  
                hodiny();
                den_tydnu();
                Serial.println("_________________________");
                delay(51000);
                //9 minuta
                teplota_vlhkost();  
                tlak();  
                hodiny();
                den_tydnu();
                Serial.println("_________________________");
                delay(51000);
                //10 minuta
                teplota_vlhkost();  
                tlak();  
                hodiny();
                den_tydnu();
                Serial.println("_________________________");
                delay(51000);
                odesli();
}
a z nějakýho záhadnýho důvodu projde modul "odesli" jen pokud mam pripojeny Arduino pres USB k PC... jakmile necham pouze napajeni a odpojeny USB tak to neodesle...

v PHP mam :

Kód: Vybrat vše

<?php
        $server = "localhost";
        $user = "kony";
        $pass = "hesloDB";
        $db = "Domacnost";

        $mysqli = mysqli_connect($server, $user, $pass, $db); //připojení k MySQL

        if($mysqli && isset($_GET['teplota']) && isset($_GET['vlhkost']) && isset($_GET['tlak'])){ //pokud GET obsahuje 'hodnota', pokračuj
                $teplota = sanitize($_GET['teplota']);
                $vlhkost = sanitize($_GET['vlhkost']);
                $tlak = sanitize($_GET['tlak']);
                $sql = "INSERT INTO dht_venku (teplota, vlhkost, tlak) VALUES (".$teplota.", ".$vlhkost.", ".$tlak.")"; //sestavení SQL
                $doSql = $mysqli->query($sql); //vykonání SQL

                if($doSql){ //test úspěchu
                        echo 'Zápis byl úspěšný';
                }
                else{
                        echo 'Něco se nepovedlo';
                }

        }
        else{
                echo "Neco je špatně";
        }

        function sanitize($input){ //ořízne řetězec
                $input = htmlspecialchars($input);
                $input = htmlentities($input);
                $input = strip_tags($input);
                $input = trim($input);
                return $input;
        }
?>

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: ESP a odeslani dat jen pokud je pripojen USB

Příspěvek od Kony » 10 lis 2021, 19:36

tak asi vyreseno :

Kód: Vybrat vše

  http2.begin(client, URLodesli); // Works with HTTP
    int httpResponseCode = http2.GET();
    delay(1000);
  http2.end();
  Serial.println("Odeslano");
doplnil jsem

Kód: Vybrat vše

delay(1000);

Tak nepomohlo ;((( odeslalo to pouze pri prvnim pusteni a pak uz nic

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: ESP a odeslani dat jen pokud je pripojen USB

Příspěvek od jankop » 10 lis 2021, 20:40

Nevím, jaký modul používáš. Ale už dříve jsem vypozoroval u ESP8266 jednu zvláštní věc, kterou jsem si nesčetněkrát ověřil. Když jsem měl převodník USB/RS232 připojen k ESP8266-12, tak po nahrání programu a odpojení USB se obvykle ESP8266 zasekl. Přišel jsem na to, že stačí odpojit signály Rx, Tx převodníku od obvodu ESP8266 a obvod bez problému fungoval jak měl. Ještě je také nezbytné si uvědomit, že ESP8266 potřebuje velmi dobré napájení, jinak se chová nevyzpytatelně.

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

Re: ESP a odeslani dat jen pokud je pripojen USB

Příspěvek od kiRRow » 10 lis 2021, 23:22

Tady by to asi chtělo schéma, hlavně zdroje napájení. Pokud ti to jede dobře z USB a bez něj ne, podezříval bych zdroj.

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: ESP a odeslani dat jen pokud je pripojen USB

Příspěvek od Kony » 11 lis 2021, 16:49

Takze napajenim to neni.. cely jsem to predelal na Wemos R1(UNO s wifi).

Bezelo mi to od vcera vecera a za celou noc mi to jednou zapsalo do DB....

Vzdy to zapise okamzite kdyz restartuju Wemos...

Bude tam asi nejaka jina bota....

Kdyz jsem ale dal funkci "odesli" jen do cisteho Wemos R1 a jen to "odesli" nic vic a vse ostatni jsem smazal, tak to zapisuje uuuuplne krasne...

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: ESP a odeslani dat jen pokud je pripojen USB

Příspěvek od Kony » 12 lis 2021, 15:23

Takze dalsi postup :

Zakomentoval jsem moduly

Kód: Vybrat vše

void hodiny() 
void den_tydnu()
a odesilani funguje uplne krasne....

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: ESP a odeslani dat jen pokud je pripojen USB

Příspěvek od Kony » 12 lis 2021, 16:50

tak vyreseno :

Kód: Vybrat vše

#include <ESP8266WiFi.h>
#include "DHT.h"
#include <Adafruit_BMP085.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <ESP8266HTTPClient.h>

LiquidCrystal_I2C lcd(0x27, 20, 4);
#define pinDHT D12
#define typDHT22 DHT22   // DHT 22 (AM2302)
DHT mojeDHT(pinDHT, typDHT22);
const int myPeriodic = 300; // Time to sleep (in seconds):

Adafruit_BMP085 bmp;

// Nazev Wi-Fi site, do ktere se mam pripojit
const char* ssid = "Kony";
// Heslo Wi-Fi site, do ktere se mam pripojit
const char* password = "HesloWIFI";
char server[] = "192.168.1.249"; //URL adresa serveru
WiFiClient client;
HTTPClient httphodiny;
HTTPClient httpdatum;
HTTPClient http2;
unsigned long cas = 0;
String cas_aktualni;
String datum;
String line;
float tep;
float vlh;
float tlak_aktualni;

void setup() {
 lcd.begin();
 lcd.backlight();
 lcd.clear();
  // komunikace přes sériovou linku rychlostí 9600 baud
  Serial.begin(9600); 
  // zapnutí komunikace s teploměrem DHT
  mojeDHT.begin();
    if (!bmp.begin()) {
 //   Serial.println("Could not find BMP180 or BMP085 sensor at 0x77");
    while (1) {}
  }
 Serial.println();
 Serial.print("Pripojuji k ");
 Serial.println(ssid);
 WiFi.begin(ssid, password);

 // Dokud nejsem pripojeny k Wi-Fi,zapisuj do seriove linky tecky progressbaru
 while (WiFi.status() != WL_CONNECTED) {
 delay(100);
 Serial.print(".");
 lcd.setCursor ( 0, 0 ); 
 lcd.print(".");
 }

 // Jsem pripojeny k Wi-Fi a mohu pokracovat
 Serial.println();
 Serial.println("WiFi pripojena!");
 lcd.setCursor ( 0, 1 ); 
 lcd.print("Wifi Pripojena!");

 // Napis IP adresu, kterou mikropocitac dostal
 Serial.print("Pouzij k pripojeni tuto adresu: ");
 Serial.print("http://");
 Serial.println(WiFi.localIP());
 lcd.setCursor ( 0, 2 ); 
 lcd.print(WiFi.localIP());
 delay(2000);
 lcd.clear();
    lcd.setCursor ( 1, 1 );  
    lcd.print("Teplota : ");
    lcd.setCursor ( 1,2 );  
    lcd.print("Vlhkost : ");
    lcd.setCursor ( 2,3 );  
    lcd.print("Tlak   :");
}

void teplota_vlhkost() {
  tep = 0;
  tep = mojeDHT.readTemperature();
  delay(2000);
  vlh = mojeDHT.readHumidity();
  // kontrola, jestli jsou načtené hodnoty čísla pomocí funkce isnan
  if (isnan(tep) || isnan(vlh)) {
    // při chybném čtení vypiš hlášku
    Serial.println("Chyba při čtení z DHT senzoru!");
    lcd.setCursor ( 11, 1 );  
    lcd.print("          ");
    lcd.setCursor ( 11, 1 ); 
    lcd.print("chyba");
    lcd.setCursor ( 11,2 ); 
    lcd.print("chyba");
    teplota_vlhkost();
  } else {
    // pokud jsou hodnoty v pořádku,
    // vypiš je po sériové lince
    Serial.print("Teplota: "); 
    Serial.print(tep,1);
    Serial.println(" °C");
    Serial.print("Vlhkost: "); 
    Serial.print(vlh,0);
    Serial.println(" %");
    lcd.setCursor ( 11, 1 );  
    lcd.print("          ");
    lcd.setCursor ( 11, 1 ); 
    lcd.print(tep,1);
    lcd.print(" ");
    lcd.print((char)223);
    lcd.print("C");
    lcd.setCursor ( 11,2 ); 
    lcd.print(vlh,0);
    lcd.print(F(" % "));
  }
}

void tlak() {
  tlak_aktualni = 0;
  tlak_aktualni = (bmp.readPressure()/100)+38;
  Serial.print("Tlak : ");
  Serial.print(tlak_aktualni,0);
  Serial.println(" hPa");
  lcd.setCursor ( 11,3 ); 
  lcd.print(tlak_aktualni,0);
  lcd.print(F(" hPa"));
}

void hodiny() {
 String URLhodiny = "http://192.168.1.249/doma/cas.php"; // Works with HTTP
  httphodiny.begin(client, URLhodiny); // Works with HTTP
  int httpCodehodiny = httphodiny.GET();
  if (httpCodehodiny > 0) {
    cas_aktualni = httphodiny.getString();
    Serial.print("Cas : ");
    Serial.println(cas_aktualni); // Print response
  } 
  httphodiny.end();
  lcd.setCursor ( 15,0 );  
  lcd.print(cas_aktualni);
}

void den_tydnu() {
 String URLdatum = "http://192.168.1.249/doma/datum.php"; // Works with HTTP
  httpdatum.begin(client, URLdatum); // Works with HTTP
  int httpCodedatum = httpdatum.GET();
  if (httpCodedatum > 0) {
    datum = httpdatum.getString();
    Serial.print("Datum : ");
    Serial.println(datum); // Print response
  } 
  httpdatum.end();
  lcd.setCursor ( 0,0 ); 
  lcd.print("             "); 
  lcd.setCursor ( 0,0 ); 
  lcd.print(datum);
}

void odesli() {
 String URLodesli = "http://192.168.1.249/doma/loger_venku.php?teplota=" + String(tep,1) + "&vlhkost=" + String(vlh,0) + "&tlak=" + String(tlak_aktualni,0); // Works with HTTP
  http2.begin(client, URLodesli); // Works with HTTP
    int httpResponseCode = http2.GET();
    delay(1000);
  http2.end();
  Serial.println("Odeslano");
}

void loop() {  
                //1 minuta
                teplota_vlhkost();  
                tlak();  
                hodiny();
                den_tydnu();
                Serial.println("_________________________");
                delay(1);
                odesli();
                delay(51000);
                //2 minuta
                teplota_vlhkost();  
                tlak();  
                hodiny();
                den_tydnu();
                Serial.println("_________________________");
                delay(51000);
                //3 minuta
                teplota_vlhkost();  
                tlak();  
                hodiny();
                den_tydnu();
                Serial.println("_________________________");
                delay(51000);
                //4 minuta
                teplota_vlhkost();  
                tlak();  
                hodiny();
                den_tydnu();
                Serial.println("_________________________");
                delay(51000);
                //5 minuta
                teplota_vlhkost();  
                tlak();  
                hodiny();
                den_tydnu();
                Serial.println("_________________________");
                delay(51000);
                //6 minuta
                teplota_vlhkost();  
                tlak();  
                hodiny();
                den_tydnu();
                Serial.println("_________________________");
                delay(51000);
                //7 minuta
                teplota_vlhkost();  
                tlak();  
                hodiny();
                den_tydnu();
                Serial.println("_________________________");
                delay(51000);
                //8 minuta
                teplota_vlhkost();  
                tlak();  
                hodiny();
                den_tydnu();
                Serial.println("_________________________");
                delay(51000);
                //9 minuta
                teplota_vlhkost();  
                tlak();  
                hodiny();
                den_tydnu();
                Serial.println("_________________________");
                delay(51000);
                //10 minuta
                teplota_vlhkost();  
                tlak();  
                hodiny();
                den_tydnu();
                Serial.println("_________________________");
                delay(51000);
}

Odpovědět

Kdo je online

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