@DVoropaev
Ставлю + к карме на хабре за ответы на вопросы

Как настроить ethernet на ардуино, чтобы она использоваласть как клиент?

Пример взят от сюда.
Вот сам код:
#include <UIPEthernet.h>
#include <ethernet_comp.h>
#include <UIPClient.h>
#include <Dhcp.h>
#include <Dns.h>
#include <UIPUdp.h>


byte mac[] = {  0x94, 0xDE, 0x80, 0x3A, 0x90, 0xC9 }; //MAC-адрес Arduino
const unsigned long postingInterval = 600000;  // интервал между отправками
                                               // данных - 10 минут
// IP-адрес, назначаемый Ethernet shield:
byte ip[] = { 192, 168, 43, 230 };   
// IP-адрес, dns сервера:
byte sdns[] = { 192, 168, 43, 1 };   
// адрес шлюза:
byte gateway[] = { 192, 168, 43, 1 };
// маска:
byte subnet[] = { 255, 255, 255, 0 };
 
IPAddress server(94,19,113,221); // IP сервера
//IPAddress server(91,122,49,168); // IP сервера
EthernetClient client;
unsigned long lastConnectionTime = 0;   // время последней передачи данных
boolean lastConnected = false;          // состояние подключения
char replyBuffer[160];
 
void setup()
  {
  Serial.begin(9600);
  // Ethernet connection:
  Ethernet.begin(mac,ip,sdns,gateway,subnet);
  // секунда для инициализации Ethernet
  delay(1000);
  //первое соединение через 15 секунд после запуска
  lastConnectionTime = millis()-postingInterval+15000;
}
 
void loop()
  {
  //если не подключены, и прошло определенное время, то делаем замер,
  //переподключаемся и отправляем данные
  if (!client.connected() && (millis() - lastConnectionTime > postingInterval))
    {
    //формирование HTTP-запроса
    memset(replyBuffer, 0, sizeof(replyBuffer));
    strcpy(replyBuffer,"ID=");
    //Конвертируем MAC-адрес
    for (int k=0; k<6; k++)
      {
      int b1=mac[k]/16;
      int b2=mac[k]%16;
      char c1[2],c2[2];
 
      if (b1>9) c1[0]=(char)(b1-10)+'A';
      else c1[0] = (char)(b1) + '0';
      if (b2>9) c2[0]=(char)(b2-10)+'A';
      else c2[0] = (char)(b2) + '0';
 
      c1[1]='\0';
      c2[1]='\0';
 
      strcat(replyBuffer,c1);
      strcat(replyBuffer,c2);
      }
   strcat(replyBuffer,"&");
   strcat(replyBuffer,"3351C4BA0200003B");
   strcat(replyBuffer,"=");
   char temp[3];
   double tmpd=(analogRead(A0)*5.0/1024)*100-273.15;
   int tmpi=int(tmpd);
   itos(tmpi,temp);
   strcat(replyBuffer,temp);
   strcat(replyBuffer,'\0');
   //отправляем запрос
   httpRequest();
   }
  //храним последнее состояние подключения
  lastConnected = client.connected();
  }
// функция отправки запроса
void httpRequest() {
  if (client.connect(server, 80))
    {
    // send the HTTP POST request:
    client.println("POST http://narodmon.ru/post.php HTTP/1.0");
    client.println("Host: narodmon.ru");
    client.println("Content-Type: application/x-www-form-urlencoded");
    client.print("Content-Length: ");
    client.println(len(replyBuffer));
    client.println();
    client.println(replyBuffer);
    client.println();
    lastConnectionTime = millis();
    }
  else
    {
    client.stop();
    }
  }
 
// размер данных
int len(char *buf)
{
  int i=0;
  do
    {
    i++;
    } while (buf[i]!='\0');
  return i;
}
// функция int to string
void itos(int n, char bufp[3]) //
{
  char buf[3]={'0','0','\0'};
  int i = 1;
  while (n > 0)
    {
    buf[i] = (n % 10)+48;
    i--;
    n /= 10;
    }
  for (i=0; i<3; i++)
    bufp[i]=buf[i];
  }

Плата - Arduino Mega, Arduino Uno (пробовал на обеих)
в качестве адаптера - enc28j60
20130814093820798.JPG
На роутере включен dhcp.
При включении arduino, на адаптере (на самом ehternet порту) загорается зеленый индикатор на несколько секунд, затем на пол секунды потухает, затем кратковременно загорается желтый индикатор, затем все потухает, и ничего не происходит.
ip адреса в скетче прописаны в соостветствии с адресом сети, маски сети, и адресом роутера. В админке роутера новых устройств не появляется.
  • Вопрос задан
  • 2052 просмотра
Пригласить эксперта
Ответы на вопрос 1
@vanyamba-electronics
При включенном DHCP адрес присваивается клиенту роутером при подключении. А в данном случае он инициализируется статическим адресом 192.168.43.230.
Посмотрите, как ENC28J60 инициализируется в следующем скетче.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы