• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Вопрос Запрос данных с web-сервера

nik19

New member
Здравствуйте, помогите пожалуйста разобраться, есть свой сервер на бесплатном хостинге, там две кнопки radio со значениями 0 и 1 и отправка значения в файл txt. Код вывода значения add_data.php для esp8266:
PHP:
<?php
    $myFile = "txt/out-1.txt";
        $fh = fopen($myFile, 'r');
        $theData = fread($fh, filesize($myFile));
        fclose($fh);
        echo $theData;
?>
Хочу в зависимости от полученного значения включать светодиод через gpio2. В монитор порта выводится полученное значение, но на ножке оно не меняется, подскажите пожалуйста, в чем ошибки кода.
Код:
#include <ESP8266WiFi.h>

const char* ssid = "****";
const char* password = "****";
const char* host = "example.com";
int value=0;
int led=2;

void setup()
{
Serial.begin(115200);
  Serial.println();
   Serial.printf("Connecting to %s ", ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println(" connected");
pinMode( led, OUTPUT);
  digitalWrite(led, LOW);
}
void loop()
{
WiFiClient client;
  Serial.printf("\n[Connecting to %s ... ", host);
    if (client.connect(host, 80))
{

    client.print( "GET /add_data.php?");
    client.println( " HTTP/1.1");
    client.print( "Host: " );
    client.println(host);
    client.println( "Connection: close" );
    client.println();
    client.println();
    delay(200);
 
      while (client.available())
{
  String line = client.readStringUntil('\n');
        Serial.println(line);
      char c = client.read();
        if ( c=='1')
        {
        value=1;
        }
        if ( c=='0')
        {
         value=0;
        }
      }
      client.stop();
      client.flush();
      delay(100);
  }
  else
  {
   client.stop();
   delay(1000);
   client.connect(host, 80);
  }

  if ( value==1)
        {
        digitalWrite (led, HIGH);
        }
        else
        {
        digitalWrite(led, LOW);
        }
  delay(10000);
}
 

CodeNameHawk

Moderator
Команда форума
  • String line = client.readStringUntil('\n');
  • Serial.println(line);
Вы вычитали все в line, ее и разбирайте.
Или выкиньте эти две строки и поправьте код поиска, если нашли 1 включили, если нашли ноль выключили.
(а то у вас : если нашли 1 включили, а если не нашли выключили)
 
Последнее редактирование:

nik19

New member
Вы вычитали все в line, ее и разбирайте.
Или выкиньте эти две строки и поправьте код поиска, если нашли 1 включили, если нашли ноль выключили.
(а то у вас : если нашли 1 включили, а если не нашли выключили)
Большое спасибо за ответ.
Оказалось, что в ответ на запрос сервер помимо значения отправляет еще и другие цифры, из-за этого на gpio2 всегда был ноль. Вы не можете пожалуйста объяснить с чем связаны числа 3 и 0 между значением?

Код:
HTTP/1.1 200 OK

Connection: close

Date: Thu, 13 Dec 2018 19:55:10 GMT

Server: Apache

Transfer-Encoding: chunked

Content-Type: text/html; charset=UTF-8

Via: 1.1 vegur



3


1


0
 

CodeNameHawk

Moderator
Команда форума
Вы не можете пожалуйста объяснить с чем связаны числа 3 и 0 между значением?
Сохраните полученные данные и откройте их в HEX редакторе, возможно там перевод строки и возврат каретки, а возможно это кодировка UTF-8
 
Сверху Снизу