Не подключается модуль ENC28J60 к arduino nano

north_wind
Offline
Зарегистрирован: 20.01.2016

Всем привет!

Помогите не работает модуль ENC28J60 и arduno nano

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Помогаю.

Заработало?

north_wind
Offline
Зарегистрирован: 20.01.2016

нет ((( , суть в том что имеется ардуино нано + модуль ENC28J60 на 12 pin, подключил как тут рекомендуют http://forum.arduino.cc/index.php?topic=270961.0 и скачал библиотеку, плюс отдельное питание для модуля и ардуины, все соединил, подключил етхернет кабель и никакой реакции нет, не получает сетевые настройки и все, хотя все "лампочки" горят и на ардуино и на модуле, и в самом етхернет разьеме зеленый горит, а желтый светодиод иногда мигает...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

north_wind пишет:

нет ((( , суть в том что имеется ардуино нано + модуль ENC28J60 на 12 pin, подключил как тут рекомендуют http://forum.arduino.cc/index.php?topic=270961.0 и скачал библиотеку, плюс отдельное питание для модуля и ардуины, все соединил, подключил етхернет кабель и никакой реакции нет, не получает сетевые настройки и все, хотя все "лампочки" горят и на ардуино и на модуле, и в самом етхернет разьеме зеленый горит, а желтый светодиод иногда мигает...

Как подключил - ХЗ!
Какую библиотеку скачал (и куда её засунул) - ХЗ!
Как включил отдельное питание - ХЗ!
Что именно "всё" соединил и как (Vcc c GND cоединил? Или нет? Что значит "всё"?) - ХЗ!
Какой там скетч - ХЗ!

Нужна помощь, пожалуйста потрудитесь выложить схему включения, скетч и последовательность действий. А не нужна - так говорите, что у Вас не работает, нчего не показывая.

std
Offline
Зарегистрирован: 05.01.2012

Что такое "на 12 пин"? Подключение сетевых модулей таково:

SCK/SCL -> D13

SO/MISO -> D12

SI/MOSI -> D11

CSEL/CS -> D10

Для начала подключите так, и библиотеки будем пробовать отсюда. Собирайте пример WebRemote и пишите, что получилось. Учтите, в примере ошибка, в #include написано имя etherShield.h с маленькой буквы, правильно - с большой #include "EtherShield.h"

И "сетевые настройки" пусть пока отдыхают IP должен быть статическим, ну и настройка Windows/роутера соответствующая.

north_wind
Offline
Зарегистрирован: 20.01.2016

попробую конечно, скетч и прочее, новичок я совсем зеленый вот и не пишу ничего (((

north_wind
Offline
Зарегистрирован: 20.01.2016

привет!

12 пин это такой модуль http://www.aliexpress.com/item/ENC28J60-LAN-Ethernet-Network-Board-Module-for-arduino-25MHZ-Crystal-AVR-51-LPC-STM32-3-3V/1989494548.html  12 ножек, там везде в инете 10 ножек на таком модуле у меня 12.

подключил так к арудино нано

VCC 5 V
GND GND
SCK Pin 13
SO Pin 12
SI Pin 11
CS Pin 8

 

библиотека эта подошла: https://github.com/jcw/ethercard

попробовал пример backsoon из библиотки, подставив свои значения мак адреса и статистического адреса, вроде "работает" пингуется и на страничку заходит

// Present a "Will be back soon web page", as stand-in webserver.
// 2011-01-30 <jc@wippler.nl> http://opensource.org/licenses/mit-license.php
 
#include <EtherCard.h>

#define STATIC 1  // set to 1 to disable DHCP (adjust myip/gwip values below)

#if STATIC
// ethernet interface ip address
static byte myip[] = { 192,168,0,107 };
// gateway ip address
static byte gwip[] = { 192,168,0,1 };
#endif

// ethernet mac address - must be unique on your network: 00-01-24-5d-8b-04
static byte mymac[] = { 0x00,0x01,0x24,0x5D,0x8B,0x04 };

byte Ethernet::buffer[500]; // tcp/ip send and receive buffer

const char page[] PROGMEM =
"HTTP/1.0 503 Service Unavailable\r\n"
"Content-Type: text/html\r\n"
"Retry-After: 600\r\n"
"\r\n"
"<html>"
  "<head><title>"
    "Service Temporarily Unavailable"
  "</title></head>"
  "<body>"
    "<h3>This service is currently unavailable</h3>"
    "<p><em>"
      "The main server is currently off-line.<br />"
      "Please try again later."
    "</em></p>"
  "</body>"
"</html>"
;

void setup(){
  Serial.begin(57600);
  Serial.println("\n[backSoon]");
  
  if (ether.begin(sizeof Ethernet::buffer, mymac) == 0) 
    Serial.println( "Failed to access Ethernet controller");
#if STATIC
  ether.staticSetup(myip, gwip);
#else
  if (!ether.dhcpSetup())
    Serial.println("DHCP failed");
#endif

  ether.printIp("IP:  ", ether.myip);
  ether.printIp("GW:  ", ether.gwip);  
  ether.printIp("DNS: ", ether.dnsip);  
}

void loop(){
  // wait for an incoming TCP packet, but ignore its contents
  if (ether.packetLoop(ether.packetReceive())) {
    memcpy_P(ether.tcpOffset(), page, sizeof page);
    ether.httpServerReply(sizeof page - 1);
  }
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

north_wind пишет:

попробую конечно, скетч и прочее, новичок я совсем зеленый вот и не пишу ничего (((

Ничего, сейчас покраснеете.

С какой целью Вы подаёте 5В на Vin? Открываем описание Вашей платы и читаем

Входное напряжение (рекомендуемое) 7-12 В
Входное напряжение (предельное) 6-20 В

ну, и за что Вы ей свои пять пихаете? На голодном пайке решили подержать? Надеетесь, что сбросит вес и станет потоньше? :)

Если уж у Вас пять вольт, так и подавайте их на ногу 5В, Vin то чем провинился?

над модулем. который сверху, Вы вообще решили поиздеваться. На VCC Вы ему зачем-то "-" подали, а на GND - плюс. Жив ещё? Или в помойке уже?

Остальное не смотрел. Всё равно скетч нужен.

north_wind
Offline
Зарегистрирован: 20.01.2016

А вот оно как надо буду тогда на 5 вольт подавать, а не vin ардуины...

Нет, на модуле все норм, только картинка неправильная там все норм минус на ground, плюс на 5v модуля етхернет

код есть найден на просторха интернета, но у меня там нету некоторых компонентов датчика температуры DHT11/22,  а есть только Arduino NANO v.3.0 + Enc28j60 +BMP180

Первоночальная идея брать температуру и давление с дачика bmp180 и отправлять на сервис www.narodmon.ru, я попробовал заливать этот код но он не заливается, ошибки лезут, тем более я как понял библиотека етхернета не подходит, надо искать под свои модуль етхернет, впринципе я нашел эту https://github.com/jcw/ethercard как и писал std, но там там только пример стандартный работает для статитсического адреса из библиотеки, а для динамического или отправки данных ничего не работает, вернее я не знаю чего там в этом коде исправлять под свои нужды

#include <Wire.h>
#include <BMP085.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <EtherCard.h>
#include <dht11.h>
 
#define DHT11PIN 6
#define ONE_WIRE_BUS 2                             // Data wire is plugged into digital pin 3 on the Arduino
#define NumberOfDevices 8                          // Set maximum number of devices in order to dimension
#define led  13
#define REQUEST_RATE 300000 // milliseconds
BMP085 dps = BMP085();      // Digital Pressure Sensor 

long Temperature = 0, Pressure = 0, Altitude = 0, dav = 0;

static byte mac[] = { 0xD4, 0xCA, 0x6D, 0x53, 0x9D, 0x00 }; //В этой строке задайте свой MAC адрес
char mak[]="D4CA6D539D00";
static byte hisip[] = { 94,19,113,221 };//Здесь надо указать IP адрес сайта narodmon.ru
dht11 sensor;
OneWire oneWire(ONE_WIRE_BUS);                     // Setup a oneWire instance to communicate with any OneWire devices
DallasTemperature sensors(&oneWire);               // Pass our oneWire reference to Dallas Temperature.
byte allAddress [NumberOfDevices][8];              // Device Addresses are 8-element byte arrays.
                                                   // we need one for each of our DS18B20 sensors.
byte totalDevices;                                 // Declare variable to store number of One Wire devices
                                                   // that are actually discovered.
byte discoverOneWireDevices() {
  byte j=0;                                        // search for one wire devices and
                                                   // copy to device address arrays.
  while ((j < NumberOfDevices) && (oneWire.search(allAddress[j]))) {        
    j++;
  }
   return j                      ;                 // return total number of devices found.
}
String macstring;
String DSstring[NumberOfDevices];
byte Ethernet::buffer[700];
static long timer;
Stash stash;  

unsigned long time1=0;

void setup() {
  Serial.begin(57600);
   Wire.begin();
   delay(1000);
  dps.init();
  // note: use zeroCal only after initialization.
  // dps.zeroCal(101800, 0);    // set zero point
  if (ether.begin(sizeof Ethernet::buffer, mac, SS) == 0)
    Serial.println( "Failed to access Ethernet controller");
  if (!ether.dhcpSetup())
    Serial.println("DHCP failed");
    
  //overwrite DNS with google's if there are problems with DNS setup
  static byte dnsip[] = {8,8,8,8};
  ether.copyIp(ether.dnsip, dnsip);
 
  ether.printIp("My IP: ", ether.myip);
  ether.printIp("GW IP: ", ether.gwip);
  ether.printIp("DNS IP: ", ether.dnsip);
  ether.copyIp(ether.hisip, hisip);
  ether.printIp("Server: ", ether.hisip);
  while (ether.clientWaitingGw())
    ether.packetLoop(ether.packetReceive());
  Serial.println("Gateway found");
  macstring="";
  for(int k=0;k<sizeof(mac)/sizeof(byte);k++)
  {
        char msg[3];
        sprintf(msg,"%02X",mac[k]);
        //if (macstring!="#") macstring+="-";
        macstring+=msg;
  }
    
  pinMode(led, OUTPUT);
  sensors.begin();
  totalDevices = discoverOneWireDevices();
  for (byte i=0; i < totalDevices; i++)
  {
    DSstring[i]="";
    for(int k=7;k>=0;k--)
    {
          char msg[3];
          sprintf(msg,"%02X",allAddress[i][k]);
          DSstring[i]+=msg;
    };
   
    sensors.setResolution(allAddress[i], 10);      // and set the a to d conversion resolution of each.
  }
 
  timer = - REQUEST_RATE; // start timing out right away
}
void loop() {
 
  if (((millis() - time1)/1000.0) >= 1.0) {     
     dps.calcTrueTemperature();
     time1 = millis();      
  }
 
  dps.getPressure(&Pressure);
  dps.getAltitude(&Altitude);
  dav=Pressure/133.3224;
  ether.packetLoop(ether.packetReceive());
 
  if (millis() > timer + REQUEST_RATE)
  {
    timer = millis();
    byte sd = stash.create();
    stash.print("ID=");
    stash.print(mak);
    Serial.println("\n\n\nPosting...\n");
    Serial.println(mak);
    digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
    delay(100);               // wait for a second
    digitalWrite(led, LOW);
    
    sensors.requestTemperatures();                // Initiate  temperature request to all devices
    String result;
    char msg[50];
    result=macstring+"\n";
    String temp;
    for (byte i=0; i < totalDevices; i++) {
      float tempC = sensors.getTempC(allAddress[i]);           // read the device at addr.
      if (tempC != -127.00)
      {
        //dtostrf(tempC,10,2,msg);
       // stash.print("&");
       // stash.print(DSstring[i]);
       // stash.print("=");
       // stash.print(tempC);
      }
    }
 
    int chk = sensor.read(DHT11PIN);
    if (chk==DHTLIB_OK)
    {     
          stash.print("&");
          stash.print(mak);
          stash.print("01");
          stash.print("=");
          stash.print(sensor.temperature);
          stash.print("&");
          stash.print(mak);
          stash.print("02");
          stash.print("=");
          stash.print(sensor.humidity);
          stash.print("&");
          stash.print(mak);
          stash.print("03");
          stash.print("=");
          stash.print(dav);
          Serial.println(Pressure);
          Serial.println(dav);
    }
    else
      switch (chk)
      {
        case DHTLIB_ERROR_CHECKSUM:
             Serial.println("Checksum error");
             break;
        case DHTLIB_ERROR_TIMEOUT:
             Serial.println("Time out error");
             break;
        default:
             Serial.println("Unknown error");
             break;
      }
    
    stash.save();
    // generate the header with payload - note that the stash size is used,
    // and that a "stash descriptor" is passed in as argument using "$H"
    Stash::prepare(PSTR("POST http://narodmon.ru/post.php HTTP/1.0" "\r\n"
                        "Host: narodmon.ru" "\r\n"
                        "Content-Length: $D" "\r\n"
                        "\r\n"
                        "$H"),
                  stash.size(), sd);
    // send the packet - this also releases all stash buffers once done
    ether.tcpSend();
    Serial.println("Done");
  }
}

 

Алексей 022
Offline
Зарегистрирован: 16.04.2019

Добрый день. Делаю мониторинг через ардунку и ENC28J60. Внутри локальной сети всё работает, а извне не чего не работает. Если кто-то знает помогите пожалуйста.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А что за безобразие у Вас написано в строке №123??? Исправляйте.