• Система автоматизации с открытым исходным кодом на базе 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
Получается в коде страницы (через скрипт ) нужно обрабатывать ответ от сервера . То есть это не автоматизировано в протоколе обмена ?
 
Сверху Снизу