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!!!

Exibições: 1621

Responder esta

Respostas a este tópico

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.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço