Vizitator sea Postat Iunie 27, 2018 Partajează Postat Iunie 27, 2018 Salutare, Incerc sa transmit date de la o pagina web la modulul Wemos ESP8266 D1mini prin intermediul unui server. Pagina web se afla la: xx.xxx.xxx.xxx/ard/page.html, in interiorul acestei pagini este urmatorul cod html: <html><head> <title>Page Title</title> </head> <body> <div> <a href="?btn1on">btn 1 on</a> <a href="?btn1off">btn 1 off</a> </div> <div> <a href="?btn2on">btn 2 on</a> <a href="?btn2off">btn 2 off</a> </div> </body></html> btn1 on vreau sa actioneze digitalWrite(D2, HIGH); btn1 off vreau sa actioneze digitalWrite(D2, LOW); btn2 on vreau sa actioneze digitalWrite(D3, HIGH); btn2 off vreau sa actioneze digitalWrite(D3, LOW); Cu ajutorul codului de mai jos, am reusit sa ma conectez la server si la pagina web, insa nu stiu cum transmit actiunile link-urilor din pagina web in modul #include <ESP8266WiFi.h> #include <ESP8266HTTPClient.h> #include <ESP8266WiFiMulti.h> const char* ssid = "xxxxxxxxxx"; const char* password = "xxxxxxxxx"; const char* host = "xx.xxx.xxx.xxx"; const int port = 80; void setup() { digitalWrite(D2, LOW); digitalWrite(D3, LOW); Serial.begin(115200); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); Serial.setDebugOutput(true); } void loop() { if (WiFi.status() == WL_CONNECTED) { HTTPClient http; String url = "/ard/page.html"; http.begin(host,port,url); int httpCode = http.GET(); if(httpCode > 0) { String payload = http.getString(); Serial.println(payload); } Serial.println("closing connection"); http.end(); } delay(30000); } Multumesc! Link spre comentariu
modoran Postat Iunie 28, 2018 Partajează Postat Iunie 28, 2018 Cred ca nu ai inteles principiul de functionare. Serverul insusi trebuie sa fie continut in ESP8266, iar la simpla acesare a unui URL din exterior ( telefon, tableta, calculator - folosit ca si client ) executa o anumita comanda. In exemplul prezentat de tine este folosit ca si client ( exact invers ). Link spre comentariu
Vizitator sea Postat Iunie 28, 2018 Partajează Postat Iunie 28, 2018 Am testat si varianta in care ESP8266 este configurat ca si server insa nu am reusit sa il pot accesa din afara retelei. Ceea ce incerc sa fac este sa conectez ESP8266 ca si client la un server web, iar modulul sa reactioneze in functie de datele oferite de server. Revin cu editarea codului pt modul: #include <ESP8266WiFi.h> #include <ESP8266HTTPClient.h> #include <ESP8266WiFiMulti.h> const char* ssid = "xxxxxxx"; const char* password = "xxxxxxx"; const char* host = "xxx.xxx.x.xxx"; const int port = 80; void setup() { pinMode(D2, OUTPUT); pinMode(D3, OUTPUT); digitalWrite(D2, LOW); digitalWrite(D3, LOW); Serial.begin(115200); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); Serial.setDebugOutput(true); } void loop() { if (WiFi.status() == WL_CONNECTED) { HTTPClient http; String url = "/test/a.php"; http.begin(host,port,url); int httpCode = http.GET(); if(httpCode > 0) { String payload = http.getString(); Serial.println(payload); if(payload == "1"){ digitalWrite(D2, HIGH); digitalWrite(D3, LOW); }else if (payload == 0){ digitalWrite(D2, LOW); digitalWrite(D3, HIGH); } } Serial.println("closing connection"); http.end(); } delay(30000); } pagina a.php are urmatorul script: <?php $host_ard = 'localhost'; $user_ard = 'root'; $password_ard = ''; $dbname_ard = 'arduino'; $dsn_ard = 'mysql:host=' . $host_ard . ';dbname=' . $dbname_ard; //END // conexiunea la db liamed try { $conn = new PDO($dsn_ard, $user_ard, $password_ard); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { die("Database connection failed arduino: " . $e->getMessage()); } $sqlSelect = "SELECT Status FROM arduino.tbl_ard where Id=1"; $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $conn->query($sqlSelect); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); foreach ($rows as $row) { echo $row['Status']; } Pagina a.php se conecteaza la baza de date mysql arduino in care se afla un tabel ce are doua coloane si doua randuri: +----+--------+ | Id | Status | +----+--------+ | 1 | 1 | | 2 | 0 | +----+--------+ Id-ul 1 este aferent digitalWrite(D2); iar valoarea din status 1 este pentru HIGH si 0 pentru LOW Id-ul 2 este aferent digitalWrite(D3) ...... Valorile din tabela mysql pentru cele doua id-uri sunt dinamice In pagina a.php am ca rezultat final un echo al statusului pentru Id-ul 1, atat am reusit sa testez, acum incerc sa testez cu doua valori. Nu stiu cum pot insera in variabila String payload = http.getString(); cu ajutorul php-ului variabile C adica, din foreach-ul php sa trimit urmatoarele: echo "int btn1 = $variabila1; int btn2 = $variabila2" iar arduino sa le interpreze ca si variabile C nu ca si un simplu String Multumesc! Link spre comentariu
modoran Postat Iunie 28, 2018 Partajează Postat Iunie 28, 2018 Nu se pot trimite "variabile" in mod direct intre client si server. Daca totusi insisti sa folosesti ESP8266 ca si client ( eu nu as face asa ceva ca e o complicatie in plus ) trebuie sa procesezi rezultatul returnat in cererea HTTP si sa interpretezi manual parametrii ( care sunt dinamici dupa cum spui ). Uite aici functiile disponibile pentru manipularea unui string: https://www.arduino.cc/reference/en/language/variables/data-types/stringobject/ Daca nu sunt de ajuns, poti oricand sa folosesti c_str() si sa folosesti functiile obisnuite ale limbajului de programare C. Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum