Arduino Mega + сетевая enc28j60

Михаил З
Offline
Зарегистрирован: 22.03.2020

Проблема в подключении. Скетч - простейший пример присоединения к сети. На UNO R3 всё работает, для меги не могу реализовать:

при компиляции куча ошибок и не работает.

 

#include <EtherCard.h>
 
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x32 };
 
byte Ethernet::buffer[700];
 
void setup () {
Serial.begin(57600);
Serial.println(F("\n[testDHCP]"));
 
Serial.print("MAC: ");
for (byte i = 0; i < 6; ++i) {
Serial.print(mymac[i], HEX);
if (i < 5)
Serial.print(':');
}
Serial.println();
 
if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)
Serial.println(F("Failed to access Ethernet controller"));
 
Serial.println(F("Setting up DHCP"));
if (!ether.dhcpSetup())
Serial.println(F("DHCP failed"));
 
ether.printIp("My IP: ", ether.myip);
ether.printIp("Netmask: ", ether.netmask);
ether.printIp("GW IP: ", ether.gwip);
ether.printIp("DNS IP: ", ether.dnsip);
}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

А вопрос какой?

Михаил З
Offline
Зарегистрирован: 22.03.2020

Наверно вопрос - как сделать, что  бы работало.

Получало IP и тд

sadman41
Offline
Зарегистрирован: 19.10.2016

1) Правильно присоединить модуль к ардуине 
2) Скомпилировать пример из библиотеки.

То, что выше - и для Uno не скомпилируется.

Михаил З
Offline
Зарегистрирован: 22.03.2020
[testDHCP]
MAC: 74:69:69:2D:30:32

Михаил З
Offline
Зарегистрирован: 22.03.2020
[testDHCP]
MAC: 74:69:69:2D:30:32

Михаил З
Offline
Зарегистрирован: 22.03.2020
 
[testDHCP]
MAC: 74:69:69:2D:30:32
Setting up DHCP
My IP: 192.168.1.169
Netmask: 255.255.255.0
GW IP: 192.168.1.1
DNS IP: 192.168.1.1
 
Михаил З
Offline
Зарегистрирован: 22.03.2020

это UNO R3

Михаил З
Offline
Зарегистрирован: 22.03.2020

на меге встаёт на 

[testDHCP]
MAC: 74:69:69:2D:30:32
Михаил З
Offline
Зарегистрирован: 22.03.2020

пробовал разные подключения модуля к меге, результат один - не работает

sadman41
Offline
Зарегистрирован: 19.10.2016

Какие - разные? 

Вот нормальное соединение, если модуль с 5V стабилизатором - подключать на +5V, а не на +3.3V: https://github.com/ntruchsess/arduino_uip/issues/177

Михаил З
Offline
Зарегистрирован: 22.03.2020

попробовал еше раз эту схему - не идёт

Михаил З
Offline
Зарегистрирован: 22.03.2020

... или 3.3 вольта запитать на 5 вольт Меги?

vitalikost
Offline
Зарегистрирован: 28.11.2014

если модуль

с 5V стабилизатором - подключать на +5V, или на Меге паленые порты

Михаил З
Offline
Зарегистрирован: 22.03.2020

Михаил З
Offline
Зарегистрирован: 22.03.2020

sadman41
Offline
Зарегистрирован: 19.10.2016

Модуль 5вольтовый, на нем даже пин 5V есть - подписан.

Михаил З
Offline
Зарегистрирован: 22.03.2020

попробовал на другой меге - результат тот же

Михаил З
Offline
Зарегистрирован: 22.03.2020

... и на 5 вольт пробовал

sadman41
Offline
Зарегистрирован: 19.10.2016

Чудес не бывает. Или плохой контакт или хорошее замыкание происходит. С такими проводками много мороки. У меня с таким модулем особых проблем не было при корректном соединении.

Михаил З
Offline
Зарегистрирован: 22.03.2020

уже и провода взял с UNO.

 и так и сяк...

Михаил З
Offline
Зарегистрирован: 22.03.2020

а по фото всё верно подключено?

бывает, замылится глаз...

sadman41
Offline
Зарегистрирован: 19.10.2016

Лично я не совсем понимаю что куда в Меге воткнуто.

Михаил З
Offline
Зарегистрирован: 22.03.2020

ф - 50

з - 51

о - 52

ж - 53

Михаил З
Offline
Зарегистрирован: 22.03.2020

ф (S0)- 50

з (SI) - 51

ораньжевый (SCK) - 52

ж (CS) - 53

sadman41
Offline
Зарегистрирован: 19.10.2016

Мне так вообще показалось, что жёлтый мимо воткнут.

Может библиотека не знает про CS=53 и ищет его на 10? Такое в штатной бывало...

Михаил З
Offline
Зарегистрирован: 22.03.2020

при компиляции такой ворох сообщений:

In file included from C:\Users\������\Documents\Arduino\libraries\ethercard\EtherCard.cpp:12:0:
C:\Users\������\Documents\Arduino\libraries\ethercard/EtherCard.h:124:40: warning: 'prog_char' is deprecated [-Wdeprecated-declarations]
     static void prepare (PGM_P fmt, ...);
                                        ^
C:\Users\������\Documents\Arduino\libraries\ethercard/EtherCard.h:193:32: warning: 'prog_char' is deprecated [-Wdeprecated-declarations]
     void emit_p (PGM_P fmt, ...);
                                ^
C:\Users\������\Documents\Arduino\libraries\ethercard/EtherCard.h:205:41: warning: 'prog_char' is deprecated [-Wdeprecated-declarations]
     void emit_raw_p (PGM_P p, uint16_t n) { memcpy_P(ptr, p, n); ptr += n; }
                                         ^
In file included from C:\Users\������\Documents\Arduino\libraries\ethercard\dns.cpp:7:0:
C:\Users\������\Documents\Arduino\libraries\ethercard\EtherCard.h:124:40: warning: 'prog_char' is deprecated [-Wdeprecated-declarations]
     static void prepare (PGM_P fmt, ...);
                                        ^
C:\Users\������\Documents\Arduino\libraries\ethercard\EtherCard.h:193:32: warning: 'prog_char' is deprecated [-Wdeprecated-declarations]
     void emit_p (PGM_P fmt, ...);
                                ^
C:\Users\������\Documents\Arduino\libraries\ethercard\EtherCard.h:205:41: warning: 'prog_char' is deprecated [-Wdeprecated-declarations]
     void emit_raw_p (PGM_P p, uint16_t n) { memcpy_P(ptr, p, n); ptr += n; }
                                         ^
C:\Users\������\Documents\Arduino\libraries\ethercard\EtherCard.cpp:143:36: warning: 'prog_char' is deprecated [-Wdeprecated-declarations]
 void Stash::prepare (PGM_P fmt, ...) {
                                    ^
C:\Users\������\Documents\Arduino\libraries\ethercard\EtherCard.cpp: In static member function 'static void Stash::extract(uint16_t, uint16_t, void*)':
C:\Users\������\Documents\Arduino\libraries\ethercard\EtherCard.cpp:197:11: warning: 'prog_char' is deprecated: prog_char type is deprecated. [-Wdeprecated-declarations]
     PGM_P fmt = (PGM_P) *++segs;
           ^~~
In file included from C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.39.0_x86__mdqgnx93n4wtt\hardware\arduino\avr\cores\arduino/Arduino.h:28:0,
                 from C:\Users\������\Documents\Arduino\libraries\ethercard/EtherCard.h:28,
                 from C:\Users\������\Documents\Arduino\libraries\ethercard\EtherCard.cpp:12:
c:\program files\windowsapps\arduinollc.arduinoide_1.8.39.0_x86__mdqgnx93n4wtt\hardware\tools\avr\avr\include\avr\pgmspace.h:354:14: note: declared here
 typedef char prog_char __attribute__((__progmem__,deprecated("prog_char type is deprecated.")));
              ^~~~~~~~~
In file included from C:\Users\������\Documents\Arduino\libraries\ethercard\tcpip.cpp:14:0:
C:\Users\������\Documents\Arduino\libraries\ethercard\EtherCard.h:124:40: warning: 'prog_char' is deprecated [-Wdeprecated-declarations]
     static void prepare (PGM_P fmt, ...);
                                        ^
C:\Users\������\Documents\Arduino\libraries\ethercard\EtherCard.cpp: In static member function 'static void Stash::cleanup()':
C:\Users\������\Documents\Arduino\libraries\ethercard\EtherCard.cpp:255:11: warning: 'prog_char' is deprecated: prog_char type is deprecated. [-Wdeprecated-declarations]
     PGM_P fmt = (PGM_P) *++segs;
           ^~~
In file included from C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.39.0_x86__mdqgnx93n4wtt\hardware\arduino\avr\cores\arduino/Arduino.h:28:0,
                 from C:\Users\������\Documents\Arduino\libraries\ethercard/EtherCard.h:28,
                 from C:\Users\������\Documents\Arduino\libraries\ethercard\EtherCard.cpp:12:
c:\program files\windowsapps\arduinollc.arduinoide_1.8.39.0_x86__mdqgnx93n4wtt\hardware\tools\avr\avr\include\avr\pgmspace.h:354:14: note: declared here
 typedef char prog_char __attribute__((__progmem__,deprecated("prog_char type is deprecated.")));
              ^~~~~~~~~
C:\Users\������\Documents\Arduino\libraries\ethercard\EtherCard.h:193:32: warning: 'prog_char' is deprecated [-Wdeprecated-declarations]
     void emit_p (PGM_P fmt, ...);
                                ^
C:\Users\������\Documents\Arduino\libraries\ethercard\EtherCard.h:205:41: warning: 'prog_char' is deprecated [-Wdeprecated-declarations]
     void emit_raw_p (PGM_P p, uint16_t n) { memcpy_P(ptr, p, n); ptr += n; }
                                         ^
C:\Users\������\Documents\Arduino\libraries\ethercard\EtherCard.cpp: At global scope:
C:\Users\������\Documents\Arduino\libraries\ethercard\EtherCard.cpp:270:41: warning: 'prog_char' is deprecated [-Wdeprecated-declarations]
 void BufferFiller::emit_p(PGM_P fmt, ...) {
                                         ^
C:\Users\������\Documents\Arduino\libraries\ethercard\EtherCard.cpp: In member function 'void BufferFiller::emit_p(const prog_char*, ...)':
C:\Users\������\Documents\Arduino\libraries\ethercard\EtherCard.cpp:311:19: warning: 'prog_char' is deprecated: prog_char type is deprecated. [-Wdeprecated-declarations]
             PGM_P s = va_arg(ap, PGM_P);
                   ^
In file included from C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.39.0_x86__mdqgnx93n4wtt\hardware\arduino\avr\cores\arduino/Arduino.h:28:0,
                 from C:\Users\������\Documents\Arduino\libraries\ethercard/EtherCard.h:28,
                 from C:\Users\������\Documents\Arduino\libraries\ethercard\EtherCard.cpp:12:
c:\program files\windowsapps\arduinollc.arduinoide_1.8.39.0_x86__mdqgnx93n4wtt\hardware\tools\avr\avr\include\avr\pgmspace.h:354:14: note: declared here
 typedef char prog_char __attribute__((__progmem__,deprecated("prog_char type is deprecated.")));
              ^~~~~~~~~
In file included from C:\Users\������\Documents\Arduino\libraries\ethercard\udpserver.cpp:8:0:
C:\Users\������\Documents\Arduino\libraries\ethercard\EtherCard.h:124:40: warning: 'prog_char' is deprecated [-Wdeprecated-declarations]
     static void prepare (PGM_P fmt, ...);
                                        ^
C:\Users\������\Documents\Arduino\libraries\ethercard\EtherCard.h:193:32: warning: 'prog_char' is deprecated [-Wdeprecated-declarations]
     void emit_p (PGM_P fmt, ...);
                                ^
C:\Users\������\Documents\Arduino\libraries\ethercard\EtherCard.h:205:41: warning: 'prog_char' is deprecated [-Wdeprecated-declarations]
     void emit_raw_p (PGM_P p, uint16_t n) { memcpy_P(ptr, p, n); ptr += n; }
                                         ^
In file included from C:\Users\������\Documents\Arduino\libraries\ethercard\dhcp.cpp:17:0:
C:\Users\������\Documents\Arduino\libraries\ethercard\EtherCard.h:124:40: warning: 'prog_char' is deprecated [-Wdeprecated-declarations]
     static void prepare (PGM_P fmt, ...);
                                        ^
C:\Users\������\Documents\Arduino\libraries\ethercard\EtherCard.h:193:32: warning: 'prog_char' is deprecated [-Wdeprecated-declarations]
     void emit_p (PGM_P fmt, ...);
                                ^
C:\Users\������\Documents\Arduino\libraries\ethercard\EtherCard.h:205:41: warning: 'prog_char' is deprecated [-Wdeprecated-declarations]
     void emit_raw_p (PGM_P p, uint16_t n) { memcpy_P(ptr, p, n); ptr += n; }
                                         ^
In file included from C:\Users\������\Documents\Arduino\libraries\ethercard\webutil.cpp:7:0:
C:\Users\������\Documents\Arduino\libraries\ethercard\EtherCard.h:124:40: warning: 'prog_char' is deprecated [-Wdeprecated-declarations]
     static void prepare (PGM_P fmt, ...);
                                        ^
C:\Users\������\Documents\Arduino\libraries\ethercard\EtherCard.h:193:32: warning: 'prog_char' is deprecated [-Wdeprecated-declarations]
     void emit_p (PGM_P fmt, ...);
                                ^
C:\Users\������\Documents\Arduino\libraries\ethercard\EtherCard.h:205:41: warning: 'prog_char' is deprecated [-Wdeprecated-declarations]
     void emit_raw_p (PGM_P p, uint16_t n) { memcpy_P(ptr, p, n); ptr += n; }
 
sadman41
Offline
Зарегистрирован: 19.10.2016

Это опенсорц, привыкайте плавать самостоятельно.

Перейдите на UIPEthernet, если с EtherCard не справляетесь.

Михаил З
Offline
Зарегистрирован: 22.03.2020

sadman41 пишет:
Это опенсорц, привыкайте плавать самостоятельно. Перейдите на UIPEthernet, если с EtherCard не справляетесь.

 

"опенсорц" - это ладно. Вдруг умные люди разглядели бы там ошибку среди предупреждений.

Чем поможет UIPEtherne, чем он проще?

vitalikost
Offline
Зарегистрирован: 28.11.2014

А добавь в setup

  /* Проверяем, что контроллер Ethernet доступен для работы */
  Serial.println("Initialising the Ethernet controller");
  if (ether.begin(sizeof Ethernet::buffer, mac, 53) == 0) {
    Serial.println( "Ethernet controller NOT initialised");
    while (true);
  }

  // Пытаемся получить адрес динамически 
  Serial.println("Attempting to get an IP address using DHCP");
  if (ether.dhcpSetup()) {
    ether.printIp("Got an IP address using DHCP: ", ether.myip);
  } 
  else {
    // Если DHCP не доступен, используем статический ip-адрес
    ether.staticSetup(ip, gateway, dns);
    ether.printIp("DHCP FAILED, using fixed address: ", ether.myip);
    fixed = true;
  }

А это перед setup

uint8_t ip[] = { 
  192, 168, 0, 136 };     // Статический IP-адрес
uint8_t subnet[] = { 
  255, 255, 0, 0 };   // Маска подсети
uint8_t gateway[] = { 
  192, 168, 0, 2 }; // Адрес шлюза 
uint8_t dns[] = { 
  192, 168, 0, 1 };     // Адрес DNS-сервера (необязателен)
 
Михаил З
Offline
Зарегистрирован: 22.03.2020

vitalikost пишет:

А добавь в setup

  /* Проверяем, что контроллер Ethernet доступен для работы */
  Serial.println("Initialising the Ethernet controller");
  if (ether.begin(sizeof Ethernet::buffer, mac, 53) == 0) {
    Serial.println( "Ethernet controller NOT initialised");
    while (true);
  }

  // Пытаемся получить адрес динамически 
  Serial.println("Attempting to get an IP address using DHCP");
  if (ether.dhcpSetup()) {
    ether.printIp("Got an IP address using DHCP: ", ether.myip);
  } 
  else {
    // Если DHCP не доступен, используем статический ip-адрес
    ether.staticSetup(ip, gateway, dns);
    ether.printIp("DHCP FAILED, using fixed address: ", ether.myip);
    fixed = true;
  }

А это перед setup

uint8_t ip[] = { 
  192, 168, 0, 136 };     // Статический IP-адрес
uint8_t subnet[] = { 
  255, 255, 0, 0 };   // Маска подсети
uint8_t gateway[] = { 
  192, 168, 0, 2 }; // Адрес шлюза 
uint8_t dns[] = { 
  192, 168, 0, 1 };     // Адрес DNS-сервера (необязателен)
 

ругается на

if (ether.begin(sizeof Ethernet::buffer, mac, 53) == 0) {

нет такого mac

vitalikost
Offline
Зарегистрирован: 28.11.2014
#include <EtherCard.h>
// настройки Ethernet
#define BUF_SIZE 2000//Больше не хочет работать
byte mac[] = { 
  0x54, 0x55, 0x58, 0x10, 0x00, 0x24 }; // MAC-адрес
byte fixed = false; // =false: пробовать получить адрес по DHCP, 
//         в случае неудачи использовать статический; 
// =true:  сразу использовать статический

uint8_t ip[] = { 
  192, 168, 0, 136 };     // Статический IP-адрес
uint8_t subnet[] = { 
  255, 255, 0, 0 };   // Маска подсети
uint8_t gateway[] = { 
  192, 168, 0, 2 }; // Адрес шлюза 
uint8_t dns[] = { 
  192, 168, 0, 1 };     // Адрес DNS-сервера (необязателен)

byte Ethernet::buffer[BUF_SIZE];
static BufferFiller bfill;  // used as cursor while filling the buffer

void setup(void)
{
  Serial.begin(9600);

  delay(2000);

  /* Проверяем, что контроллер Ethernet доступен для работы */
  Serial.println("Initialising the Ethernet controller");
  if (ether.begin(sizeof Ethernet::buffer, mac, 53) == 0) {
    Serial.println( "Ethernet controller NOT initialised");
    while (true);
  }

  // Пытаемся получить адрес динамически 
  Serial.println("Attempting to get an IP address using DHCP");
  if (ether.dhcpSetup()) {
    ether.printIp("Got an IP address using DHCP: ", ether.myip);
  } 
  else {
    // Если DHCP не доступен, используем статический ip-адрес
    ether.staticSetup(ip, gateway, dns);
    ether.printIp("DHCP FAILED, using fixed address: ", ether.myip);
    fixed = true;
  }
}

void loop(void)
{}

 

b707
Offline
Зарегистрирован: 26.05.2017

Михаил З пишет:

ругается на

if (ether.begin(sizeof Ethernet::buffer, mac, 53) == 0) {

нет такого mac

Блин, так заведите! Почему в своих скетчах в начале ветки вы задавали mac. а тут - не можете?

Михаил, это у ни в какие ворота. Как уже сказали, опенсорц - это значит что вы сами пытаетесь разобраться.

Михаил З
Offline
Зарегистрирован: 22.03.2020

b707 пишет:

Михаил З пишет:

ругается на

if (ether.begin(sizeof Ethernet::buffer, mac, 53) == 0) {

нет такого mac

Блин, так заведите! Почему в своих скетчах в начале ветки вы задавали mac. а тут - не можете?

Михаил, это у ни в какие ворота. Как уже сказали, опенсорц - это значит что вы сами пытаетесь разобраться.

пардон, туплю. я его стёр

Михаил З
Offline
Зарегистрирован: 22.03.2020

стопорится на

if (ether.begin(sizeof Ethernet::buffer, mymac, 53) == 0) 

vitalikost
Offline
Зарегистрирован: 28.11.2014

Тогда не знаю... пробуйте альтернативу UIPEthernet

sadman41
Offline
Зарегистрирован: 19.10.2016

Диагноз тут простой - нет обмена по SPI. А почему - может и библиотеке надо ткнуть носом, мож провода не тащат, а может к уно подключается один модуль, а к меге - другой. Причин факапа - уйма.

Михаил З
Offline
Зарегистрирован: 22.03.2020

...уф

заработало

Схема будет выглядеть так:

  • VCC – 3v3;
  • GND – GND;
  • CS – 8;
  • SI – 11;
  • SO – 12;
  • SCK – 13.
https://voltiq.ru/wp-content/uploads/1-2-300x172.jpg 300w, https://voltiq.ru/wp-content/uploads/1-2-600x343.jpg 600w" height="348" sizes="(max-width: 608px) 100vw, 608px" src="https://voltiq.ru/wp-content/uploads/1-2.jpg" srcset="https://voltiq.ru/wp-content/uploads/1-2.jpg 608w, https://voltiq.ru/wp-content/uploads/1-2-300x172.jpg 300w, https://voltiq.ru/wp-content/uploads/1-2-600x343.jpg 600w" style="box-sizing: border-box; height: auto; max-width: 100%; border-radius: inherit; border-color: inherit !important; color: inherit !important;" width="608" />

При использовании Arduino Mega она станет выглядеть так:

  • VCC – 3v3;
  • GND – GND;
  • CS – 53;
  • SI – 51;
  • SO – 50;
  • SCK – 52.

но второе - не верно. Для меги CS = 8

Михаил З
Offline
Зарегистрирован: 22.03.2020

теперь интересно запустить

ESP-12E Wi-fi Shield

vitalikost
Offline
Зарегистрирован: 28.11.2014

А не проще использовать ESP8266-12E WeMos D1 или WeMos D1 mini.

 

Михаил З
Offline
Зарегистрирован: 22.03.2020

мне думается, это одно и то же в разном исполнении. или как?

vitalikost
Offline
Зарегистрирован: 28.11.2014

Нет, это шидл, который использует возможности Ардуины, общаются я так понял они через serial AT командами.

А Wemos это самостоятельная esp8260 обвязкой, которую можно программировать в IDE

Михаил З
Offline
Зарегистрирован: 22.03.2020

vitalikost пишет:

Нет, это шидл, который использует возможности Ардуины, общаются я так понял они через serial AT командами.

А Wemos это самостоятельная esp8260 обвязкой, которую можно программировать в IDE

это меня и настораживало, когда покупал...

надо искать Wemos