Как использовать php file_get_contents с ESP8266

Часть моего проекта требует получения данных из ESP8266 с помощью PHP-скрипта. Я протестировал этот скрипт и не знаю, почему я могу получить данные в элементе iframe и ничего с помощью функции file_get_content. В элементе iframe мой браузер отображает «Привет, мой друг!» как хотелось:

Режим сервера ESP8266 по адресу 192.168.4.1, часть кода:

String webpage = "<div id='div1'>Hello</div>";
webpage += "<div id='div2'>my</div>";
webpage += "<div id='div3'>friend!</div>";

String cipSend = "AT+CIPSEND=";
cipSend += 0;
cipSend += ",";
cipSend +=webpage.length();
cipSend +="\r\n";

sendData(cipSend,1000,DEBUG);
sendData(webpage,1000,DEBUG);
sendData("AT+CIPCLOSE=0\r\n", 100, DEBUG);

PHP-скрипт:

<html>
    <body>
    <iframe src="http://192.168.4.1/?cmd=SS,0,0,"></iframe>

 <?php

 $url="http://192.168.4.1/?cmd=SS,0,0,";
 $lines_string = file_get_contents($url);
 echo htmlspecialchars($lines_string);

?>
    </body>
</html>

Если я заменю URL на:

$url=https://arduino.stackexchange.com

Он работает со скриптом PHP, так в чем проблема с ESP8266?

, 👍0

Обсуждение

Где работает PHP? Я думаю, что ваш PHP работает на удаленном сервере, а ESP находится в локальной сети (за NAT) с локальным IP-адресом. Удаленный сервер не может получить доступ к вашей локальной сети, а ваш браузер — может., @Gerben

Сценарий Php работает на компьютере Linux с домашним сервером PHP. Я могу отправить все, что захочу, на ESP8266 по Wi-Fi., @Teddol

Ваш домашний сервер находится в той же сети (/подсети)? Можете ли вы свернуть/gweet URL-адрес со своего домашнего сервера?, @Gerben

Нет домашней сети. Просто php-сервер (локальный хост) и ESP8266 в качестве точки доступа., @Teddol


1 ответ


Лучший ответ:

1

Чтобы обработать запрос с помощью php, вы должны отправить действительный ответ HTTP. Браузер терпит слишком многое.

String webpage = "HTTP/1.1 200 OK\r\nConnection: close\r\n\r\n";
webpage += "<div id='div1'>Hello</div>";
,

ИДЕАЛЬНЫЙ !!! Я могу сказать «Привет» с помощью <код> file_get_contents("http://192.168.4.1/?cmd=SS,0,0,"); </код>, @Teddol