esp8266, передача данных

lex-sh
Offline
Зарегистрирован: 09.05.2020

Привет всем.
Помогите разобраться, куда дальше копать не знаю.
ESP8266, банальная передача температуры get запросом на сервер.
Подключается к точке доступа, получает ip.
Далее в CoolTerm:
AT+CWMODE=1
OK
AT+CIPMODE=0
OK
AT+CIPMUX=0
OK
AT+CIPSTART="TCP","мойсервер.org",80

OK
AT+CIPSEND=71
OK
>
Recv 71 bytes

SEND OK
CLOSED

И все. ни ответа, ни записи в бд

запрос:
GET http://мойсервер.org/weather/?temp=15 HTTP/1.1
Host: мойсервер.org

Если захожу по строке из запроса через браузер, все ок, температура в бд пишется. Запрос взял из Fiddler-a. Но пробовал и другие варианты, например
GET /weather/?temp=15 HTTP/1.1
Host: мойсервер.org

Тупик...

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

А доступ к логам апача (или что там?) имеется? 

lex-sh
Offline
Зарегистрирован: 09.05.2020

BOOM пишет:

А доступ к логам апача (или что там?) имеется? 

[09/May/2020:16:27:07 +0300] "GET http://мойсервер.org/weather/?temp=15 HTTP/1.1" 408 0 "-" "-" "-"

 [09/May/2020:16:29:40 +0300] "GET /weather/?temp=27 HTTP/1.1" 200 4398 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 YaBrowser/20.3.2.242 Yowser/2.5 Safari/537.36" "-"

nginx

первая запись - из esp, вторая - из браузера

Ошибка 408 - неполный запрос..что ж еще передать...

 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Ошибка 408 Request Timeout - превышение времени ожидания ответа от сервера на запрос (тот самый get-запрос). 
 

Почему запрос из браузера по другому выглядит? Я имею ввиду адрес относительный, а не абсолютный. Это одна и таже машина?

lex-sh
Offline
Зарегистрирован: 09.05.2020

BOOM пишет:

Ошибка 408 Request Timeout - превышение времени ожидания ответа от сервера на запрос (тот самый get-запрос). 
 

Почему запрос из браузера по другому выглядит? Я имею ввиду адрес относительный, а не абсолютный. Это одна и таже машина?

Залил уже в esp свой скетч из Arduinо IDE, и все равно 408-ошибка.

 [10/May/2020:12:26:31 +0300] "GET /weather?temp=40 HTTP/1.1" 408 0 "-" "-" "-"
 
[10/May/2020:12:27:10 +0300] "GET /weather?temp=40 HTTP/1.1" 200 4398 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 YaBrowser/20.3.2.242 Yowser/2.5 Safari/537.36" "
 
Последняя строка - это из браузера. Не знаю почему теряется в запросе хост и закрытие соединения. с другой стороны это в лог и из браузера не пишется.
BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Пробовал искусственно 403ю к примеру или 404ю вызвать? Ну там запрос, к примеру, "GET http://ip/combo" ?

Какой результат?

lex-sh
Offline
Зарегистрирован: 09.05.2020

BOOM пишет:

Пробовал искусственно 403ю к примеру или 404ю вызвать? Ну там запрос, к примеру, "GET http://ip/combo" ?

Какой результат?


Да там все просто оказалось. Нужно было в конце запроса две пары \r\n. Сервер ждал окончания запроса и закрывал соединение по тайм-ауту.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Спасибо что поделился решением! Я думал о подобном, поэтому и предложил «левый запрос», молодец, что сам разобрался. 

lex-sh
Offline
Зарегистрирован: 09.05.2020

Эту проблему-то решил. Но возникла другая. У меня связка UNO + esp по Serial, ,,и если раньше передать значение переменной температуры было просто с помощью АТ команд сразу в get запросе, то сейчас, когда перепрошил модуль для соединения без АТ-команд, нужно как-то это значение туда передать

Правильно ли я понимаю, что для этого на Ардуино нужно создать ещё один софт serial, например espport (10, 11), соединить ее с модулем (rx-tx, tx-rx) и при необходимости писать в него температуру, а в родном порту модуля Serial ловить ее?

b707
Offline
Зарегистрирован: 26.05.2017

lex-sh пишет:
Правильно ли я понимаю, что для этого на Ардуино нужно создать ещё один софт serial, например espport (10, 11), соединить ее с модулем (rx-tx, tx-rx) и при необходимости писать в него температуру, а в родном порту модуля Serial ловить ее?

зачем второй порт? Что мешает передавать и данные и команды по одному порту?