• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino ESP8266 komunikacja z serwerem (PHP i GET)
#1
Witam posiadam moduł WiFi podłączony pod moje arduino uno. Za jego pomocą chciałem zrobić stację pogodową synchronizowaną z serwerem, ale mam problemy z przesłaniem danych na serwer.
Kod:
#include <SoftwareSerial.h>
 
SoftwareSerial mySerial(10, 11); // RX, TX
 
void setup() {
  Serial.begin(9600);
  while(!Serial);
  Serial.println("to dziala");
  mySerial.begin(115200);
  //mySerial.begin(9600);
  pinMode(4, OUTPUT);
   
  while(!wyslij("AT","OK",100))
  {
   digitalWrite(4, HIGH);
   delay(1000);
   Serial.println(mySerial.readString());
   digitalWrite(4, LOW);
   delay(1000);
  }
 
   
  delay(3000);
  if(wyslij("AT+CWJAP=\"Wifi\",\"Dominik1\"","OK",5000));
  Serial.println("XD");
 
   
   
}
 
 
String s="GET /recive.php?temp_wew=3 HTTP/1.1\r\nHost: mip.cba.pl.com\r\n\r\n";
 
 
void loop() {
  Serial.println(s.length());
   mySerial.println("AT+CIPSTART=\"TCP\",\"mip.cba.pl\",80");
  delay(1000);
  Serial.println(mySerial.readString());
  mySerial.println("AT+CIPSEND=61");
  delay(1000);
  Serial.println(mySerial.readString());
  mySerial.println(s);
  delay(1000);
  Serial.println(mySerial.readString());
  delay(10000);
 
   
   
}
boolean wyslij(String Komenda_AT, char *Odpowiedz_AT, int czas_czekania)
{
  mySerial.println(Komenda_AT);
  delay(czas_czekania);
  while(mySerial.available() > 0)
  {
    if(mySerial.find(Odpowiedz_AT))
    {
    
      return 1;
    }
  }
  return 0; 
}


Jest to kod na Arduino, może niezbyt schludnie napisane, ale na razie wszystko testuje i przepisuję po kilka razy dlatego może to tak wyglądać

Kod PHP:
AT+CIPSTART="TCP",#mip.cba.pl",80
 
ALREADY CONNECTED
 
ERROR
 
AT
+CIPSEND=61
 
OK

 
 
busy s
./.C⸮C!⸮Y,⸮⸮⸮ѕ⸮5
 
SEND OK
 
+IPD,1460:HTTP/1.1 4 

to dostaje w porcie szeregowym. Niby wszystko ładnie ale na serwerze i w bazie danych bez zmian.


Nie mam pojęcia czemu tak się dzieje. Kiedy wszystko wklepuje w przeglądarkę (www.mip.cba.pl/recive.php?temp_wew=100     <- to tylko jeden parametr, jest ich więcej, ale testuje to nie potrzebuję na razie więcej) to wszystko ładnie działa.


Kod PHP:
<?php
    if
(isset($_GET['temp_wew']))
    {
        $temp_wew;
        $temp_zew;
        $naw_wew;
        $naw_zew;
        $gleba;
 
        $temp_wew
=$_GET["temp_wew"];
        $temp_zew=$_GET["temp_zew"];
        $naw_wew=$_GET["naw_wew"];
        $naw_zew=$_GET["naw_zew"];
        $gleba=$_GET["gleba"];
 
        require_once
"connect.php";
 
        $connect 
= new mysqli($host$db_user$db_password$db_name);
 
        if
($connect->connect_errno!=0)
        {
            echo"Error: ".$connect->connect_errno;
        }
        else
        
{
 
            $connect
->query("SET CHARSET utf8");
            $connect->query("SET CHARSET utf8");("SET NAMES `utf8` COLLATE `utf8_polish_ci`");
 
            $sql 
"INSERT INTO dane VALUES (NULL, '$temp_wew', '$temp_zew', '$naw_wew', '$naw_zew', '$gleba')";
            $connect->query($sql);
 
 
            $connect
->close();
 
        
}
 
 
    
}
 
 
 
?>

Tu jeszcze kod PHP obsługujący GET i wklepujący dane do bazy danych
 
Odpowiedź
#2
Spróbuj użyć ESP jako niezależnego uC z funkcją łączenia się do WIFI zamiast jako modemu WIFI dla UNO. A jeśli koniecznie jako modem z komendami AT, to najpierw wyślij to z PC wklepując komendy z palca na terminalu (lub oczywiście CTR+C i CTR+V), jako konwertera USB-UART można użyć nawet UNO.
Jeśli z palca zadziała to znaczy, że gdzieś zgubiłeś jakiś "" gdzie coś ma być lub nie być w "" i to takie przebieranie maku z popiołu, analiza znak po znaku gdzie... Jak z palca wbija dane do bazy danych to pewnie PHP jest OK.
 
Odpowiedź
#3
(11-08-2019, 01:16)kaczakat napisał(a): Spróbuj użyć ESP jako niezależnego uC z funkcją łączenia się do WIFI zamiast jako modemu WIFI dla UNO. A jeśli koniecznie jako modem z komendami AT, to najpierw wyślij to z PC wklepując komendy z palca na terminalu (lub oczywiście CTR+C i CTR+V), jako konwertera USB-UART można użyć nawet UNO.
Jeśli z palca zadziała to znaczy, że gdzieś zgubiłeś jakiś "" gdzie coś ma być lub nie być w  ""  i to takie przebieranie maku z popiołu, analiza znak po znaku gdzie... Jak z palca wbija dane do bazy danych to pewnie PHP jest OK.
Mógłbyś mi powiedzieć jak wykorzystać arduino żebym mógł wklepywać te komendy AT z palca?


Kod:
#include <SoftwareSerial.h>

SoftwareSerial esp8266(2, 3);

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(115200);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  Serial.println("Started");

  // set the data rate for the SoftwareSerial port
  esp8266.begin(115200);
  esp8266.write("AT\r\n");
}

void loop() {
  if (esp8266.available()) {
    Serial.write(esp8266.read());
  }
  if (Serial.available()) {
    esp8266.write(Serial.read());
  }
}

Takie coś mogłoby zadziałać? (znaleziony pierwszy lepszy kod na internecie)
 
Odpowiedź
#4
Nie, to nie jest do tego. Najprościej gdybyś miał konwerter USB-UART, czerwony FTDI:
   
Jeśli taki masz to ustawiasz go na 3.3V, zasilasz ESP, podłączasz  TX-RX, RX-TX, GND-GND, podłączasz FTDI do PC, patrzysz jaki COM się zgłasza, wskazujesz w Arduino i otwierasz monitor, prędkość na taką jak ma ESP i klepiesz komendy AT.
Jak nie masz to przy pierwszej okazji kup sobie, kosztuje z dychę i często się przydaje.
A na razie właśnie UNO może go zastąpić. Wprowadzasz uno w stan reset, np. zworka pinu RST do GND, z płytki UNO łączysz się do ESP przez konwerter poziomów logicznych (UNO jest 5V, ESP 3.3V), GND do GND, wyjątkowo TX do TX, RX do RX (bo RX UNO jest TX konwertera wpiętego do USB) i masz tymczasowy zamiennik.
Tu przykład takiego użycia: https://create.arduino.cc/projecthub/Pat...ter-475533

Jeśli nie rozumiesz co tu piszę to polecam kurs Arduino, pooglądać filmy na Youtube.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości