server.arg
- Войдите на сайт для отправки комментариев
Ср, 21/04/2021 - 10:23
Доброго времени суток, есть код обработчик:
void handleSave() {
if (server.arg("hh")!= ""){
Serial.println("Hours: " + server.arg("hh"));
}
Код написан с помощью библиотеки etherShield.h и ETHER_28J60.h
Мне надо написать так но с помощью библиотеки UIPEthernet.h
Кто может помочь?(
Общий код программы:
// WEB сервер, управляет светодиодом
#include <SPI.h>
#include <UIPEthernet.h>
// определяем конфигурацию сети
byte mac[] = {0xAE, 0xB2, 0x26, 0xE4, 0x4A, 0x5C}; // MAC-адресадрес
EthernetServer server(80); // создаем сервер, порт 80
EthernetClient client; // объект клиент
boolean flagEmptyLine = true; // признак строка пустая
char tempChar;
char urnFromRequest[51]; // строка URN из запроса
boolean urnReceived= false; // признак URN принят
unsigned int indUrn; // адрес в строке URN
void setup() {
Ethernet.begin(mac); // инициализация контроллера
server.begin(); // включаем ожидание входящих соединений
Serial.begin(9600);
Serial.print("Server address:");
Serial.println(Ethernet.localIP()); // выводим IP-адрес контроллера
Serial.print("");
pinMode(2, OUTPUT); // вывод светодиода
}
void loop() {
client = server.available(); // ожидаем объект клиент
if (client) {
flagEmptyLine = true;
urnReceived = false;
indUrn=0xffff;
Serial.println("New request from client:");
while (client.connected()) {
if (client.available()) {
tempChar = client.read();
Serial.println(tempChar);
// прием URN
if( urnReceived == false ) {
if( indUrn == 0xffff ) {
// пропуск метода
if( tempChar == '/' ) indUrn=0;
}
else {
// запись строки
if( tempChar == ' ' ) {
// URN закончен
urnFromRequest[indUrn]=0;
urnReceived = true;
}
else {
// загрузка символа URN в строку
urnFromRequest[indUrn] = tempChar;
indUrn++;
if( indUrn > 49 ) {
// переполнение
urnFromRequest[50]=0;
urnReceived = true;
}
}
}
}
if (tempChar == '\n' && flagEmptyLine) {
// управление светодиодом
if( strcmp(urnFromRequest, "ON") == 0) digitalWrite(2, HIGH);
else if( strcmp(urnFromRequest, "OFF") == 0) digitalWrite(2, LOW);
// пустая строка, ответ клиенту
client.println(F("HTTP/1.1 200 OK")); // стартовая строка
client.println(F("Content-Type: text/html; charset=utf-8")); // тело передается в коде HTML, кодировка UTF-8
client.println(F("Connection: close")); // закрыть сессию после ответа
client.println(); // пустая строка отделяет тело сообщения
client.println(F("<!DOCTYPE HTML>")); // тело сообщения
client.println(F("<html>"));
client.println(F("<font size=\"5\">"));
// состояние светодиода
if( digitalRead(2) == HIGH ) client.println(F("Светодиод включен"));
else client.println(F("Светодиод выключен"));
client.println(F("</font><br><br><font size=\"4\"><a href=\"/ON\"><button><font size=\"4\">Включить светодиод</font></button></a></font><br><br><font size=\"4\"><a href=\"/OFF\"><button><font size=\"4\">Выключить светодиод</font></button></a></font>"));
client.print(F("<form method=\"post\" name=\"form\"><br>Время:<input name=\"fname\" type=\"clock\" value=\"\"><input type=\"submit\" name=\"send\" value=\"Отправить\"></form>"));
client.println(F("<input type=\"clock\" name=\"date_hh\" id=\"date_hh\" >"));
client.println("</html>");
client.println(F("<script src=\"https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js\"></script>"));
client.println(F("<script>"));
client.println(F("var hh;"));
client.println(F("$('#save_button').click(function(e){"));
client.println(F("e.preventDefault();"));
client.println(F("hh = $('#date_hh').val();"));
client.println(F("$.get('/save?hh=' + hh, function(data){"));
client.println(F("console.log(data);"));
Serial.println(urnFromRequest);
break;
}
if (strcmp(urnFromRequest,"hh") != ""){
Serial.println("Hours: " + strcmp(urnFromRequest,"hh"));
}
if (tempChar == '\n') {
// новая строка
flagEmptyLine = true;
}
else if (tempChar != '\r') {
// в строке хотя бы один символ
flagEmptyLine = false;
}
}
}
delay(1);
// разрываем соединение
client.stop();
Serial.println("Break");
}
}
Помочь в чём - дописать 1000 строк для парсинга HTTP?