Wifi zásuvka

Nedaří se vám s projektem a nenašli jste vhodné místo, kde se zeptat? Napište sem.
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Odpovědět
Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: Wifi zásuvka

Příspěvek od Kony » 14 kvě 2020, 21:50

No tohle chapu, jen nevim presne jak zakomponovat do toho form...

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: Wifi zásuvka

Příspěvek od KamilV » 14 kvě 2020, 22:18

Do toho formu? Nijak. Celá alchymie byla vyzrazena už před 7 hodinami...
u toho formu si dej do action nějaký skript, který tu hodnotu updatne v db a udělá redirect zpět na výpis s tlačítkem
Tedy:

Kód: Vybrat vše

<form action="update_led.php" method="POST">
  ... hidden ... submit
</form>
V update_led.php:

Kód: Vybrat vše

$sql = 'UPDATE arduino_data SET hodnota='.(int)$_POST['hodnota'].' WHERE modul="led"';
$doSql = $mysqli->query($sql);

header('Location: jmeno_skriptu_s_formem.php');
Samozřejmě v update_led.php si musíš získat konexi do db, ideálně includovat nějaký db.php ve kterém to budeš mít... Psal jsem námět, ne copy-paste řešení.

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

Re: Wifi zásuvka

Příspěvek od Kony » 15 kvě 2020, 08:36

Tak to bohuzel asi nedam do kupy.
Snažím se to pořád nějak vymyslet, ale nedávám to.

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: Wifi zásuvka

Příspěvek od KamilV » 15 kvě 2020, 08:49

Hrome. Musím říct, že tahle hra s dolováním informací mne už moc nebaví :(
Buď prostě chceš s něčím pomoct, pošleš vždycky raději celý soubor a ostatní ti řeknou: "tady máš takovou a makovou chybu", nebo si to prostě budeš tajit a nikdo ti s tím nepomůže.

Jediné, co si mohu vzít z posledního postu je, že sis vzal na sebe moc složitý projekt a končíš s ním. Píšeš, že to nedáš do kupy. Ok.

Máš v podstatě 3 možnosti:
  • fakt s tím sekneš a zkusíš si jednodušší projekt
  • necháš si to od někoho udělat, nikam tě to moc neposune, nebude to tvé dílo, bude tě to stát něčí práci
  • nebo se tím rozhodneš prokousat, hodně lidí ti pomůže, ale musíš se ptát konkrétně a vždy dodat podklady
Nezlob se, ale je fakt únavný ten kolovrátek "Nejde? Aha, a co nejde? Jo, ukaž jak to děláš. Takhle? Je tam tato chyba. Pořád nejde? Ale tohle jsme zatím vůbec neřešili...", to pak není divu, že jsme na 12. stránce vlákna a stále to nejde.

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

Re: Wifi zásuvka

Příspěvek od Kony » 15 kvě 2020, 09:11

Takže jsem postoupil :

Kód: Vybrat vše

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

        $sql = 'SELECT * FROM arduino_data WHERE modul="led"';
        $doSql = $mysqli->query($sql);
        $hodnota = $doSql->fetch_assoc()['hodnota']; //načte hodnotu led z DB

        $sqlzapis = 'UPDATE arduino_data SET hodnota='.(int)$_POST['stav'].' WHERE modul="led"';
        $doSqlzapis = $mysqli->query($sqlzapis);

            include 'menu.html';?>
                <form action="" method="POST">
                <?php if ($hodnota) { ?>
                <h1>Světlo za sedačkou</h1>
                <input type="hidden" name="stav" value="0">
                <button style="font-size : 40px; height:100px; width:300px" type="submit" name="tlacitko" value="1">Zhasnout</button>
                <?php } else { ?>
                <h1>Světlo za sedačkou</h1>
                <input type="hidden" name="stav" value="1">
                <button style="font-size : 40px; height:100px; width:300px" type="submit" name="tlacitko" value="0">Rozsvítit</button>
                <?php } ?>
                </form>
Tímto mi to zapíše hodnoty, a správně zapisuje, už jsem toho včera měl asi hodně zkoušení. Dnes zase s čistou hlavou :) Nyní po zmáčknutí tlačítka se hodnota zapíše správně, ale tlačítko se samozřejmě nezmění dle hodnoty, musím udělat refresh stránky aby se mi tlačítko změnilo dle hodnoty v DB
A samozřejmě pokud přidám další tlačítku na stránky s adresováním na záznam led2, tak to potom dělá velké problémy

Kód: Vybrat vše

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

        $sql = 'SELECT * FROM arduino_data WHERE modul="led"';
        $doSql = $mysqli->query($sql);
        $hodnota = $doSql->fetch_assoc()['hodnota']; //načte hodnotu led z DB

        $sqlzapis = 'UPDATE arduino_data SET hodnota='.(int)$_POST['stav'].' WHERE modul="led"';
        $doSqlzapis = $mysqli->query($sqlzapis);

        $sql2 = 'SELECT * FROM arduino_data WHERE modul="led2"';
        $doSql2 = $mysqli->query($sql2);
        $hodnota2 = $doSql2->fetch_assoc()['hodnota']; //načte hodnotu led z DB

        $sqlzapis2 = 'UPDATE arduino_data SET hodnota='.(int)$_POST['stav2'].' WHERE modul="led2"';
        $doSqlzapis2 = $mysqli->query($sqlzapis2);

            include 'menu.html';?>
                <form action="" method="POST">
                <?php if ($hodnota) { ?>
                <h1>Světlo za sedačkou</h1>
                <input type="hidden" name="stav" value="0">
                <button style="font-size : 40px; height:100px; width:300px" type="submit" name="tlacitko" value="1" >Zhasnout</button>
                <?php } else { ?>
                <h1>Světlo za sedačkou</h1>
                <input type="hidden" name="stav" value="1">
                <button style="font-size : 40px; height:100px; width:300px" type="submit" name="tlacitko" value="0" >Rozsvítit</button>
                <?php } ?>
                </form>

                <form action="" method="POST">
                <?php if ($hodnota2) { ?>
                <h1>Světlo u TV</h1>
                <input type="hidden" name="stav2" value="0">
                <button style="font-size : 40px; height:100px; width:300px" type="submit" name="tlacitko2" value="1" >Zhasnout</button>
                <?php } else { ?>
                <h1>Světlo u TV</h1>
                <input type="hidden" name="stav2" value="1">
                <button style="font-size : 40px; height:100px; width:300px" type="submit" name="tlacitko2" value="0" >Rozsvítit</button>
                <?php } ?>
                </form>

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

Re: Wifi zásuvka

Příspěvek od Kony » 15 kvě 2020, 10:00

Tak vyřešeno komplet :

Kód: Vybrat vše

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

        $sql = 'SELECT * FROM arduino_data WHERE modul="led"';
        $doSql = $mysqli->query($sql);
        $hodnota = $doSql->fetch_assoc()['hodnota']; //načte hodnotu led z DB

        $sql2 = 'SELECT * FROM arduino_data WHERE modul="led2"';
        $doSql2 = $mysqli->query($sql2);
        $hodnota2 = $doSql2->fetch_assoc()['hodnota']; //načte hodnotu led z DB

            include 'menu.html';
?>
                <form action="update_led1.php" method="POST">
                <?php if ($hodnota) { ?>
                <h1>Světlo za sedačkou</h1>
                <input type="hidden" name="stav" value="0">
                <button style="font-size : 40px; height:100px; width:300px" type="submit" name="tlacitko" value="1" >Zhasnout</button>
                <?php } else { ?>
                <h1>Světlo za sedačkou</h1>
                <input type="hidden" name="stav" value="1">
                <button style="font-size : 40px; height:100px; width:300px" type="submit" name="tlacitko" value="0" >Rozsvítit</butto$
                <?php } ?>
                </form>

                <form action="update_led2.php" method="POST">
                <?php if ($hodnota2) { ?>
                <h1>Světlo u TV</h1>
                <input type="hidden" name="stav2" value="0">
                <button style="font-size : 40px; height:100px; width:300px" type="submit" name="tlacitko2" value="1" >Zhasnout</butto$
                <?php } else { ?>
                <h1>Světlo u TV</h1>
                <input type="hidden" name="stav2" value="1">
                <button style="font-size : 40px; height:100px; width:300px" type="submit" name="tlacitko2" value="0" >Rozsvítit</butt$
                <?php } ?>
                </form>
obsah update_led1.php

Kód: Vybrat vše

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

        $sqlzapis = 'UPDATE arduino_data SET hodnota='.(int)$_POST['stav'].' WHERE modul="led"';
        $doSqlzapis = $mysqli->query($sqlzapis);
        header('Location: led.php');

VŠEM MOC DĚKUJI ZA TRPĚLIVOST

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

Re: Wifi zásuvka

Příspěvek od kiRRow » 15 kvě 2020, 15:32

A víš v čem jsi měl problém ? ... neprve si provedl SELECT ... načetl starou hodnotu a pak UPDATE a zapsal tam novou :D

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

Re: Wifi zásuvka

Příspěvek od Kony » 15 kvě 2020, 16:55

Presne tak, ale porad jsem zkousel ruzne varianty, nakonec jsem se zamyslel a prisel na to logicky... vcera mi to uz nemyslelo

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

Re: Wifi zásuvka

Příspěvek od Kony » 28 črc 2020, 11:07

Tak nemuzu porad prijit na chybu...

Kód: Vybrat vše

#include <SPI.h>
#include <UIPEthernet.h> // Used for Ethernet
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x78, 0xEE  };                                
#define BUFF_DELKA 255
char buffer[BUFF_DELKA]; //zásobník na příchozí řetězec

// ********************************************
// ***************EDITACE *********************
// ********NUTNO DODRŽET ADRESU SOUBORU *******
// ********/jirka/reset1.php reset2.php *******
// ********************************************
// **** NASTAVENI SITE****
IPAddress ip(10, 10, 111, 80);      //IP ADRESA
IPAddress gateway(10, 10, 111, 1);  // VYCHOZI BRANA
IPAddress subnet(255, 255, 255, 0); // MASKA
IPAddress dnServer(8, 8, 4, 4);     // DNS
int ID_MODULU = 1;
char serverName[] = "yxyxyxyx"; // webserver
// ********************************************
// ********************************************
// ********************************************

EthernetClient client;
String readString;
int x=0; //pocitadlo riadkov
char lf=10; //line feed character

void setup() {
  Serial.begin(9600);
  pinMode(4, OUTPUT);
  Ethernet.begin(mac, ip, dnServer, gateway, subnet);
  Serial.print("ip-");
  Serial.println( Ethernet.localIP());
  Serial.print("Subnet mask-");
  Serial.println( Ethernet.subnetMask());
  Serial.print("Gateway-");
  Serial.println( Ethernet.gatewayIP());
  Serial.print("DNS-");
  Serial.println( Ethernet.dnsServerIP());
}

void loop() {
if (client.connect(serverName, 80)) {  //starts client connection, checks for connection
        client.println("GET http://yxyxyxyx/yxyxyxyx/reset1.php");
        Serial.println("GET http://yxyxyxyx/yxyxyxyx/reset1.php");
        client.println("Host: konycz.eu");
        client.println("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
        client.println("Connection: close");
        client.println();

        delay(1000);

        int inBuffer = 0;

        for(int i = 0; i < BUFF_DELKA; i++){ //vyprázdní buffer
            buffer[i] = '\\0'; //nastaví všechny prvky buffer na znak konce řetězce
        }
        
        while(client.available()){
            buffer[inBuffer] = client.read();    
            inBuffer++;
        }
        
     if(inBuffer == 9){
            if(buffer[0] == 'r' && buffer[1] == 'e' && buffer[2] == 's'){
                if(buffer[8] == '1'){
                    digitalWrite(4, HIGH);
                }
                else{
                    digitalWrite(4, LOW);
                }
                Serial.println(buffer[8]);
            }
        }

        client.stop();
    }
  Serial.println(buffer[8]);
    delay(6000);
}
Když si zobrazim stránku http://yxyxyxyx/yxyxyxyx/reset1.php, tak na stránce se správně vypíše "reset1:1:", ale ani zaboha nemuzu docilit arduino aby si nacetlo tu druhou jednicku.. ve vypisu mi to stale dokola vypisuje 0 a nebo vubec nic

martinius96
Příspěvky: 579
Registrován: 01 srp 2017, 19:29
Reputation: 0
Bydliště: Poprad
Kontaktovat uživatele:

Re: Wifi zásuvka

Příspěvek od martinius96 » 28 črc 2020, 11:34

Keď sa vykonáva request na PHP súbor, je potrebné použiť HTTP 1.0, ak spojenie použijete HTTP 1.1 ako default, prijaté dáta z webservera prichádzajú ako chunk encoding a je komplikované ich prijať. Pri HTTP 1.0 ti odpoveď príde normálne do riadku tak, ako keby si načítaval textový súbor. Je to tak ľahšie na spracovanie a použiteľnejšie pre tvoj prípad.
ENC28J60 som neprogramoval, ale tá knižnica vyzerá byť ako klon Ethernet knižnice pre Wiznet shieldy a moduly.
Urobil som to vzorovo podľa toho, ako to používam ja s Ethernet knižnicou.
Skús to takto:

Kód: Vybrat vše

#include <SPI.h>
#include <UIPEthernet.h> // Used for Ethernet
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x78, 0xEE  };
unsigned long cas = 0;
// ********************************************
// ***************EDITACE *********************
// ********NUTNO DODRŽET ADRESU SOUBORU *******
// ********/jirka/reset1.php reset2.php *******
// ********************************************
// **** NASTAVENI SITE****
IPAddress ip(10, 10, 111, 80);      //IP ADRESA
IPAddress gateway(10, 10, 111, 1);  // VYCHOZI BRANA
IPAddress subnet(255, 255, 255, 0); // MASKA
IPAddress dnServer(8, 8, 4, 4);     // DNS
int ID_MODULU = 1;
char serverName[] = "yxyxyxyx"; // webserver
// ********************************************
// ********************************************
// ********************************************

EthernetClient client;

void setup() {
  Serial.begin(9600);
  pinMode(4, OUTPUT);
  Ethernet.begin(mac, ip, dnServer, gateway, subnet);
  Serial.print("ip-");
  Serial.println( Ethernet.localIP());
  Serial.print("Subnet mask-");
  Serial.println( Ethernet.subnetMask());
  Serial.print("Gateway-");
  Serial.println( Ethernet.gatewayIP());
  Serial.print("DNS-");
  Serial.println( Ethernet.dnsServerIP());
}

void loop() {
  if (millis() - cas >= 6000 || cas == 0) {
    cas = millis();
    if (client.connect(serverName, 80)) {  //starts client connection, checks for connection
      client.println("GET http://yxyxyxyx/yxyxyxyx/reset1.php HTTP/1.0");
      Serial.println("GET http://yxyxyxyx/yxyxyxyx/reset1.php");
      client.println("Host: konycz.eu");
      client.println("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
      client.println("Connection: close");
      client.println();
      delay(1000);
      while (client.connected()) {
        String line = client.readStringUntil('\n');
        Serial.println(line); //ak chceme vypísať HTTP header
        if (line == "\r") {
          break;
        }
      }
      String line = client.readStringUntil('\n');
      Serial.println("Nacitany payload response:");
      Serial.println(line); //odpoveď webservera - naše dáta
    } else {
      Serial.println("Pripojenie na webserver sa nepodarilo");
    }
    client.stop();
  }
}

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Bing [Bot] a 10 hostů