Boa tarde pessoal, estava com um problema para conectar via SOCKET com o Arduíno + php, consegui resolver era bloqueio em meu rotador.
Agora queria saber se tem como receber os valores do Arduíno com o PHP, como um sensor lm35, seria bem básico mesmo.

Ja fiz através do MySQL Connector, nais fica muito lento retorno e gravação no BD, outra forma poderia ser por GET comunicando direto com uma pagina em um servidor e assim gravando no BD. mais tenho receio de ficar lento também. 

Por isso estou tentando via SOCKET para realizar os testes, visto que a comunicação PHP para ARDUINO  e instantânea!!

Exibições: 999

Responder esta

Respostas a este tópico

Faz via GET, grava na hora.

Na rede interna nunca vi o roteador bloquear socket.

A lentidão não é devido algum delay que tu utilizou no código?

Vc tem algum exemplo funcional?
Todos que achei não rolou, pode somente passar uma variável na mão para o PHP,  

http://localhost/socket/recebe.php?valor=31.00

So para eu entender mesmo o funcionamento

primeiro passo é evitar usar localhost pra definir o endereço.

localhost é a mesma coisa que loopback (ou 127.0.0.1), ou seja, ele apontará para si próprio

por exemplo, se vc mandar o arduino acessar http://localhost ele irá tentar acessar ele mesmo (isto é, o próprio arduino)

se vc mandar o script php acessar http://localhost ele tentará acessar a si mesmo, isto é, o próprio servidor onde o php está instalado

Sabendo de tudo isso,  prefira usar um número IP. Só assim vc evita confusões na hora de apontar pra algum alvo

Bom , ja tenho o IP este deve ter sido o problema então, não pensei nisso, deveria ter colocado o IP, puts!!

Vou tentar novamente aqui, obrigado pela dica clara que eu vacilei, hehehe

Pegando como exemplo o codigo ja conhecido do  Maurício Féo  www.engenheirando.com

Na parte em negrito Código, seria assim?



void loop() {
EthernetClient client = server.available();
// SE receber um caracter...
if (client) {
// guarda o caracter na string 'msg'
msg[1]=msg[2]; msg[2]=msg[3]; msg[3]=msg[4]; msg[4]=msg[5]; msg[5]=msg[6];
msg[6] = client.read();

if (msg[6]=='#') {
switch(msg[5]) {
case 'R':
// Se receber o comando 'R#' envia de volta o status dos
// dispositivos. (Que é a string 'Luz')
client.write(Luz);
break;
case 'G':
// Caso G#, aciona o pino do portão pequeno por 1s.
digitalWrite(A5,HIGH);
delay(1000);
digitalWrite(A5,LOW);
break;
case 'L':
// Caso L#, ele copia os 4 bytes anteriores p/ a
// string 'Luz' e cada byte representa um
// dispositivo, onde '1'=ON e '0'=OFF
Luz[0]=msg[1];
Luz[1]=msg[2];
Luz[2]=msg[3];
Luz[3]=msg[4];
if (Luz[0]=='1') digitalWrite(7,HIGH); else digitalWrite(7,LOW);
if (Luz[1]=='1') digitalWrite(6,HIGH); else digitalWrite(6,LOW);
if (Luz[2]=='1') digitalWrite(5,HIGH); else digitalWrite(5,LOW);
if (Luz[3]=='1') digitalWrite(4,HIGH); else digitalWrite(4,LOW); 


client.print("GET http://192.168.0.100/socket2/grava.php?dado=grava");


break;

}
}



}


}

Não sei se esse cóigo que postou funciona, mas o que eu te sugiro é:

pegue o sketch exemplo que vem junto com a IDE do arduino, chamado Ethernet WebClient

Ali vc perceberá que o código faz o arduino se conectar ao google pra fazer a busca do termo "arduino"

Baseando-se nesse código exemplo citado, vc adapta conforme suas necessidades

Aí, ao invés do sketch se conectar ao google, vc manda o sketch se conectar ao seu script php

Nunca é demais lembrar, mas vc deverá configurar corretamente a parte inicial do sketch, ali onde se configura o IP do arduino

Esta parte esta Ok, ja esta acessando o Arduino normalmente, vou tentar a parte do exemplo para testar aqui.

Por enquanto te agradeço, se der certo volto para agradecer mais, hehehe

O exemplo funciona mais acho que não funciona os dois juntos 

EthernetClient client; +  EthernetServer.

Posso estar errado, pois não conheço muito!

O exemplo do arduino faz o GET normal, e o codigo via SOCKET tambem executa norma, mais quando tendo colocar os dois juntos ja era!!

funciona junto sim... o shield tem condições de funcionar como webclient e webserver ao mesmo, basta fazer ajustes

vc precisa tomar o cuidado pra diferenciar o nome certinho das instâncias de server e client porque se vc tentar juntar do jeito que estão originalmente,  chegará um momento que algum nome coincidirá e aí o sketch irá ficar perdido.

Por exemplo, repare que no exemplo webclient há referências a server e client

E no exemplo do webserver, repare que há também referências a server e client.

Se vc tentar juntar tudo usando tais nomes, vai dar pau. Fique atento a isso

Preciso entender estes conceitos do ARDUINO, pelo menos o inicio para não ter tanta dor de cabeça, assim que coloco o IP do servidor local ja me apresenta o erro abaixo!!

amigo, foi exatamente pra esse aspecto aí que eu te chamei atenção. Vamos fazer um exercício:

CENÁRIO 1: Vamos considerar o modo webclient do arduino, ok? Somente ele, isolado e nada mais:

1) quem é o server? Resposta: é o google

2) quem é o client? Resposta: é o arduino

Pra que serve o modo webclient? Resposta: pra fazer o client arduino se conectar a um outro servidor.

Agora zere a sua memória. Apague a lousa. Vire a página.

CENÁRIO 2: Vamos considerar o modo webserver do arduino, ok?  Somente ele, isolado e nada mais:

1) quem é o server? Resposta: é o arduino

2) quem é o client? Resposta: é qualquer outro dispositivo que irá se conectar ao server arduino

Pra que serve o modo webserver? Reposta: pra fazer o arduino (server) aceitar conexões entrantes de clients.

Agora recupere o cenário 1 e o cenário 2 e tente juntar tudo num só sketch. Se vc continuar chamando server de server e client de client, quem será quem nesse novo sketch? Deu pra perceber a enrascada que vc se meterá se fizer isso?

Então, meu amigo, páre e estude bem cada linha de código de cada um dos modos (webclient e webserver). Perceba o que cada linha faz. Depois, cuidadosamente, pegue o sketch do webclient e substitua tudo que se chama client e dê outro nome, tipo BANANA, e tudo que for server chame de ABACATE. No modo webserver, faça o mesmo, só que o client vc renomeia pra QUADRADO, e server vc renomeia pra CIRCULO.

Aí quando vc tentar juntar os dois sketches, não haverá mais conflito de nomes e também irá ficar claro pra vc que nomes de frutas são referentes ao modo webclient e nomes de formas geométricas são referentes ao modo webserver.

Desculpe se essa explicação lhe causar algum contrangimento ou ofensa. Mas infelizmente essa foi a única forma que encontrei para tentar fazer vc enxergar onde precisa prestar atenção

Opa, valew  imhugo, desculpa não ter lhe respondido antes, minha internet deu pau eu fiquei sem internet depois das 20:00 ate as 06 da manha, so agora vi sua resposta aqui.

Mais consegui resolver, fiquei ate umas 03:00 para achar os problemas, era questão de prestar atenção msm, pois o principio e o mesmo da programação basica, so basta prestar atenção e não ir afobadamente querendo o resuultado  sem prestar atençã no que ta fazendo!!

E não causou Constrangimento nem Ofensa, pois quem quer aprender tem que estudar antes e que esta disposto a ensinar tem que explicar igual vc fez!!!

Te agradeço muito, a vc e a quem tentou ajudar.

e acho que a internet ter dado pau foi algo para que eu entendesse mais o código, heheheh!!

Valeu cara muito obrigado

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço