Arduino cliente comunicar com PHP via GET

Estou tendo dificuldade para comunicar com Web service em PHP.

Tenho no meu PC instalado WAMP SERVER 3.0.6 e o código funciona quando utilizo local, aqui no meu PC quando tento usar o endereço na internet não funciona de jeito nenhum. já criei outro arquivo em outro endereço de hospedagem não consigo com o arduino, consigo acessar o Web Service com outras aplicações ou manualmente.

Se alguém puder me ajudar.

Segue a baixo um código que se funcionar nele consigo aplicar a solução no meu código.

A diferença e que quando uso aqui com WAMP eu utilizo:
byte servidor = { 192, 168, 0, 29 }; //Endereço WebService
int porta 9999

Ao invés de
char server = “controlefull.000webhostapp.com”;

Utilizo:
Arduino uno
Arduino Ethernet Shield W5100
internet: 15M net Virtua
Win 8.1

//--------------------------------------------

#include <SPI.h>
#include <Ethernet.h>

byte mac = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char server = “controlefull.000webhostapp.com”; //
IPAddress ip(192, 168, 0, 177);
EthernetClient client;

void setup() {
Serial.begin(9600);
while (!Serial) {
;
}

if (Ethernet.begin(mac) == 0) {
Serial.println(“Failed to configure Ethernet using DHCP”);
Ethernet.begin(mac, ip);
}
// give the Ethernet shield a second to initialize:
delay(1000);
Serial.println(“connecting…”);
}

void loop() {

if (client.connect(server, 80)) {
Serial.println(“connected”);
client.println(“GET /login/statusplaca.php?equipamento=1&status=9”);

} else {
Serial.println(“connection failed”);
}

if (!client.connected()) {
Serial.println();
Serial.println(“disconnecting.”);
client.stop();

while (true);
}
delay(1000);
}
//--------------------------------------------------------

Código do php.( Bem simples )

<?php //Inicia Ações pegarGet(); //fubção para Pegar GET's function pegarGet(){ include 'conecta.php'; $equipamento=$_GET['equipamento'] ?? '1'; $status = $_GET['status'] ?? '9'; $sql1 = $dbcon->query("UPDATE monitoramento SET ativo = '$status' WHERE equipamento = '$equipamento'"); if($sql1) { echo " - Registro_ok"; } else { echo " - Registro_erro"; } } ?>

I have found when attempting to connect to external web sites the first attempt sometimes fails
if so I wait a few seconds and attempt again - if it fails 10 times I give up

see post #23 of

for an example using WiFi

A baixo meu código completo o que realmente estou tentando usar.

já adicionei tempo a cada situação, já tentei colocar HTTP/1.1 no final do meu GET ou a baixo ou antes, já tentei colocar o meu GET uma parte em cada linha, com println ou somente print, já tentei fazer outro web service em um site diferente.

quando executa ele entra na condição de conectado, mais ele fala com minha pagina em php, porque mesmo que eu abra ela sem passar parâmetros ela muda os valores da minha tabela e isso não esta acontecendo.

Alguém tem alguma ideia do que posso fazer???

//----------------------------------------------------------
#include <SPI.h>
#include <Ethernet.h>

//declarando Variaveis
long previousMillis = 0; // Variável de controle do tempo
long tempoInterval = 5000; // Intervalo entre atualizações no Banco
int quantidadeReles = 14; //quantidade de reles
int equipamento = 1; //definindo ID do equipamento
int aberto = 0; //estado do rele que aciona a conexao com o banco dados

//Definindo Reles
//rele01
const int rele1 = 3;
int estadorele1 = 0;
//rele02
const int rele2 = 2;
int estadorele2 = 0;
//rele03
const int rele3 = A0;//4
int estadorele3 = 0;
//rele04
const int rele4 = A1;//5
int estadorele4 = 0;
//rele05
const int rele5 = A2;//6
int estadorele5 = 0;
//rele06
const int rele6 = A3;//7
int estadorele6 = 0;

//rele07
const int rele7 = A5;//9
int estadorele7 = 0;
//rele08
const int rele8 = 4;
int estadorele8 = 0;
//rele9
const int rele9 = 5;
int estadorele9 = 0;
//rele10
const int rele10 = 6;
int estadorele10 = 0;
//rele11
const int rele11 = 7;
int estadorele11 = 0;
//rele12
const int rele12 = 8;
int estadorele12 = 0;
//rele13
const int rele13 = 9;
int estadorele13 = 0;

//declarando dados de rede
byte mac = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
IPAddress ip(192, 168, 0, 99); // ip in lan
IPAddress gateway(192, 168, 0, 1); // internet access via router
IPAddress subnet(255,255,255,0); //subnet mask
//byte ip = { 192, 168, 0, 99 }; //Ip da Placa
//byte servidor = { 192, 168, 0, 29 }; //Endereço WebService local
const char servidor = “controlefull.000webhostapp.com”;

int portaweb = 80;
EthernetClient client; //Tipo de Serviço a ser utilizado

void setup() {
definindoPortas(); //Função que define o tipo e numero de cada porta
iniciandoComunicacaoSerial(); //Inicializa Comunicação Monitor Serial
Ethernet.begin(mac, ip); //iniciando protocolo de rede
delay(3000); //Tempo de espera antes de começar os processos
} // fim do setup

void loop() {
atualizarStatus();
} // fim do loop

//Inicio das Funções
void atualizarStatus(){
unsigned long currentMillis = millis(); //Tempo atual em ms
//Lógica de verificação do tempo
if (currentMillis - previousMillis > tempoInterval) {
previousMillis = currentMillis; // Salva o tempo atual
informaPlacaAtiva();
}else{
//Para Não
}
//executa constantemente na Função
verificarPortas(); //Verifica se existe algum rele aberto
}

void informaPlacaAtiva(){
if (client.connect(servidor, portaweb)) {
Serial.println(“conectado”);
//manda informações para WebService
client.println(“GET /login/statusplaca.php?equipamento=1&status=9 HTTP/1.0”);
// client.print(“equipamento=”);
// client.print(equipamento);
// client.print("&status=");
// client.println(“1”);
client.stop();
Serial.println(“Placa Ativa”);
}else { //caso de erro ao se conectar
client.stop(); //Finaliza conexão
Serial.println(“falha na conexao - informar placa ativa”);
delay(5000); //Tempo de espera antes de tentar conectar novamente
}
}

void conexao(String i){
if (client.connect(servidor, portaweb)) {
Serial.println(“conectado”);
//manda informações para WebService
client.print(“GET /login/salvardados.php?”);
client.print(“equipamento=”);
client.print(equipamento);
client.print("&porta");
client.print("=");
client.print(i);
client.print("&status=");
client.println(“0”);
client.stop();
}else {//caso de erro ao se conectar
client.stop(); //Finaliza conexão
Serial.println(“falha na conexao - informar placa ativa”);
delay(5000); //Tempo de espera antes de tentar conectar novamente
}
}

void verificarPortas(){
int reles[quantidadeReles]; //Variavel com array contendo status de cada rele
String ri; //Armazena i como string
//Criando array e setando valores
reles[1] = digitalRead(rele1);
reles[2] = digitalRead(rele2);
reles[3] = digitalRead(rele3);
reles[4] = digitalRead(rele4);
reles[5] = digitalRead(rele5);
reles[6] = digitalRead(rele6);
reles[7] = digitalRead(rele1);
reles[8] = digitalRead(rele8);
reles[9] = digitalRead(rele9);
reles[10] = digitalRead(rele10);
reles[11] = digitalRead(rele11);
reles[12] = digitalRead(rele12);
reles[13] = digitalRead(rele13);

for (int i=1; i <= quantidadeReles; i++){
if(reles == aberto){

  • ri = String(i); //variavel contendo valor de i como String*
  • conexao(ri); //Chama função que atualiza status*
  • }*
  • }*
    }

*void definindoPortas(){ *

  • pinMode(rele1, INPUT);*
  • pinMode(rele2, INPUT);*
  • pinMode(rele3, INPUT);*
  • pinMode(rele4, INPUT);*
  • pinMode(rele5, INPUT);*
  • pinMode(rele6, INPUT);*
  • pinMode(rele7, INPUT);*
  • pinMode(rele8, INPUT);*
  • pinMode(rele9, INPUT);*
  • pinMode(rele10, INPUT);*
  • pinMode(rele11, INPUT);*
  • pinMode(rele12, INPUT);*
  • pinMode(rele13, INPUT);*
    }

void iniciandoComunicacaoSerial(){

  • Serial.begin(9600);*
    }

Please please please please please use code tags.

Desculpe,

Sou novo aqui no fórum.
e não tenho muita experiencia com arduino.

Não entendi o que quis dizer com

Please please please please please use code tags.

Resolvi desta maneira:

//---------------------------

#include <SPI.h>
#include <Ethernet.h>

byte mac = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
//byte mac = {0xf0, 0x1f, 0xaf, 0x33, 0x62, 0x2f };

IPAddress ip(192,168,0,101);
EthernetClient client;
char server = “controlefull.000webhostapp.com”;

void setup()
{
Serial.begin(9600);

// attempt a DHCP connection:
Serial.println(“Attempting to get an IP address using DHCP:”);
if (!Ethernet.begin(mac)) {
// if DHCP fails, start with a hard-coded address:
Serial.println(“failed to get an IP address using DHCP, trying manually”);
Ethernet.begin(mac, ip);
}

Serial.print(“My address:”);
Serial.println(Ethernet.localIP());
}

void loop()
{
// connect to the server
if (client.connect(server, 80))
{
// print to serial monitor
Serial.println(“connected…”);
Serial.println(“ARDUINO: forming HTTP request message”);

// send data the server through GET request
client.print(“GET /statusplaca.php?equipamento=1&status=7”);
client.println(" HTTP/1.1");
client.print("HOST: ");
client.println(server);
client.println();

Serial.println(“ARDUINO: HTTP message sent”);

// give server some time to receive and store data
// before asking for response from it
delay(1000);

// get the response from the page and print it to serial port
// to ascertain that data was received properly
if(client.available())
{
while(client.available())
{
char c = client.read();
Serial.print(c);
}
}
else
{
Serial.println(“ARDUINO: no response received / no response received in time”);
}

client.stop();
}
// do nothing forever after:
while(true);
}

Deixa eu ver se eu entendi, você quer que o Arduino enviei uma informação para um servido web que está na sua casa?
Já verificou se a operadora libera a porta 80?
Normalmente eu configuro o apache para 8080!
Tenta isso e depois me avisa!
Coloca esse código:

Serial.println("conectado");
client.println("HTTP/1.1 200 OK");//acrescenta essa linha após imprimir conectado