Парсер на w51000

Тема в разделе "Arduino & Shields", создана пользователем Atikin, 17 янв 2020.

  1. Atikin

    Atikin Нуб

    Здравствуйте! Я начинающий в шилде Ethernet Shield W51000. У меня стоит задача отправить данные на сервер, который находится на удаленном хостинге, и принять данные с него. Я нашел только один способ. На сервере у меня находится html код, которых содержит данные для передачи на ардуино и в тоже время принимает данные, которые отправляет ардуино. У меня это получилось, но есть одна проблема: как преобразовать тип байт(html код) в тип string, чтобы в дальнейшем убрать ненужные символы и занести необходимые данные в массив. Короче, мне нужно редактировать полученный html код, но он идет с типом. По сути нужно сделать обычный парсер.
    Byte.
    Возможно есть и другие способы. Это надо решить как можно быстрее, и я буду очень благодарен, если поможете решить проблему или найти другое решение.
    Вот код:
    Код (C++):
    #include <SPI.h>
    #include <Ethernet.h>
    byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

    char server[] = "niktech.site";

    IPAddress ip(192, 168, 0, 177);

    EthernetClient client;

    unsigned long beginMicros, endMicros;
    unsigned long byteCount = 0;
    bool printWebData = true;  // set to false for better speed measurement

    void setup() {
      Serial.begin(9600);
      while (!Serial) {
        ; // wait for serial port to connect. Needed for native USB port only
      }

      // start the Ethernet connection:
      Serial.println("Initialize Ethernet with DHCP:");
      if (Ethernet.begin(mac) == 0) { //1-удачное, 0-неудачное соединение
        Serial.println("Failed to configure Ethernet using DHCP");
        // Check for Ethernet hardware present
        if (Ethernet.hardwareStatus() == EthernetNoHardware) { //существует ли интернет шилд
          Serial.println("Ethernet shield was not found.  Sorry, can't run without hardware. :(");
          while (true) {
            delay(1); // do nothing, no point running without Ethernet hardware
          }
        }
        if (Ethernet.linkStatus() == LinkOFF) {  //LinkOFFэто может означать, что кабель Ethernet отключен или неисправен
          Serial.println("Ethernet cable is not connected.");
        }
        // try to congifure using IP address instead of DHCP:
        Ethernet.begin(mac, ip);
      } else {
        Serial.print("  DHCP assigned IP ");
        Serial.println(Ethernet.localIP()); //возвращает IP адрес
      }
      // give the Ethernet shield a second to initialize:
      delay(1000);
      Serial.print("connecting to ");
      Serial.print(server);
      Serial.println("...");

      // if you get a connection, report back via serial:
      if (client.connect(server, 80)) { //если прошло соединение
        Serial.print("connected to ");
        Serial.println(client.remoteIP()); //возвращает IP адрес удаленного соединения
        // Make a HTTP request:
        client.println("GET /test?t=28 HTTP/1.1");
        client.println("Host: niktech.site");
        client.println("Connection: close");
        client.println();
      } else {
        // if you didn't get a connection to the server:
        Serial.println("connection failed");
      }
      beginMicros = micros(); //Возвращает количество микросекунд, прошедших с момента начала выполнения программы
    }

    void loop() {
      // if there are incoming bytes available
      // from the server, read them and print them:
      int len = client.available(); //количество байт, принятых клиентом от удаленного сервера, с которым установлено соединение
      if (len > 0) {
        byte buffer[100];
        if (len > 100) len = 100;
        client.read(buffer, len); //считывает очередной байт из набора данных, принятых клиентом от удаленного сервера.
        if (printWebData) {
          Serial.println("next");
          Serial.write(buffer, len); // show in the serial monitor (slows some boards)
        }
        byteCount = byteCount + len; //кол-во байт
      }

      // if the server's disconnected, stop the client:
      if (!client.connected()) {
        endMicros = micros();
        Serial.println();
        Serial.println("disconnecting.");
        client.stop();
        Serial.print("Received ");
        Serial.print(byteCount);
        Serial.print(" bytes in ");
        float seconds = (float)(endMicros - beginMicros) / 1000000.0;
        Serial.print(seconds, 4);
        float rate = (float)byteCount / seconds / 1000.0;
        Serial.print(", rate = ");
        Serial.print(rate);
        Serial.print(" kbytes/second");
        Serial.println();

        // do nothing forevermore:
        while (true) {
          delay(1);
        }
      }
    }
    Я прокомментировал каждую строчку, которую я не понял.
     
  2. NikitOS

    NikitOS Король шутов Администратор

    А может не сходить с ума с парсингом html и выкидывать в ответ json?
     
    DetSimen и parovoZZ нравится это.