• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

RTL + Zyxel G-202 + XP

sharikov

Active member
Портировал esphttpd на rtl, проверяю. Wifi в режиме AP (мне так надо).
Со смартфоном работает.
Решил проверить на десктопе. Под рукой был древний комп с XP и свистком Zyxel G-202.
WPA2-AES он не умеет, поставил режим OPEN.
Пинг идет исправно, но после первого http запроса хоть браузером, хоть Wget модуль затыкается без сообщений об ошибках, причем jtag отваливается. Запрос выполняется.
Оно валится доже после сообщения 404 Not found.

А с андроидом не зависает .

Куда копать ?

---
Снял лог. файл aaa запрашивает штатный броузер андроид, wget_xp - wget на xp:
Код:
esphttpd: active and listening to connections.
Httpd init

RTL8195A[Driver]: +OnAuth: **:**:**:**:**:**

RTL8195A[Driver]: +OnAssocReq

RTL8195A[Driver]: +OnAuth: **:**:**:**:**:**

RTL8195A[Driver]: +OnAssocReq
Conn req from  192.168.3.2:1680, using pool slot 0
httpserver acpt index 0 sockfd 1!
URL = /aaa
Is url index 0
/aaa not found. 404!
Pool slot 0 is done. Cleaning up for next req
Conn req from  192.168.3.3:56726, using pool slot 1
httpserver acpt index 1 sockfd 2!
URL = /wget_xp
Is url index 0
/wget_xp not found. 404!
Pool slot 1 is done. Closing.
Pool slot 1: socket closed.
[зависло]
 
Последнее редактирование:

pvvx

Активный участник сообщества
Пинг идет исправно, но после первого http запроса хоть браузером, хоть Wget модуль затыкается без сообщений об ошибках, причем jtag отваливается. Запрос выполняется.
Оно валится доже после сообщения 404 Not found.

А с андроидом не зависает .

Куда копать ?
Не зависло, а socket closed.
Испугался тот esphttpd вашего компа. :)
 

sharikov

Active member
Не зависло, а socket closed.
Испугался тот esphttpd вашего компа. :)
Поставил на андроид busybox и Wget - не виснет. Проверил со всеми устройствами и браузерами какие нашел в доме - не виснет. Закрытие сокета различается, но во всех случаях отрабатывает корректно.
Комп с которым виснет похоже какой-то заколдованный, придется тестить на нем.
 

pvvx

Активный участник сообщества
Портировал esphttpd на rtl, проверяю. Wifi в режиме AP (мне так надо).
В Arduino Ameba беды c AP. Кроме того что не сменить ip 192.168.1.1 который у них ставиться по умолчанию и прописан во многих либах, сама AP не запускается правильно без шаманств. :) В SDK этого бардака нет.
 

sharikov

Active member
В Arduino Ameba беды c AP. Кроме того что не сменить ip 192.168.1.1 который у них ставиться по умолчанию и прописан во многих либах, сама AP не запускается правильно без шаманств. :) В SDK этого бардака нет.
Использую SDK из RTL00MP3. ip=192.168.3.1 менять еще не пробовал.
 

pvvx

Активный участник сообщества
Использую SDK из RTL00MP3. ip=192.168.3.1 менять еще не пробовал.
В SDK всё меняется, в Arduino не меняется. Исходников там нет - линкуются либы и в них забит 192.168.1.1.
192.168.3.1 - это я поставил. У меня несколько сетей и всегда активна внутренняя 192.168.1.1. Если AP с таким-же номером - то сеть падает...
Вообще в SDK было два хидера с назначением ip - тоже убрал, а то бардак. Одни части собирались с одним ip - другие с другим :)
 
Последнее редактирование:

sharikov

Active member
Повторил на винде, думаю что пофиксил. Ошибка при закрытии сокета в файле httpd-freertos.c, должен проявляться и на esp.
Firefox на win vista открываем http://192.168.3.1/
Код:
Conn req from  192.168.3.3:63946, using pool slot 0
httpserver acpt index 0 sockfd 1!
URL = /
Is url index 0
Is url index 1
Pool slot 0 is done. Cleaning up for next req
URL = /index.tpl
Is url index 0
Is url index 2
Pool slot 0 is done. Cleaning up for next req
URL = /style.css
Is url index 0
Is url index 3
Pool slot 0 is done. Cleaning up for next req
Conn req from  192.168.3.3:64202, using pool slot 1
httpserver acpt index 1 sockfd 2!
Conn req from  192.168.3.3:64458, using pool slot 2
httpserver acpt index 2 sockfd 3!
URL = /cats/cross-eyed-cat.jpg
Is url index 0
Is url index 3
URL = /cats/kitten-loves-toy.jpg
Is url index 0
Is url index 3
Conn req from  192.168.3.3:64714, using pool slot 3
httpserver acpt index 3 sockfd 4!
URL = /cats/junge-katze-iv.jpg
Is url index 0
Is url index 3
Pool slot 3: socket closed.
Pool slot 2 is done. Cleaning up for next req
Pool slot 0 is done. Cleaning up for next req
Pool slot 1 is done. Cleaning up for next req
Pool slot 2: socket closed.
Pool slot 1: socket closed.
Pool slot 0: socket closed.
wget открываем тот же url:
Код:
Conn req from  192.168.3.3:65482, using pool slot 0
httpserver acpt index 0 sockfd 1!
URL = /
Is url index 0
Is url index 1
Pool slot 0 is done. Closing.
Pool slot 0: socket closed.
Conn req from  192.168.3.3:203, using pool slot 0
httpserver acpt index 0 sockfd 1!
URL = /index.tpl
Is url index 0
Is url index 2
Pool slot 0 is done. Closing.
Pool slot 0: socket closed.
 

pvvx

Активный участник сообщества
Повторил на винде, думаю что пофиксил. Ошибка при закрытии сокета в файле httpd-freertos.c, должен проявляться и на esp.
Firefox на win vista открываем http://192.168.3.1/
Во первых оба HTTP Web неполноценные. Разбора заголовков запросов в них нет. Не удивительно, что что-то отваливается.
192.168.3.1 - это ip по умолчанию для первого netif в RTL. Для второго - 192.168.43.1.
Всего у нас там 3 netif-а, если ещё подключен изернет.
Первый netif используется для Station (wlan0), второй - для AP (wlan1), третий - изернет (eth0).
При включении AP подается команда перевода WiFi в режим 3. Тогда AP будет на втором netif c ip 192.168.43.1 и останется возможность включить Station. Если вы запустили AP без указания, что будет возможна ещё и Station, то получите перестановку netif-ов :) Они в SDK не привязаны и надо самому это делать. По этому в AT и SDK можно получить у AP и 192.168.3.1 и 192.168.43.1 - зависит как запускать :) В Arduino 192.168.3.1 нет - он там фиксед на 192.168.1.1. Во первых классы всяких сокетов и другие иниты стартуют до исполнения кода пользователя (C++ :) ) и сменить на ходу ip для AP уже не так просто... как в SDK.

И оставьте GitHub - Spritetm/libesphttpd: Libesphttpd mirror of http://git.spritesserver.nl/libesphttpd.git/ ESP-эшникам. Сокеты жрут память ломтями и нормального web на них не построить под RTOS, если у вас не мегабайты памяти и ГГц на CPU.
 
Последнее редактирование:

sharikov

Active member
192.168.3.1 - это ip по умолчанию для первого netif в RTL. Для второго - 192.168.43.1.
Всего у нас там 3 netif-а, если ещё подключен изернет.
Первый netif используется для Station (wlan0), второй - для AP (wlan1), третий - изернет (eth0).
При включении AP подается команда перевода WiFi в режим 3. Тогда AP будет на втором netif c ip 192.168.43.1 и останется возможность включить Station. Если вы запустили AP без указания, что будет возможна ещё и Station, то получите перестановку netif-ов.
Поддержку перестановки netif написал но в режиме station + ap еще не тестировал.

Запустил Captive portal и websocket из esphttpd.

Пока тестировал заметил что на андроиде от captive portal вреда больше чем пользы. Технически оно работает, но возникают "нюансы" вызванные поведением андроида.
Во-первых при работающем captive portal андроид думает что есть коннект с инетом и уведомляет все приложения. Они начинают толпой ломиться на свои сервера большинство на http и попадают на несчастный esphttpd. Он сразу исчерпывает пул соединений и все. Приложения не успокаиваются и стучатся почти непрерывно.
Второе: штатный браузер андроид все вводимые url пропускает через google.com, причем этот ip либо вшит в браузер либо навечно осел в кэше. При работающем captive portal гугл не открывается и браузер бесится.
Опера работает чуть лучше, но тоже возникают шероховатости.

На писюке "хрен редьки не слаще". При коннекте с AP заменяется системный dns и инет по кабелю отваливается - все dns запросы перенаправляется на wifi.

С учетом "нюансов" не вижу практического применения Captive portal.

mDNS оставил лучшее впечатление в части юзабельности и отсутствия вредных побочных эффектов.
 
Последнее редактирование:
Сверху Снизу