• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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
 
Сверху Снизу