Wemos D1 mini PRO - problem z wysyłaniem danych

Masz problem, z którym nie możesz sobie poradzić? Pisz śmiało!
ODPOWIEDZ
d3bsky
Młodszy majsterkowicz
Posty: 3
Rejestracja: 20 sie 2018, 13:49

Wemos D1 mini PRO - problem z wysyłaniem danych

Post autor: d3bsky » 20 sie 2018, 14:07

Witam, jakiś czas temu stworzyłem stację pogodową w oparciu o Wemos D1 mini PRO i Raspberry PI.
Wemos D1 przetwarza dane z czujników a następnie łączy się z Raspberry PI i przesyła dane do bazy danych na malinie metodą GET za pomocą prostego skryptu.

Wszystko działa bez problemu, jednak postanowiłem zwolnić moją malinkę z obowiązku serwera i przenieść stronę (wyświetlającą wyniki ) wraz z bazą danych na zewnętrzny hosting www. Strona jak i baza działają na hostingu prawidłowo, mogę ręcznie z poziomu przeglądarki dodać dane do bazy metodą GET. Jednak kiedy w programie dla Wemos zmieniłem lokalny adres Raspberry na adres serwera www dane nie pojawiają się w bazie.

Fragment kodu odpowiedzialny za wysyłanie danych:

Kod: Zaznacz cały

void send_data()                                    //wysyłanie danych na serwer
{
  if (client.connect(server,80)) 					//server = "http://mojserwer.home . pl/"
  { 
    client.print("GET /send_data.php?");
    client.print("api_key=");
    client.print(api_key);
    client.print("&&");
    client.print("temp=");
    client.print(temperature);
    client.print("&&");
    client.print("humidity=");
    client.print(humidity);
    client.print("&&");
    client.print("pressure=");
    client.print(pressure);
    client.print("&&");
    client.print("soil=");
    client.print(soil);
    client.print("&&");
    client.print("signal_level=");
    client.print(signal_level);
    client.println( " HTTP/1.1");
    client.println( "Host: localhost" );
    client.println( "Content-Type: application/x-www-form-urlencoded" );
    client.println( "Connection: close" );
    client.println();
    client.println(); 
    client.stop();

    Serial.println("Dane wysłane pomyślnie");
  }
}

Skrypt PHP odpowiedzialny za przyjmowanie danych i dodawanie ich do bazy:

Kod: Zaznacz cały

<?php		
	$api_key = $_GET['api_key'];
	$temp = $_GET['temp'];
	$humidity = $_GET['humidity'];
	$pressure = $_GET['pressure'];
	$soil = $_GET['soil'];
	$signal_level = $_GET['signal_level'];
	
	if($api_key == "jakis_klucz")
	{
		$server = "localhost";
		$db = "nazwa_bazy";
		$user = "nazwa_uzytkownika";
		$paswd = "haslo_do_bazy";
		
		$query = "INSERT INTO weather_data (temp, humidity, pressure, soil, signal_level) VALUES ('$temp', '$humidity', '$pressure', '$soil', '$signal_level')";
		$connect = mysqli_connect($server, $user, $paswd, $db);
		
		mysqli_select_db($connect, $db);
		mysqli_query($connect, $query);	
		mysqli_close($connect);
	}         
?>



Czy ktoś spotkał się z takim problemem lub wie co jest jego przyczyną?
Z góry pozdrawiam i dziękuję za odpowiedź!

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


Awatar użytkownika
ethanak
Złota rączka
Posty: 782
Rejestracja: 21 lis 2015, 14:41
Kontakt:

Re: Wemos D1 mini PRO - problem z wysyłaniem danych

Post autor: ethanak » 20 sie 2018, 15:06

Z ciekawości: po co tam "&&" zamiast "&amp;" lub "&"?
Pisze człowiek ambitnie, a tu przychodzi prostak i wszystko rozumie.
To jest ewidentna bezczelność!
d3bsky
Młodszy majsterkowicz
Posty: 3
Rejestracja: 20 sie 2018, 13:49

Re: Wemos D1 mini PRO - problem z wysyłaniem danych

Post autor: d3bsky » 20 sie 2018, 15:15

Szczerze? Sam nie wiem, w wielu przykładach w internecie dla ESP wykorzystywano "&&" jednak "&" też działa poprawnie.
Awatar użytkownika
ethanak
Złota rączka
Posty: 782
Rejestracja: 21 lis 2015, 14:41
Kontakt:

Re: Wemos D1 mini PRO - problem z wysyłaniem danych

Post autor: ethanak » 21 sie 2018, 06:22

A jako nagłówek "Host" wysyłasz dalej "localhost"? To jak to ma działać?
Po co content-type jeśli nie wysyłasz żadnych danych w ciele wiadomości a tylko w ścieżce?
W ogóle rozumiesz coś z tego kawałka kodu który pokazałeś?
Pisze człowiek ambitnie, a tu przychodzi prostak i wszystko rozumie.
To jest ewidentna bezczelność!
d3bsky
Młodszy majsterkowicz
Posty: 3
Rejestracja: 20 sie 2018, 13:49

Re: Wemos D1 mini PRO - problem z wysyłaniem danych

Post autor: d3bsky » 21 sie 2018, 12:40

Jak nagłówek Hosta wysyłam adres serwera, content type faktycznie wydaje się być zbędny. Zastanawiam się czy problemem nie jest fakt że hosting wykorzystuje HTTP/2 a na Raspberry korzystałem z wersji 1.1. Wiesz coś może na ten temat?
Awatar użytkownika
ethanak
Złota rączka
Posty: 782
Rejestracja: 21 lis 2015, 14:41
Kontakt:

Re: Wemos D1 mini PRO - problem z wysyłaniem danych

Post autor: ethanak » 21 sie 2018, 13:40

Z tego co widzę to masz "Host: localhost" więc albo ja źle widzę, albo pokazujesz inny kod niż ten którego używasz.
To że serwer potrafi czytać HTTP/2 nie oznacza, że nie potrafi HTTP/1.1 czy nawet HTTP/1.0.
Czy próbowałeś wysłać te same dane z tymi samymi nagłówkami do serwera w inny sposób (np. telnetem albo czymś podobnym)? Spróbuj.
W ogóle co to za pomysł, żeby nie sprawdzać co serwer odpowiedział (przynajmniej kod) tylko naiwnie przyjmować, że jeśli się coś wysłało to na pewno dojdzie. Wcale nie na pewno, a jeśli dojdzie to niekoniecznie tam gdzie trzeba. Wywal przynajmniej na seriala odpowiedź serwera i ją sobie obejrzyj lub zamieść tutaj, bo dopóki nie wiesz co się stało nie możesz szukać przyczyny.

Aha, jeszcze jedno: w zmiennej 'server' powinien siedzieć adres serwera (czyli w najgorszym przypadku coś w stylu "moj.serwer.tld") bez żadnych dodatków typu "http://" i tak dalej.
Pisze człowiek ambitnie, a tu przychodzi prostak i wszystko rozumie.
To jest ewidentna bezczelność!
ODPOWIEDZ

Strony partnerskie: