Перейти к содержанию
    

ESP12E сервер.

Сервер это громко сказано. Задача - ввести десяток параметров со странички открытой в браузере.

 

Проблема в том, что я могу сгенерить только 7 окон ввода. Поскольку передать за один раз я могу только 2К. Пробовал разбить на передачу в два массива - не получилось.

ESP настроена как точка доступа

	printf("\rServer!\r");					//
	WiFi_check_with_cmd("AT+RST\r\n","ready",CMD, DEFAULT_TIMEOUT);
	//WiFi_check_with_cmd("AT+CIPCLOSE\r\n","OK\r\n",CMD, DEFAULT_TIMEOUT); 					//Set IP address of softAP, save as default
	WiFi_check_with_cmd("ATE1\r\n", "OK\r\n", CMD, DEFAULT_TIMEOUT);
	WiFi_check_with_cmd("AT+CWMODE=2\r\n","OK\r\n",CMD, DEFAULT_TIMEOUT); 						//2 : softAP mode
	WiFi_check_with_cmd("AT+CWDHCP=0,1\r\n","OK\r\n",CMD, DEFAULT_TIMEOUT); 					//0 : set soft-AP, 1 : Enable DHCP 
	WiFi_check_with_cmd("AT+CIPAP=\"10.10.10.100\"\r\n","OK\r\n",CMD, DEFAULT_TIMEOUT); 		//Set IP address of softAP, save as default
	WiFi_check_with_cmd("AT+CIPMUX=1\r\n","OK\r\n",CMD, DEFAULT_TIMEOUT); 						//Set multiple connections mode
//Для запуска сервера модуль должен быть в режиме множественных подключений AT+CIPMUX=1
	WiFi_check_with_cmd("AT+CIPSERVER=1,80\r\n","OK\r\n",CMD, DEFAULT_TIMEOUT); 				//Configure as server
	WiFi_check_with_cmd("AT+CWSAP=\"COOLER\",\"12345678\",4,3\r\n","OK\r\n",CMD, DEFAULT_TIMEOUT); //Default config of softAP mode

Поля ввода - вывода генерятся программно:

	Lenth = GenerateGet(SprintFBUF,        "Year");			//Название метода GET
	Lenth = GenerateCURRField(SprintFBUF,  "Year", Yar);	//Вывод текущего значения параметра
	Lenth = GenerateInputField(SprintFBUF, "Year", Yar);	//Поле ввода и значение, подставляемое в поле ввода
	Lenth = GenerateKnob(SprintFBUF,       "Save Year");	//Кнопка и ее название

В итоге все выводится в порт ESP:

	Lenth = ADDBody(SprintFBUF,   	  "</table><br><br><table align=\"center\"><tr><td><form method='get'action='changemode'>");
	Lenth = ADDBody(SprintFBUF,   	  "</form></tr></td></table></body></html>");	
	CalcLength(SprintFBUF);					//
	Internet_Send((const char*)SprintFBUF, Lenth);

Сам код вывода:

	char num[6];									//
    if(len > 0)										//
		{											//
			WiFi_send_cmd("AT+CIPSEND=0,");	//Для станции
			sprintf(num,"%d", len);					//
			WiFi_send_cmd(num);					//
			if(!WiFi_check_with_cmd("\r\n",">",CMD, DEFAULT_TIMEOUT))
				{									//
					return 0;						//
				}									//
			HAL_Delay(400);							//
			int i;									//
				for(i = 0; i< len; i++)				//
					{								//
						if(!(i%200)) {HAL_Delay(50);}//Чтобы не делать длинный кольцевой буфер
						WIFI_Putchar(str[i]);		//
					}								//
			if(!WiFi_wait_for_resp("SEND OK\r\n", DATA, DEFAULT_TIMEOUT * 5))
				{									//
					return 0;						//
				}									//
		}											//
    return len;										//

Но если я дважды вызываю AT+CIPSEND=0,454, вторая часть не передается, пишет Link Error. Еще часто идут запросы GET /favicon.ico. Я на них тоже отвечаю основной страницей. Наверно это неправильно, но не знаю как правильно.

 

В итоге вот что получается:

Screenshot_2018-11-15-19-40-18.png.1cfebf78095febcb40bea25e9c8047e1.png

Изменено пользователем Димон Безпарольный

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сделайте статическую страницу, а значения передавайте через отдельный запрос (json, xml или что удобнее). А на favicon.ico отправляйте картинку или 404

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 minutes ago, x893 said:

Сделайте статическую страницу, а значения передавайте через отдельный запрос (json, xml или что удобнее). А на favicon.ico отправляйте картинку или 404

Мне бы об этом где - то почитать. Это мой первый подобный проект... Как вообще такие сервера делаются...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сервер доделал, работает. Помогло это:

 

https://htmlweb.ru/html/text.php

 

 

Выбрал POST. Почему - то при вводе текста на терминал выводится совсем иное. Например если ввести 8:30-21.01, на терминал выводится 8%3A30-21%3A01.

Проблема с кодировкой? Можно как - то это победить?

Изменено пользователем Димон Безпарольный

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 minutes ago, Димон Безпарольный said:

%3A

HTMLEncode / HTMLDecode

UrlEncode / UrlDecode

%3A = ':'

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 minutes ago, x893 said:

HTMLEncode

%3A = ':'

Это я понял. Если HTML так кодирует, значит непобедимо. Только непонятно зачем... Рабор такой строки добавляет головной боли.

Изменено пользователем Димон Безпарольный

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

21 minutes ago, Димон Безпарольный said:

Это я понял. Если HTML так кодирует, значит непобедимо. Только непонятно зачем... Рабор такой строки добавляет головной боли.

 

Всё победимо. И уже это побеждено 100500 раз.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 minute ago, x893 said:

Всё победимо. И уже это побеждено 100500 раз.

Краем глаза можно почитать об этом?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Конечно. Исходник HTMLDecode/UrlDecode на любом понятном языке программирования.

Или RFC для HTTP протокола.

Можно здесь внимательно

http://www.asciitable.com/

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...