• 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
ESP8266 - Nie ładuje się strona z internetu
#1
Witam,

Mam zrobioną stronę WWW na serwerze ESP8266 + Arduino MEGA.
Wszysko działa ale tylko w sieci LAN, czyli wewnętrznej w domu.

Gdy próbuję dostać się z internetu np. przez telefon komórkowy to niestety pojawia się problem.

Po wpisaniu do przeglądarki na telefonie mojego adresu IP z portem usługi, czyli: xxx.xxx.xxx.xxx:8000
widzę, że moduł ESP8266 reaguje mrugając niebieskim LED'em ale strona się nie ładuje.

Niestety otrzymuję taki komunikat:

Ta strona nie działa
Serwer xxx.xxx.xxx.xxx wysłał
nieprawidłową odpowiedź
ERR_INVALID_HTTP_RESPONSE

Przypominam, że jeżeli włączę WiFi w telefonie to strona załaduje się bez problemu.
Oczywiście wówczas podaję do przeglądarki adres LAN, czyli: 192.168.0.111

Poniżej zamieszczam ustawienia w moim routerze TP-LINK.

Aby zapewnić stały adres IP dla modułu ESP8266 w mojej wewnętrznej sieci
to przypisałem go na stałe wykorzystując jego unikalny ades MAC do adresu IP: 192.168.0.111

[Obrazek: router1.jpg]

[Obrazek: router2.jpg]

[Obrazek: router3.jpg]

Poniżej przedstawiam również kod programu napisanego w Arduino:

Kod:
// WiFi ESP8266 + Arduino MEGA.

char klient[1];
char bufor[50];
String strona;

void setup()
{
 Serial1.begin(115200); // Moduł ESP8266 ma ustawioną prędkość na 115200.

 while (!wyslij("AT", "OK", 100)) delay(100);

 if (wyslij("AT+CWMODE=1", "OK", 200));
 if (wyslij("AT+CIPMODE=0", "OK", 200));
 if (wyslij("AT+CIPMUX=1", "OK", 200));

 if (wyslij("AT+CWJAP=\"NazwaMojegoRoutera\",\"HasłoDoRoutera\"", "OK", 5000));
 if (wyslij("AT+CIPSERVER=1,80", "OK", 200));

 Serial1.println("AT+CIFSR");
}

void loop()
{
 while (Serial1.available() > 0)
 {
   if (Serial1.find("+IPD,"))
   {
     Serial1.readBytesUntil(',', klient, 1);

     strona = "<html><head><title>Arduino Wi-Fi</title></head>";
     
     strona = strona + "<body bgcolor=#0099CC><center><br>";
     strona = strona + "<table width=600 bgcolor=white border=5 bordercolor=#006699>";
     strona = strona + "<tbody>";

     strona = strona + "<tr height=70>";
     strona = strona + "<td colspan=3><font size=6 color=#006699><center>&nbsp;SERWER ARDUINO&nbsp;<br>WiFi ESP8266</center></td>";
     strona = strona + "</tr>";

     strona = strona + "<tr height=30>";
     strona = strona + "<td colspan=2><font color=#797979>&nbsp;Czas od uruchomienia:<b></td>";
     strona = strona + "<td><b>&nbsp;0&nbsp;</b><font color=#797979></font></td>";
     strona = strona + "</tr>";

     strona = strona + "<tr height=30>";
     strona = strona + "<td colspan=2><font color=#797979>&nbsp;Licznik odwiedzin:<b></td>";
     strona = strona + "<td><b>&nbsp;0&nbsp;</b><font color=#797979></font></td>";
     strona = strona + "</tr>";

     strona = strona + "<tr height=30>";
     strona = strona + "<td colspan=2><font color=#797979>&nbsp;Ostatnia aktualizacja:</td>";
     strona = strona + "<td><b>&nbsp;08.07.2018r.</b></td>";
     strona = strona + "</tr>";

     strona = strona + "<tr height=50>";
     strona = strona + "<td colspan=3><font color=FF9933><center><b>ANT</b></center></td>";
     strona = strona + "</tr>";

     strona = strona + "</tbody></table><br></center></body></html>";

     sprintf(bufor, "AT+CIPSEND=%c,%d", klient[0], strona.length());  
     if (wyslij(bufor, ">", 200));
     if (wyslij(strona, "OK", 200));

     sprintf(bufor, "AT+CIPCLOSE=%c", klient[0]);  
     if (wyslij(bufor, "OK", 200));
   }
 }
}

boolean wyslij(String Komenda_AT, char *Odpowiedz_AT, int czas_czekania)
{
 Serial1.println(Komenda_AT);
 delay(czas_czekania);
 while (Serial1.available() > 0)
 {
   if (Serial1.find(Odpowiedz_AT)) return 1;
 }
 return 0;
}

Poproszę o pomoc bo już po kilku dniach zabrakło mi pomysłów.
Pozdr.
Jeżeli pomogłem, to poproszę o punkt reputacji Big Grin
 
Odpowiedź
#2
Problemem jest albo router albo telefon. Jako, że monitorowanie ruchu po Wi-Fi może być uperdliwe, przekieruj sobie ruch na komputer i sprawdź Wireshark-em czy pakiety dochodzą do kompa.
Spróbuj też dostać się do ESP z zewnątrz z komputera.

Miałem problem z telefonem (operatorem) i objawy były dokładnie takie jak u Ciebie.
- uC: ARM Angel , AVR, Z8, PIC, 8051 / CPU: MC680x0  , Z-80, 6502
- CPLD, FPGA, GAL
- GSM, ISDN, ETH, USB, RS232C/485/422
- C, ASM, CUPL, PHP, BASIC C-64

http://er-mik.prv.pl/projekty_avt.php * http://er-mik.prv.pl/ * http://kolejki.prv.pl/

KA-NUCLEO-F411CE Idea , ESP32, Mega2560, UNO PLUS
 
Odpowiedź
#3
Jeśli bawisz się ESP jako również niezależnym urządzeniem to spróbuj wgrać ten szkic https://github.com/kaczakat/ESP8266 , najlepiej do ESP Witty, wtedy steruje jego led RGB, ale można podłączyć również swoje ledy. Strona internetowa jest trochę inaczej napisana, działa bardzo szybko. W przykładzie powyżej nie wystarczy przekierować portu 80 by strona działała prawidłowo, musi być jeszcze przekierowany port 81 na 81. Załaduje się, ale zliczanie z procka i sterowanie led nie działa bez 81.
Możesz też zajrzeć do przykładów, gdzie strona jest wgrywana na pamięć flash ESP jak na dysk, do spiffs. Jest w przykładach biblioteki: https://github.com/me-no-dev/ESPAsyncWebServer .
Jeśli masz też dwie bramy, dwa łącza internetowe, to u mnie przynajmniej nie da się połączyć do urządzenia, które ma np. bramę ustawioną na 20 przez drugie łącze z bramą 10 (czy tam 1 jak jest typowo ustawiana brama), oczywiście przekierowania portów są zrobione na obu. Mam też jedno ESP, do którego podłączyć się nie umiem z zewnątrz, pomimo, że szkic jest taki sam i wysyła dane do Thinkspeak, z wewnętrznej sieci serwer WWW działa OK (pewnie nie wiem jeszcze co tam skopałem, a nie chce mi się go wyciągać, bo nie muszę mieć dostępu do niego z zewnątrz).
Powinieneś wykonać wiele różnych prób by móc wyciągnąć jakieś wnioski.
 
Odpowiedź
#4
(09-07-2018, 07:52)kaczaka napisał(a): Jeśli masz też dwie bramy, dwa łącza internetowe,  to u mnie przynajmniej nie da się połączyć do urządzenia, które ma np. bramę ustawioną na 20 przez drugie łącze z bramą 10 (czy tam 1 jak jest typowo ustawiana brama), oczywiście przekierowania portów są zrobione na obu.
Powinno działać. U mnie działa ale mam router z dwoma portami WAN no i nie próbowałem tego na ESP ale na innych rozwiązaniach. Powinno jednak działać i na dwóch osobnych routerach. Zapytanie przychodzi z zewnątrz, router przekierowuje na urządzenie. Urządzenie (o ile dobrze ma napisany soft) odpowiada nie na domyślna bramę tylko odsyła odpowiedź tam skąd zadano pytanie. Pewnie soft ESP jest napisany źle i ten typ tak ma.

Warto napisać (akurat to nie ten przypadek), że jest też problem z Orange i ich "cudownym" LiveBox. Nie da się przekierować portu 80.
- uC: ARM Angel , AVR, Z8, PIC, 8051 / CPU: MC680x0  , Z-80, 6502
- CPLD, FPGA, GAL
- GSM, ISDN, ETH, USB, RS232C/485/422
- C, ASM, CUPL, PHP, BASIC C-64

http://er-mik.prv.pl/projekty_avt.php * http://er-mik.prv.pl/ * http://kolejki.prv.pl/

KA-NUCLEO-F411CE Idea , ESP32, Mega2560, UNO PLUS
 
Odpowiedź
#5
Może powinno działać na kilku bramach, ale testowałem na dyskach sieciowych i innych urządzeniach z linuxem, Raspberry, ESP8266, gniazdkach 230V WIFI i jest tak samo (przynajmniej u mnie w domu), można wejść tylko przez tę bramę, do której urządzenie jest podłączone - nie działa WWW, FTP, strumieniowanie video, itp. Sieć jest jedna dla max 255 urządzeń. Nie jest to może 0/1, czasami po prostu działa tragicznie, a załadowanie strony trwa wieki, najczęściej nie działa wcale. Oczywiście podobnie gdy brama nie jest ustawiona przy ręcznym IP.
 
Odpowiedź
  


Skocz do:


Przeglądający: 2 gości