Html и arduino

Тема в разделе "Arduino & Shields", создана пользователем Simon, 21 июн 2020.

  1. Simon

    Simon Нерд

    Доброго времени суток, уважаемые форумчане.
    Пришла мне в голову мысль сделать систему контроля ресурсов загородного дома(газ, вода и т.д). Купил счётчик импульсов для газового счётчика и импульсный счётчик воды. Решил сделать эту систему на Arduino UNO, т.к платить 7 тысяч рублей за контроллер был не готов. Со считыванием импульсов у меня проблем не возникло, но позже, было решено добавить в HTML сервер, поднятый на дуине, поле для ввода ранних значений счётчика в переменную и кнопку отправить. С этим у меня уже и возникли проблемы. Зашёл в тупик и не знаю как быть дальше. Прошу помощи
     
  2. NikitOS

    NikitOS Public enemy Администратор

    А в чем именно проблемы?
     
  3. ИгорьК

    ИгорьК Оракул Модератор

    https://hi-lab.ru/arduino-mega-server

    Это для таких мегакрутых проектов ссылочка. "Фантастические возможности уже сегодня!"
     
  4. parovoZZ

    parovoZZ Гуру

     
    NikitOS нравится это.
  5. Simon

    Simon Нерд

    Cпасибо большое! Буду пробовать

    Проблема в считывании числа из формы, которое вводится в него. То есть ввёл число, нажал отправить и у меня должно к общему значению счётчика должно добавится то значение, которое я ввёл из формы
     
  6. NikitOS

    NikitOS Public enemy Администратор

    А причем тут мы — не ясно.
    Здесь могут помочь найти и исправить ошибки в существующем коде, а в теме кода не дали. Если нужно, чтобы сделали за Вас — Закажу проект.
     
  7. parovoZZ

    parovoZZ Гуру

    Конкатенация строк. Не, не слышал?
     
  8. Simon

    Simon Нерд

    Код (C++):
    #include <SPI.h>
    #include <Ethernet.h>

    byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
    //byte gateway[] = { 192, 168, 0, 1 }; // internet access via router
    //byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
    EthernetServer server(80); //server port
    IPAddress ip(192, 168, 0, 89);

    String readString;
    String intString;
    int value;
    int value1;
    int value2;

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

    void setup(){

      pinMode(8, OUTPUT); //pin selected to control
      //start Ethernet
      Ethernet.begin(mac, ip);
      server.begin();

      //enable serial data print
      Serial.begin(9600);
      Serial.println(Ethernet.localIP());
    }

    void loop(){
      EthernetClient client = server.available();
      if (client) {
        while (client.connected()) {
          if (client.available()) {
            char c = client.read();

            if (readString.length() < 100) {

              //store characters to string
              readString += c;
              Serial.print(c);
            }

            if (c == '\n') {

              Serial.println(readString); //see what was captured

              client.println("HTTP/1.1 200 OK");
              client.println("Content-Type: text/html");
              client.println();

              client.println("<HTML>");
              client.println("<HEAD>");
              client.println("<TITLE>GET page</TITLE>");
              client.println("</HEAD>");
              client.println("<BODY>");

              client.println("<FORM ACTION='/' method=get >"); //uses IP/port of web page
              client.println("<INPUT TYPE=NUMBER NAME='VALUE' VALUE="+intString+" ><BR>");
              intString == intString;
              client.println("<INPUT TYPE=SUBMIT NAME='submit' VALUE='Send'>");
              client.println(value2);


              client.println("</FORM>");

              client.println("<BR>");

              client.println("</BODY>");
              client.println("</HTML>");

              delay(1);
              //stopping client
              client.stop();

              /////////////////////
              if(readString.indexOf(value) >0)//checks for on
              {        
                Serial.print(value2);
                digitalWrite(8, HIGH);    // set pin 5 high
                Serial.println(" On");
              }
              if(readString.indexOf("off5") >0)//checks for off
              {
                digitalWrite(8, LOW);    // set pin 5 low
                Serial.println("Led Off");
              }
              if (c == '?')
              {
              }
              //clearing string for next read
              readString="";
           
            }
          }
        }
      }
    }
     
    Последнее редактирование: 21 июн 2020
  9. Simon

    Simon Нерд

    Всё равно какая то путаница. Я ввёл значение в HTML поле и нажал "send". После чего, в мониторе последовательного порта у меня появился ответ в виде строки:
    GET /?VALUE=12312&submit=Send HTTP/1.1
    Подскажите пожалуйста, как мне выцепить VALUE из этой строки?
     
  10. parovoZZ

    parovoZZ Гуру

    В мониторе последовательного порта только самостоятельный парсинг.
     
    NikitOS нравится это.
  11. Simon

    Simon Нерд

    Не совсем понимаю...
     
  12. NikitOS

    NikitOS Public enemy Администратор

    И что не понятно? Как строки парсить? А что гугл говорит?
     
    Simon нравится это.
  13. Simon

    Simon Нерд

    Я в программировании новичок, поэтому не особо вас понимаю. Не могли бы вы показать на примере?
     
  14. NikitOS

    NikitOS Public enemy Администратор

    Ну вот покажу я пример, а гуглить Вы от этого не научитесь...