Соединение двух Ардуино через Ethernet посредством Ethernwt Shield W5100
- Войдите на сайт для отправки комментариев
Втр, 17/06/2014 - 14:41
Подскажите кто-нибудь соединял две ардуино по Ethernet на базе W5100? У меня задача передавать данные с одной дуины на другую на расстояние 15 метров, решил попробовать использовать Ethernet. Привожу в пример скетчи:
Arduino 1 (sender):
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,101);
IPAddress gateway(192,168,1,1);
IPAddress subnet(255,255,255,0);
EthernetServer server(23); // telnet defaults to port 23
void setup () {
Serial.begin(115200);
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
Serial.print("Chat server address:");
Serial.println(Ethernet.localIP());
}
void loop () {
EthernetClient client = server.available();
if (client) {
client.print("hello");
client.println(" world");
}
}
Arduino 2 (receiver):
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,102);
IPAddress gateway(192,168,1,1);
IPAddress subnet(255,255,255,0);
IPAddress server(192,168,1,101);
EthernetClient client;
void setup() {
Serial.begin(115200);
Ethernet.begin(mac, ip);
delay(1000);
Serial.println("connecting...");
if (client.connect(server, 23)) {
Serial.println("connected");
}
else {
Serial.println("connection failed");
}
}
void loop() {
if (client.available()) {
char c = client.read();
Serial.print(c);
}
if (!client.connected()) {
Serial.println();
Serial.println("disconnecting.");
client.stop();
delay(1000);
}
}
Мониторю принимающую сторону, в порту вижу "disconnecting". Несмотря на это на передающем Шилде все время мигает лампочка Tx, а на принимающем Шилде так же мигает Rx..
Помогите пожалуйста разобраться в чем дело
Попробуй это. У меня работает.
Условно "сервер"
#include <SPI.h> #include <Ethernet.h> #include <EthernetUdp.h> byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEE}; IPAddress ip(192, 168, 1, 100); IPAddress ipcl(192, 168, 1, 106); unsigned int localPort = 8888; char packetBuffer[20]; char clearBuffer[] = " "; EthernetUDP Udp; void setup() { Ethernet.begin(mac, ip); Udp.begin(localPort); Serial.begin(115200); Udp.beginPacket(ipcl, 8888); Udp.write("test"); Udp.endPacket(); } void loop() { for (int i = 0; i < 19; i++) { packetBuffer[i] = clearBuffer[i]; } int packetSize = Udp.parsePacket(); if (packetSize) { IPAddress remote = Udp.remoteIP(); for (int i = 0; i < 4; i++) { Serial.print(remote[i], DEC); if (i < 3) { Serial.print("."); } } Serial.print(" "); Udp.read(packetBuffer, 20); Serial.print(packetBuffer); char* copy = packetBuffer + 3; Serial.println(copy); Udp.beginPacket(ipcl, 8888); Udp.write("test"); Udp.endPacket(); } delay(1000); }Условно "клиетн"
#include <SPI.h> #include <Ethernet.h> #include <EthernetUdp.h> byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xDE}; IPAddress ip(192, 168, 1, 106); IPAddress ipsrv(192, 168, 1, 100); unsigned int localPort = 8888; char packetBuffer[20]; char clearBuffer[] = " "; char* copy; EthernetUDP Udp; void setup() { Ethernet.begin(mac, ip); Udp.begin(localPort); Serial.begin(115200); } void loop() { for (int i = 0; i < 19; i++) { packetBuffer[i] = clearBuffer[i]; } int packetSize = Udp.parsePacket(); if (packetSize) { IPAddress remote = Udp.remoteIP(); for (int i = 0; i < 4; i++) { Serial.print(remote[i], DEC); if (i < 3) { Serial.print("."); } } Serial.print(" "); Udp.read(packetBuffer, 20); Serial.print(packetBuffer); copy = packetBuffer + 3; Serial.println(copy); Udp.beginPacket(ipsrv, 8888); Udp.write("test"); Udp.endPacket(); } delay(1000); }Здравствуйте! Ув. BeletskyAV!
Я попробовал скетчи, выложенные Вами, но связь между двумя контроллерами установить не удалось.
Вот, что у меня получилось: слева сервер, справа клиент.
Если честно, Я уже не помню эти сскетчи. Но судя по логам - летит "мусор", а связь есть. Другой вопрос . Что хотите получить от связи двух Ардуин? Если передавать данные и в соответствии с алгоритмом выполнить действия - то загляните сюда : http://smartliving.ru/ . Это и Ардуино и Винда ( Линукс) , и PHP ? и MySQL в одном флаконе , т.е. можно менять алгоритм на ходу не меняя скеч Ардуины.
P.S. Это не реклама , это то чем Я "заболел" и там сижу.
P.P.S. В любом случае зайдите , там связь Ардуины с Сервером и обратно построена на GET запросах - работает на все 100 . Только скечи я использую свои. Если будут вопросы пишите beletskyav@gmail.com чем смогу помогу.
Спасибо! Буду разбираться.
От связи ардуин хочу получить следующее:
Из одной сделаю мастер модуль который будет раздавать команды, а остальные - разнесу по разным помещениям в качестве устройств удалённого ввода-вывода.
Если один мастер и куча слейвов то точно MajorDoMo вам в помощь.