• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Ajax на AT- командах. Как реализовать ?

H45

New member
Здраствуйте . Никак не получается запустить ajax . Помогите пожалуйста советом .
используется связка STM32(главный контроллер) и esp 8266 на AT командах
STM32 формирует страницу и передает в esp 8266

HTTP/1.0 200 OK
Server: ESP8266
Content-Type: text/html
<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=utf-8\">
<title>STM32 SNF</title>
</head>
<body>
<h1> ПРОБА 1 </h1>
<h3> AJAX</h3>
счет:<span id="adc_val33">100</span>
<SCRIPT>
setInterval(function()
{
getData(); // интервальный запрос данных
},5000);
function getData()
{
var xhttp=new XMLHttpRequest();
xhttp.onreadystatechange=function()
{
if (this.readyState == 4 && this.status == 200)
{
document.getElementById ('adc_val33').value=this.responseText;
}
};
xhttp.open('GET', 'adc_value',true); // браузер запросил данные
xhttp.send();
}
</SCRIPT>
</body>\
</html>

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
при поступлении запроса adc_value
stm32 отвечает


if(check_answer("adc_value ",1)==1) // ждем запроса данных
{
adrr=strstr(usartRxBuf,"+IPD,"); // вычисляю в запросе номер канала от 0 до 4 (ограничение до 5 )
adrr=adrr+5;
p1=*adrr;
clear_rx_buf(); // очистим входной буфер
adc_value=10; // значение ацп збил вручную .
adc_value_len = strlen(adc_Value); // длинна сообщения
sprintf(adc_Value,"%d%c",adc_value,'\0'); // формируем строку на передачу
sprintf(sendbuf,"%s%c%c%d%s","AT+CIPSEND=",p1,',',2,"\r\n");// говорим esp что хотим ответить
usart1_send_string(sendbuf); // передаем это в есп
if(check_answer(">",100)==1) // ждем приглашения
{
usart1_send_string(adc_Value); // шлем данные ацп
if(check_answer("SEND OK",500)==1) // есп приняла данные - закрываем канал .
{
if (p1=='0') USART_SendStr(close_Connection);
if (p1=='1') USART_SendStr(close_Connection_1);
if (p1=='2') USART_SendStr(close_Connection_2);
if (p1=='3') USART_SendStr(close_Connection_3);
if (p1=='4') USART_SendStr(close_Connection_4);
}
}


проблема в том что данные не меняются . Я при инициализации отправил 100 . а передаю 10.

Лог самого общения в терминале

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

+IPD,0,278:GET /adc_value HTTP/1.1

Host: 192.168.4.1

Connection: keep-alive

User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36

Accept: */*

Referer: http://192.168.4.1/

Accept-Encoding: gzip, deflate

Accept-Language: ru





AT+CIPSEND=0,2



OK



>

Recv 2 bytes



SEND OK

AT+CIPCLOSE=0

0,CLOSED



OK




//////////////////////////////////////////
 

H45

New member
Мне нужно динамическое обновление страницы.
Также непонятно . Если браузер запросил данные на несколько параметров в разное время . Как должен передать их микроконтроллер ?
 

H45

New member
Есть небольшое продвижение.

Если на запрос от браузера просто передать цифровое значение "10" ничего не выходит .

Если в браузере хром зайти на вкладку "посмотреть код " . Справа вкладка NETWORK . Можно анализировать запросы браузера . И ответы от сервера. Так вот . На запрос главной страницы есть статус 200. На запрос adc_value стоит статус FAILED. Во вкладке браузера Response пусто .

Я обернул ответ в такую конструкцию "HTTP/1.0 200 OK\r\nServer: ESP8266\r\nContent-Type: text/html\r\n\r\n 10"
Наконец значение в браузере обновилось !

Но мне непонятно , если браузер запросит несколько значений с небольшим интервалом . Допустим ява скрипт сначала запросит
значение ацп , микроконтроллер не успеет ответить
через 0,1 сек браузер запросит положение концевиков .

как сформировать ответ чтобы браузер понял вот значение ацп = 10 , положение концевиков = 1.
 

H45

New member
Попробуйте послать вместо 10 - ацп = 10, ков = 1, возможно надо будет заменить символы пробелов числовыми значениями.
Переходите на ардуино, разгрузите стм.
https://startingelectronics.org/tut...-server-tutorial/SD-card-AJAX-XML-web-server/
https://www.youtube.com/@user-eo1gj4rz1r
Получается в коде страницы (через скрипт ) нужно обрабатывать ответ от сервера . То есть это не автоматизировано в протоколе обмена ?
 
Сверху Снизу