Boa noite pessoal!
Estou tentando fazer uma aplicação para controle do sentido de rotação de um motor 12v através de uma pagina WEB o código php é o seguinte:
<?php
$sock = socket_create(AF_INET, SOCK_STREAM, \SOL_TCP);
// Se conecta ao IP e Porta:
socket_connect($sock,"192.168.1.4",8081);
// Executa a ação correspondente ao botão apertado.
if(isset($_POST['bits'])) {
$msg = $_POST['bits'];
if(isset($_POST['Esquerda' ])){ if($msg[0] === '1') { $msg[0]='0'; } else { $msg[0]='1'; }}
if(isset($_POST['Direita'])){ if($msg[1]=='1') { $msg[1]='0'; } else { $msg[1]='1'; }}
socket_write($sock,$msg,strlen($msg));
}
socket_write($sock,'R#',2); //Requisita o status do sistema.
// Espera e lê o status e define a cor dos botões de acordo.
$status = socket_read($sock,6);
if (($status[4]=='M')&&($status[5]==='#')) {
if ($status[0] === '0') {
$cor1 = lightcoral;
} else {
$cor1 = lightgreen;
}
if ($status[1] == '0') {
$cor2 = lightcoral;
} else {
$cor2 = lightgreen;
}
echo "span class="t70igc" id="t70igc_4">form method =\"post\" action=\"teste.php\">";
echo "<input type=\"hidden\" name=\"bits\" value=\"$status\">";
echo "span class="t70igc" id="t70igc_3">button style=\"width:70; background-color: $cor1 ;font: bold 14px Arial\" type = \"Submit\" Name = \"Esquerda\">Esquerda</button></br></br>";
echo "<button style=\"width:70; background-color: $cor2 ;font: bold 14px Arial\" type = \"Submit\" Name = \"Direita\">Direita</button></br></br>";
echo "</form>";
}
// Caso ele não receba o status corretamente, avisa erro.
else { echo "Falha ao receber status do Motor"; }
socket_close($sock);
?>
</body>
</html>
e o do arduino é o seguinte:
include <SPI.h>
#include span class="t70igc" id="t70igc_12">Ethernet.h>
//Configurações do Ethernet Shield
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,1, 4 }; // ip que o arduino assumirá
byte gateway[] = { 192,168,1, 1 }; // ip do roteador
byte subnet[] = { 255, 255, 0, 0 };
char Motor[6] = "0000M";
char Direita[7] = "0000M#";
char Esquerda[8] = "0000M#";
int D0 = 10;
int D1 = 6;
EthernetServer server(8081); // Cria o servidor na porta 8081
char msg[7] = "0000M#";
void setup() {
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
pinMode(D0,OUTPUT);
pinMode(D1,OUTPUT);
}
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]=msg[7];msg[7]=msg[8];
msg[8]=client.read();
if (msg[4]=='#') {
switch(msg[5]) {
case 'R':
// Se receber o comando 'R#' envia de volta o status dos
// motores. (Que é a string 'Motor')
client.write(Motor);
break;
case 'D':
// Caso Gire para direita
digitalWrite(D0,HIGH);
delay(2000);
digitalWrite(D0,LOW);
delay(2000);
break;
case 'E':
// Caso gire para esquerda.
digitalWrite(D1,HIGH);
delay(2000);
digitalWrite(D1,LOW);
delay(2000);
break;
case 'M':
Direita[0]=msg[1];//1=esquerda 0=direita
Esquerda[1]=msg[2];
if (Motor[0]=='1') digitalWrite(D0,HIGH); else digitalWrite(D0,LOW);
if (Motor[1]=='0') digitalWrite(D1,HIGH); else digitalWrite(D1,LOW);
break;
}
}
}
}
quando mando executar a pagina PHP aparece o seguinte erro:
Warning: socket_connect(): in C:\xampp\htdocs\Motor\controle.php on line 13
Warning: socket_write(): in C:\xampp\htdocs\Motor\controle.php on line 25
Warning: socket_read(): in C:\xampp\htdocs\Motor\controle.php on line 28
tenho q fazer esta aplicação até quarta dia 31/04, alguem pode me socorrer? o que esta errado sou meio leigo em programação WEB
Tags:
Posta o arquivo "controle.php", para visualizar o todo.
Mas a princípio, está alertando para o uso sem verificar a inicialização do objeto $sock...
OK! como disse sou leigo em prog.WEB como verifico a inicialização, to no trampo assim q chegar em casa posto o arquivo
segue o arquivo controle.php
Esta é uma extensão que foi movida...
Qual sua versão do php?
versão 5.5.11
Conheço php há um bom tempo, mas nunca trabalhei com sockets...
Mas aproveitando sua dúvida fui a trás para aprender...
Os exemplos mais novos com relação a este assunto, está relacionado ao "fsockopen".
Dê uma olhada neste link http://www.php.net/manual/pt_BR/function.fsockopen.php.
agora apareceu outro erro
Warning: fsockopen(): in C:\xampp\htdocs\TCCII\controle.php on line 10
Uma tentativa de conexão falhou porque o componente conectado não respondeu corretamente após um período de tempo ou a conexão estabelecida falhou porque o host conectado não respondeu. (10060)
o codigo PHP ficou assim:
<?php
$fp = fsockopen("controle.php", 8081, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: http://localhost/TCCII/controle.php/index.php\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 128);
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
// Se conecta ao IP e Porta:
$sock = socket_connect($sock,"192.168.1.4",8081);
// Executa a ação correspondente ao botão apertado.
if(isset($_POST['bits'])) {
$msg = $_POST['bits'];
if(isset($_POST['Esquerda' ])){ if($msg[0] === '1') { $msg[0]='0'; } else { $msg[0]='1'; }}
if(isset($_POST['Direita'])){ if($msg[1]=='1') { $msg[1]='0'; } else { $msg[1]='1'; }}
socket_write($sock,$msg, strlen($msg));
}
socket_write($sock,'R#',2); //Requisita o status do sistema.
// Espera e lê o status e define a cor dos botões de acordo.
$status = socket_read($sock,6);
if (($status[4]=='M')&&($status[5]==='#')) {
if ($status[0] === '0') {
$cor1 = lightcoral;
} else {
$cor1 = lightgreen;
}
if ($status[1] == '0') {
$cor2 = lightcoral;
} else {
$cor2 = lightgreen;
}
echo "<form method =\"post\" action=\"teste.php\">";
echo "<input type=\"hidden\" name=\"bits\" value=\"$status\">";
echo "<button style=\"width:70; background-color: $cor1 ;font: bold 14px Arial\" type = \"Submit\" Name = \"Esquerda\">Esquerda</button></br></br>";
echo "<button style=\"width:70; background-color: $cor2 ;font: bold 14px Arial\" type = \"Submit\" Name = \"Direita\">Direita</button></br></br>";
echo "</form>";
}
// Caso ele não receba o status corretamente, avisa erro.
else { echo "Falha ao receber status do Motor"; }
socket_close($sock);
}
fclose($fp);
}
?>
</body>
</html>
Nas pesquisas que fiz, algumas dicas diz respeito a porta usada "8081".
Sugestões: usar a 8080, ou verificar se tem permissão via roteador para usar outra porta.
tentei a porta 8080 e nada . ta osso!
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por