Hola buenas,estoy haciendo un proyecto con nodemcu (esp8266) junto a php y mysql.
Lo principal del proyecto esque desde la pagina web puedes encender una luz etc y lo almacene en la base de datos a la vez enviar datos al arduino y el arduino sea capaz de leer esos datos y enviar.
He conseguido que el arduino envie datos a la pagina web (PHP), el php los lee los guarda en la base de datos.
El problema surge cuando arduino lee las variables php, el cual no las muestra pero si que lee el html y los echo.
utilizo la funcion client.
Codigo
// Juan Antonio Villalpando
// kio4.com
// Cliente web. PHP.
#include <ESP8266WiFi.h>
const char* ssid = "***";
const char* password = "***";
const char* host = "192.168.178.20";
const char* nombre = "Juan";
//const char* ciudad = "Jerez";
const char* ciudad = "Grazalema";
void setup()
{
Serial.begin(115200);
delay(10);
// Conecta a la red wifi.
Serial.println();
Serial.print("Conectando con ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Conectado con WiFi.");
// Esta es tu IP
Serial.print("Esta es tu IP: ");
Serial.print(WiFi.localIP());
}
void loop()
{
delay(5000);
Serial.print("Conectando con ");
Serial.println(host);
// Clase cliente
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
Serial.println("Fallo en la conexión.");
return;
}
// Linea de petición
//String url = "/arduino/respuesta.php";
String url = "/update.php";
url += "?nombre=";
url += nombre;
url += "&ciudad=";
url += ciudad;
Serial.println();
Serial.println(url);
// Esto es lo que se enviará al servidor.
Serial.println();
client.println(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
unsigned long timeout = millis();
while (client.available() == 0) {
if (millis() - timeout > 5000) {
Serial.println(">>> Rebasado 5 segundos.");
client.stop();
return;
}
}
// Lee todas las líneas que ha enviado el servidor.
Serial.println();
Serial.println("Linias enviadas");
using namespace std;
while(client.available()) {
String lineas = client.readStringUntil('\r');
// String lineas = client.read('\r');
Serial.println(lineas);
if(lineas = "opcion:1")
{
//Serial.println("Opcion1.");
}
else if (lineas = "opcion:2")
//Serial.println("Opcion2.");
{
}
Serial.println("Linias enviadas2");
if (Serial.available() > 0) {
byte variable = Serial.read();
Serial.println(variable);
}
}
Serial.println();
Serial.println("Conexión cerrada.");
client.stop();
}
Moderador:
presta atención a la modificación que hice a tu segundo post. No repitas lo que YA se lee arriba.
Y que muestra, no has puesto lo que lee como salida del Monitor Serie como para entender mejor tu comentario.
También indica que debería mostrar.
Gracias por contestar, soy nueva en este foro, para facilitar la lectura pongo como codigo.
Esto es lo que muestra el monitor seral
22:47:29.546 -> Conectando con 192.168.178.20
22:47:29.546 ->
22:47:29.546 -> /update.php?nombre=Juan&ciudad=Grazalema
22:47:29.546 ->
22:47:29.546 ->
22:47:29.546 -> Linias enviadas
22:47:29.546 -> HTTP/1.1 200 OK
22:47:29.593 ->
22:47:29.593 -> Date: Thu, 05 Mar 2020 21:47:29 GMT
22:47:29.593 ->
22:47:29.593 -> Server: Apache/2.4.41 (Win64) OpenSSL/1.1.1c PHP/7.4.1
22:47:29.593 ->
22:47:29.593 -> X-Powered-By: PHP/7.4.1
22:47:29.593 ->
22:47:29.593 -> Content-Length: 22
22:47:29.593 ->
22:47:29.593 -> Connection: close
22:47:29.593 ->
22:47:29.593 -> Content-Type: text/html; charset=UTF-8
22:47:29.593 ->
22:47:29.593 ->
22:47:29.593 ->
22:47:34.562 -> estado :0Intensidad :
22:47:34.562 ->
22:47:34.562 -> Conexión cerrada.
Lo que deberia mostrar por ejemplo intensidad es 50, es como si no detectase las variable.
Codigo php
<?php
error_reporting(0); ///dejar de recibir errores/notices
/////////////////////////////Recibir datos del arduino
$datos=$_GET;
//echo $datos['nombre'];
//echo $datos['ciudad'];
if ($datos['ciudad'] == "Jerez" ) {
//echo ". En tu ciudad hacen vino. "
;}
if ($datos['ciudad'] == "Grazalema" ) {
//echo ". Muy bueno el queso payoyo. "
;}
$estado=$_GET["estado"];
$intensidad=$_GET["intensidad"];
$opcion=$_GET["opcion"];
$max=$_GET["max"];
$automatizacion=$_GET["automatizado"];
if (empty($estado))
{
//echo "
La variable SÍ está vacía";
$estado=0;
}
else{
//echo "
La variable NO está vacía";
$estado=1;
}
?> <?php
echo "estado :".$estado;
echo "Intensidad :".$intensidad;
?>
anitasw:
El problema surge cuando arduino lee las variables php, el cual no las muestra pero si que lee el html y los echo.
PHP es un lenguaje que es ejecutado en el servidor y lo que produce es una pagina HTML que es lo que puede leer el Arduino.
Prueba tu mismo desde tu navegador tratar de identificar las "variables PHP" de la pagina mostrando por ejemplo el código fuente y tampoco lo lograras, porque solo podrás ver el resultado de lo que se muestra desde PHP con echo.
Prueba en todo caso algo como:
$nom = 'Juan';
echo "nombre = $nom";