Hola, buenas, estoy realizando un proyecto en un Arduino UNO con Ethernet shield que obtiene mi ip pública y la sube (por php) a mi base de datos mysql.
La parte de obtener la ip ya la tengo hecha y funciona, pero el problema es que al querer mandar el dato con un GET, no ocurre nada y el Serial no muestra ningún error de conexión
Os dejo el código para que lo entendáis:
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
char serverIPPublic[] = "icanhazip.com"; // para obtener la ip
char sqlServer[] = "*Mi servidor*";
String extip = "";
EthernetClient client;
//////////////////////
void setup(){
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
// no point in carrying on, so do nothing forevermore:
while(true);
}
Serial.begin(9600);
}
void loop(){
// check for serial input
Serial.println("Obteniendo IP");
String ipPublica = getIP(serverIPPublic); //llamo a la función de obtener la ip
extip = ipPublica;
Serial.println(ipPublica);
delay(1000);
Serial.println("Y ahora mandamos la ip por sql ");
Serial.println(extip);
sendSQL();
delay(9000);
}
//////////////////////////
String getIP(char server[]){
EthernetClient getIPpublic;
String ipPublic;
String webIP;
int fin=0;
if (getIPpublic.connect(server, 80)) {
getIPpublic.println("GET / HTTP/1.1");
getIPpublic.print("Host: ");
getIPpublic.println(server);
getIPpublic.println("Connection: keep-alive");
getIPpublic.println();
Serial.println("Conectado");
//Serial.println("enviadoMsgIP");
delay(100);
while(getIPpublic.connected()){
if(getIPpublic.available()){
char c = getIPpublic.read();
//if(c!= 'n' && c != 'r') {
webIP.concat(c);
//}
}
}
Serial.println("Ya he hecho la conversión");
getIPpublic.stop();
int desde = webIP.indexOf("\r\n\r\n") + 4;
ipPublic = webIP.substring(desde,webIP.length()-1);
}
return ipPublic;
}
void sendSQL() {
if (client.connect(sqlServer, 80)) { // Conexion con el servidor
client.print("GET /ardget.php?ip="); // Enviamos los datos por GET
client.print(extip);
client.println(" HTTP/1.0");
client.println("Host: Mi servidor*");
client.println();
Serial.println("Conectado");
} else {
Serial.println("Fallo en la conexion");
}
if (!client.connected()) {
Serial.println("Disconnected!");
}
client.stop();
}
Estoy enviando el get a un fichero llamado "ardget.php" en mi server.
Si desde mi navegador hago un request 'Mi servidor*/ardget.php?ip= Loquesea', se envia todo bien y me aparece en la base de datos.
También os dejo el código php(aunque no creo que este mal):
<php?
*datos de conexión*
$ipget = $_GET['ip'];
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "INSERT INTO `*mibd*`.`*mitabla*` (`ip`, `id`) VALUES ('". $ipget . "', '1')";
$result = $conn->query($sql);
// Ejecutamos la instrucción
$conn->close();
echo "Done";
He intentado modificar el código del arduino de diversas formas y copiando cosas de este foro (y del webview), pero no funciona. ¿Qué estoy haciendo mal?
Muchas gracias
Nota: he cambiado mi información privada por '**' (por si alguien cree que lo tengo así puesto)