Boas pessoal sou iniciante a mexer no arduino, tenho um arduino mega com ethernet shield acoplado tentei fazer um pequeno teste. Com o arduino fazer uma domotica simples só com duas saídas (2 reles) tentar liga-los apartir do computador. tentei programar mas no fim não funcionou, depois fiz uma pesquisa e encontrei uma demonstração tal e qual a que eu queria fazer mas continua a não funcionar.
Alguém me sabe dizer o que pode estar errado?
E pretendes que te digamos o que esta errado com base em que?
Pode as vezes já ter acontecido com alguém. Mas partindo do ponto que eu utilizo os exemplos (ethernet-webServer) altero o IP já teria que existir conexão apartir do browser. eu poderei colocar aqui a programação já tentada mas penso que o problema é que a shield não deixa estabelecer a conexão.
obrigado pela atenção
Ja fizeste ping para ver a ligacao?
Alguns exemplos nao tem em atencao se os perifericos estao a funcionar, o teu codigo tem?
Ahh, espera la... nao vimos o teu codigo... logo e dificil de dizer se sera o codigo, ne?
Mas, assumindo que o codigo esta correcto, o que mais podera estar mal? Tendo em conta que o Arduino esta ligado na tua rede, talvez seja o teu router onde esta o problema. Ja viste la dentro?
Com base na informacao quase inexistente que deste nao podemos dizer mais senao olhar para isto ou aquilo sem ser especifico. Dai o meu comentario. Pode ter acontecido com alguem o mesmo problema, mas pode ter sido por mil e um motivos diferentes!
Pela mesma ordem de ideias, a melhor pessoa para te resolver o problema sera a pessoa de quem copiaste o exemplo na net. Ela sim sabe o que etsa feito e quais os possiveis problemas.
Nos aqui, sem sequer um pedacinho de codigo ou esquema ou que nos tenhas dito que experimentaste outros exemplos com sucesso nao podemos dizer qual sera o problema.
Sim eu percebo e tens toda a razão o código que eu copiei foi o seguinte:
#include <SPI.h>
#include <Ethernet.h>
String readString;
int pino_rele1 = 3;
int pino_rele2 = 4;
boolean ligado = true;
boolean ligado_2 = true;
//Informacoes de endereco IP, gateway, mascara de rede
byte mac[] = { 0xA4, 0x28, 0x72, 0xCA, 0x55, 0x2F };
byte ip[] = { 192, 168, 0, 177 };
byte gateway[] = { 192, 168, 1, 1 };
byte subnet[] = { 255, 255, 255, 0 };
EthernetServer server(80);
void setup()
{
Serial.begin(9600);
pinMode(pino_rele1, OUTPUT);
pinMode(pino_rele2, OUTPUT);
//Inicializa Ethernet Shield
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
Serial.println("FILIPEFLOP - Automacao Residencial");
//Desliga os dois reles
digitalWrite(pino_rele1, HIGH);
digitalWrite(pino_rele2, HIGH);
}
void loop()
{
EthernetClient client = server.available();
if (client) {
while (client.connected())
{
if (client.available())
{
char c = client.read();
if (readString.length() < 100) {
readString += c;
}
if (c == '\n')
{
//Controle do rele1
Serial.println(readString);
//Liga o Rele 1
if (readString.indexOf("?ligar") > 0)
{
digitalWrite(pino_rele1, LOW);
Serial.println("Rele 1 Ligado");
ligado = false;
}
else
{
//Desliga o Rele 1
if (readString.indexOf("?desligar") > 0)
{
digitalWrite(pino_rele1, HIGH);
Serial.println("Rele 1 Desligado");
ligado = true;
}
}
//Controle do rele2
Serial.println(readString);
//Liga o Rele 2
if (readString.indexOf("?2_ligar") > 0)
{
digitalWrite(pino_rele2, LOW);
Serial.println("Rele 2 Ligado");
ligado_2 = false;
}
else
{
//Desliga o Rele 2
if (readString.indexOf("?2_desligar") > 0)
{
digitalWrite(pino_rele2, HIGH);
Serial.println("Rele 2 Desligado");
ligado_2 = true;
}
}
readString = "";
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
client.println("");
client.println("");
client.println("FILIPEFLOP - Automacao Residencial");
client.println("");
client.println("");
client.println("");
client.println("");
client.println("");
client.println("");
client.println("
");
client.println("
client.println("
client.print("
client.print(ligado);
client.println("
client.println("");
client.println("");
client.print("
client.print(ligado_2);
client.println("
client.println("
client.println("");
client.println("");
client.println("");
client.println("");
client.println("");
delay(1);
client.stop();
}
}
}
}
}"
e sim eu verifiquei o ping e estava tudo direito.
Entrei no router e verifiquei um IP que não estava a ser utilizado por nenhum equipamento e alterei o IP no código e coloquei o meu IP da Gateway.
No ping dá me 0% de perdas, tentando aceder ao arduino pelo browser aparece uma mensage com
" IP recusou estabelecer ligação" fará falta adicionar algum protocolo de comunicação?
Mudaste o ip e gateway antes ou depois de postares o codigo? E estranho a gateway nao estar na mesma subrede do Arduino...
O IP e gateway que postei não são os da minha rede são os que copiei depois alterei para os meus e enviei para o arduino desliguei o cabo USB e fiz o teste.
Talvez se deixares o cabo USB e colocares uns Serial.print pelo codigo consigas perceber o que esta de errado?
Aproveito este tópico para tentar resolver o seguinte problema:
estou utilizando o ethernet shield W5100 com o arduino mega e o exemplo WebServer do IDE, o sistema funciona após o primeiro Upload, mas se desligar e religar o arduino o w5100 para de responder, nem mesmo o ping obtém resposta.
O sistema só volta a funcionar com o serial monitor aberto.
Já testei com um arduino uno e ocorre a mesma coisa.
Alguém pode me ajudar?
Tens o código aí?
Não haverá algo no código a bloquear a execução do programa?
Segue o código que está como exemplo do IDE:
/*
Web Server
A simple web server that shows the value of the analog input pins.
using an Arduino Wiznet Ethernet shield.
Circuit:
- Ethernet shield attached to pins 10, 11, 12, 13
- Analog inputs attached to pins A0 through A5 (optional)
created 18 Dec 2009
by David A. Mellis
modified 9 Apr 2012
by Tom Igoe
*/
#include <SPI.h>
#include <Ethernet.h>
// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 1, 177);
// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
// start the Ethernet connection and the server:
Ethernet.begin(mac, ip);
server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
}
void loop() {
// listen for incoming clients
EthernetClient client = server.available();
if (client) {
Serial.println("new client");
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
// if you've gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so you can send a reply
if (c == '\n' && currentLineIsBlank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close"); // the connection will be closed after completion of the response
client.println("Refresh: 5"); // refresh the page automatically every 5 sec
client.println();
client.println("");
client.println("");
// output the value of each analog input pin
for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
int sensorReading = analogRead(analogChannel);
client.print("analog input ");
client.print(analogChannel);
client.print(" is ");
client.print(sensorReading);
client.println("
");
}
client.println("");
break;
}
if (c == '\n') {
// you're starting a new line
currentLineIsBlank = true;
}
else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
Serial.println("client disconnected");
}
}
Lembrando que se o serial monitor estiver aberto, a rede funciona sempre e se não estiver aberto, só funciona depois do upload, ao desligar e ligar novamente o arduino (com o serial monitor fechado), para de funcionar.
Não deve ser isto... mas importas-te de apagar estas linhas da função setup:
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
Elas não fazem diferença num Arduino Mega... mas nunca se sabe.
Estou a assumir que quando dizes Serial Monitor aberto, referes-te a teres a janela do Serial Monitor aberta e não o cabo USB.
Amigo. Fiz um teste em um outro notebook e não acontece o que relatei, estou achando que pode ser alguma coisa relativo à porta USB do notebook.
Olá caros colegas estou com problema parecido de conexão do ethernet shield + mega 2560 + relé.
Sou meio novo em arduino, vi alguns videos e lê alguns materiais e me interesse.
1- Passo :É o seguinte, carrego o sketch para o arduino somente ele conectado pela porta usb.
2- Conecto o ethernet shield ao mega e acesso o cmd e ping no ip qual denominei
3- Informação que o host não está acessivel, tento direto no browser e o mesmo não responde.
Não consigo retorno algum do mega+ethernet
Dados:
Arduino mega 2560
ethernet shield w5100
modem gvt box
OBS: Sim, já pedir auxilio ao autor da fonte do sketch e até o presente momento nada.
Desde já agradeço ai a quem puder ajudar ! VLW
código
//Programa: Automacao Residencial com Arduino e Ethernet Shield
//Autor: FILIPEFLOP
#include <SPI.h>
#include <Ethernet.h>
String readString;
int pino_rele1 = 3;
int pino_rele2 = 4;
boolean ligado = true;
boolean ligado_2 = true;
//Informacoes de endereco IP, gateway, mascara de rede
byte mac[] = { 0xA4, 0x28, 0x72, 0xCA, 0x55, 0x2F };
byte ip[] = { 192, 168, 25, 110 };
byte gateway[] = { 192, 168, 25, 1 };
byte subnet[] = { 255, 255, 255, 0 };
EthernetServer server(80);
void setup()
{
Serial.begin(9600);
pinMode(pino_rele1, OUTPUT);
pinMode(pino_rele2, OUTPUT);
//Inicializa Ethernet Shield
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
Serial.println("FILIPEFLOP - Automacao Residencial");
//Desliga os dois reles
digitalWrite(pino_rele1, HIGH);
digitalWrite(pino_rele2, HIGH);
}
void loop()
{
EthernetClient client = server.available();
if (client) {
while (client.connected())
{
if (client.available())
{
char c = client.read();
if (readString.length() < 100) {
readString += c;
}
if (c == '\n')
{
//Controle do rele1
Serial.println(readString);
//Liga o Rele 1
if (readString.indexOf("?ligar") > 0)
{
digitalWrite(pino_rele1, LOW);
Serial.println("Rele 1 Ligado");
ligado = false;
}
else
{
//Desliga o Rele 1
if (readString.indexOf("?desligar") > 0)
{
digitalWrite(pino_rele1, HIGH);
Serial.println("Rele 1 Desligado");
ligado = true;
}
}
//Controle do rele2
Serial.println(readString);
//Liga o Rele 2
if (readString.indexOf("?2_ligar") > 0)
{
digitalWrite(pino_rele2, LOW);
Serial.println("Rele 2 Ligado");
ligado_2 = false;
}
else
{
//Desliga o Rele 2
if (readString.indexOf("?2_desligar") > 0)
{
digitalWrite(pino_rele2, HIGH);
Serial.println("Rele 2 Desligado");
ligado_2 = true;
}
}
readString = "";
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
client.println("");
client.println("");
client.println("FILIPEFLOP - Automacao Residencial");
client.println("");
client.println("");
client.println("");
client.println("");
client.println("");
client.println("");
client.println("

");
client.println("
client.println("
client.print("
client.print(ligado);
client.println("
client.println("");
client.println("");
client.print("
client.print(ligado_2);
client.println("
client.println("
client.println("");
client.println("");
client.println("");
client.println("");
client.println("");
delay(1);
client.stop();
}
}
}
}
}