Olá pessoal,
Gostaria de saber se é possível trocar o IP do Arduino via PHP se conectando por socket.
Ou até mesmo direto nele via html.
Vlw!!!
Tags:
Via HTML foi tenso. Muito tenso.
Pois é, via socket tb foi.
o HTML5, agora tem websocket :)
bem provável ser possível.
tem um projeto o "nodeduino" onde ele usa o node.js para se comunicar com o arduino.. achei meio complexo fazer isso, então eu fiz um cenário onde, eu retorno dados em json do arduino e consigo me comunicar com ele via ajax..
olha esse tuto: http://ferpinheiro.wordpress.com/2012/05/12/arduino-em-rede-usando-...
agora, dps do IP definido, nao acredito que seja possível mudar o IP dele nao, o IP é definido na programaçao.
Tb acho que não dá... Diretamente...
Mas vc poderia escrever o IP na eeprom e buscar cada vez que ele da reset (vide post sobre reset por sw=watchdog).
Sua rotina iria escrever na eeprom e disparar o reset.
Eventualmente vai apagar tudo e tal, mas vc mudou o IP, seria normal seu usuário sentir um "reset".
Aih acho que vai !
Tem como trocar sim. Este meu post é antigo. Já tem tempo q eu consegui fazer isto.
Primeiro fiz na conexão via socket em php, depois passei pra Delphi. Ficou 100%. Toda vez q troca o ip, mascara e gatway eles são gravados na eeprom, e toda vez q o arduino inicia, ele lê da eeprom.
Olá Leandro teria como você enviar o código para podermos dar uma olhada nele?
Dê uma olhada neste post, não sei se o mesmo é funcional.
http://www.jo3ri.be/arduino/projects/network-settings-web-page-form...
Ok vou dar uma olhada, estava ven
Não entendi bem sua dúvida, mas se o seu problema é pq seu ip é dinâmico e toda hora muda, fazendo com que vc tenha q mudar o ip no seu programa, para conseguir acessar o arduino, então sugiro que vc use um serviço tipo o no-ip da vida, são muito bons, é o que eu fiz pra automação do meu quarto.
Abraço
Olá Pessoal,
Já que ressuscitaram esse tópico, vou dar uma ajudinha rápida de como eu fiz via socket:
Leitura do ip na EEPRON (coloque dentro do setup, de preferencia antes de qualquer outra coisa)
for (byte i=0; i<4; i++)
{
ip[i] = EEPROM.read((0 * 4) + i);
subnet[i] = EEPROM.read((1 * 4) + i);
gateway[i] = EEPROM.read((2 * 4) + i);
pingAddr[i] = EEPROM.read((3 * 4) + i);
}
E para trocar o ip via socket: (lembrando que a variável msg é do tipo char msg[25] e é ela que recebe tudo que enviado para o arduino via socke dessa maneira:
// 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]=msg[9]; msg[9]=msg[10]; msg[10]=msg[11]; msg[11]=msg[12];
msg[12]=msg[13]; msg[13]=msg[14]; msg[14]=msg[15]; msg[15]=msg[16]; msg[16]=msg[17]; msg[17]=msg[18]; msg[18]=msg[19]; msg[19]=msg[20]; msg[20]=msg[21]; msg[21]=msg[22]; msg[22]=msg[23]; msg[23]=msg[24];
msg[24] = client.read();
E para entrar em cada case
if (msg[24]=='#') {
switch(msg[23]) {
case 'K':
{
char *token = strtok(msg, ",");
{
int addNum = atoi(token);
token = strtok(NULL, ",");
int bytePos = 0;
byte byteVals[4];
while(token)
{
byteVals[bytePos++] = atoi(token);
token = strtok(NULL, ",K#"); // Get next token delimited by comma or pound sign
}
for(byte i=0; i<4; i++)
{
ip[i] = byteVals[i];
EEPROM.write((0 * 4) + i, byteVals[i]);
Serial.println(ip[i]);
}
}
}
break;
case 'M':
{
char *token = strtok(msg, ",");
{
int addNum = atoi(token);
token = strtok(NULL, ",");
int bytePos = 0;
byte byteVals[4];
while(token)
{
byteVals[bytePos++] = atoi(token);
token = strtok(NULL, ",M#"); // Get next token delimited by comma or pound sign
}
for(byte i=0; i<4; i++)
{
subnet[i] = byteVals[i];
EEPROM.write((1 * 4) + i, byteVals[i]);
Serial.println(subnet[i]);
}
}
}
break;
case 'N':
{
char *token = strtok(msg, ",");
{
int addNum = atoi(token);
token = strtok(NULL, ",");
int bytePos = 0;
byte byteVals[4];
while(token)
{
byteVals[bytePos++] = atoi(token);
token = strtok(NULL, ",N#"); // Get next token delimited by comma or pound sign
}
for(byte i=0; i<4; i++)
{
gateway[i] = byteVals[i];
EEPROM.write((2 * 4) + i, byteVals[i]);
Serial.println(gateway[i]);
}
}
Ethernet.begin(mac, ip, gateway, subnet);
}
Notem que é um case para cada um(IP, Gateway e subnet) e somente no ultimo case é que eu coloquei a linha Ethernet.begin(mac, ip, gateway, subnet) que vai ativar o novo IP
Então as mensagens que o cliente precisa enviar para que seja aceito em cada case é a seguinte:
1,192,168,100,100K#
1,255,255,255,0M#
1,192,168,100,1N#
Não vou colocar exatamente com o cliente faz isso, porque pode ser feito em qualquer tipo de programação e cada uma tem sua maneira de escrever via socket e se você ja está trabalhando com ele via socket você saberá fazer isso.
Caso não saiba trabalhar com arduino via socket, proponho que esclareçam essa dúvida em outro tópico.
Abraço a todos.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por