Arduino Nano + ENC28J60

Тема в разделе "Arduino & Shields", создана пользователем alena996, 20 авг 2019.

  1. alena996

    alena996 Нерд

    Добрый вечер!
    Решили с друзьями сделать Метеостанцию с подключением к домашней сети.
    Столкнулись с проблемой. Питание на плату уходит. но сама плата не работает.
    Не работает код из примера Ethernet - webServer.
    Помогите пожалуйста.
    Код (C++):
    /*
      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
    modified 02 Sept 2015
    by Arturo Guadalupi
    */


    #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() {
      // You can use Ethernet.init(pin) to configure the CS pin
      //Ethernet.init(10);  // Most Arduino shields
      //Ethernet.init(5);   // MKR ETH shield
      //Ethernet.init(0);   // Teensy 2.0
      //Ethernet.init(20);  // Teensy++ 2.0
      //Ethernet.init(15);  // ESP8266 with Adafruit Featherwing Ethernet
      //Ethernet.init(33);  // ESP32 with Adafruit Featherwing Ethernet

      // Open serial communications and wait for port to open:
      Serial.begin(9600);
      while (!Serial) {
        ; // wait for serial port to connect. Needed for native USB port only
      }
      Serial.println("Ethernet WebServer Example");

      // start the Ethernet connection and the server:
      Ethernet.begin(mac, ip);

      // Check for Ethernet hardware present
      if (Ethernet.hardwareStatus() == EthernetNoHardware) {
        Serial.println("Ethernet shield was not found.  Sorry, can't run without hardware. :(");
        while (true) {
          delay(1); // do nothing, no point running without Ethernet hardware
        }
      }
      if (Ethernet.linkStatus() == LinkOFF) {
        Serial.println("Ethernet cable is not connected.");
      }

      // start the server
      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("<!DOCTYPE HTML>");
              client.println("<html>");
              // 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("<br />");
              }
              client.println("</html>");
              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");
      }
    }
     
     
  2. NikitOS

    NikitOS Король шутов Администратор

    И что же у вас не работает?
    Как вы это поняли?
     
  3. alena996

    alena996 Нерд

    вот результат программы в мониторе порта.
    Ethernet WebServer Example
    Ethernet shield was not found. Sorry, can't run without hardware. :(
     
  4. NikitOS

    NikitOS Король шутов Администратор

    Ну ясно же сказано, что он не видит шилд
    Эта библиотека не для этого модуля, вы в гугле смотрели?
    https://voltiq.ru/connect-enc28j60-to-arduino/
     
  5. alena996

    alena996 Нерд

    библиотеки EtherCard.h тоже не работаю
    я несколько дней бьюсь над этой проблемой и не могу решить
     
  6. NikitOS

    NikitOS Король шутов Администратор

    Используйте EtherCard
    Что с ним-то не получилось?
     
  7. alena996

    alena996 Нерд

    в мониторе порта пишет mac, думает очень долго и затем выдает все 0
     
  8. NikitOS

    NikitOS Король шутов Администратор

    Может все-же ip?
     
  9. alena996

    alena996 Нерд

  10. NikitOS

    NikitOS Король шутов Администратор

    Код дайте
     
  11. alena996

    alena996 Нерд

    Код (C++):
    #include <EtherCard.h>
    static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
    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);
    }
    void loop () {}
     
  12. NikitOS

    NikitOS Король шутов Администратор

  13. alena996

    alena996 Нерд

    идет не совместимость библиотеки и IDE ищу библиотеки более свежие
    upload_2019-8-20_21-2-58.png
     
  14. alena996

    alena996 Нерд

    upload_2019-8-20_21-11-13.png
     
  15. b707

    b707 Гуру

    Алена, не надо выкладывать скриншоты. на них ничего не видно.
    просто скопируйте текст ошибки и вставьте в сообщение[
     
  16. alena996

    alena996 Нерд

    хорошо

    Arduino: 1.8.9 (Mac OS X), Плата:"Arduino Nano, ATmega328P (Old Bootloader)"

    ВНИМАНИЕ: Категория '' в библиотеке UIPEthernet не является действительной. Установка на 'Uncategorized'
    /Users/alena/Downloads/web_urok_01/web_variant1_01/web_variant1_01.ino: In function 'void setup()':
    web_variant1_01:22:5: error: 'es' was not declared in this scope
    es.E_enc28j60Init(mymac);
    ^
    web_variant1_01:31:27: error: 'PHLCON' was not declared in this scope
    es.E_enc28j60PhyWrite(PHLCON,0x880);
    ^
    /Users/alena/Downloads/web_urok_01/web_variant1_01/web_variant1_01.ino: In function 'void loop()':
    web_variant1_01:67:6: error: 'es' was not declared in this scope
    if(es.E_eth_type_is_arp_and_my_ip(buf,plen)){
    ^
    web_variant1_01:73:6: error: 'es' was not declared in this scope
    if(es.E_eth_type_is_ip_and_my_ip(buf,plen)==0){
    ^
    web_variant1_01:77:10: error: 'IP_PROTO_P' was not declared in this scope
    if(buf[IP_PROTO_P]==IP_PROTO_ICMP_V
    ^
    web_variant1_01:77:23: error: 'IP_PROTO_ICMP_V' was not declared in this scope
    if(buf[IP_PROTO_P]==IP_PROTO_ICMP_V
    ^
    web_variant1_01:78:13: error: 'ICMP_TYPE_P' was not declared in this scope
    && buf[ICMP_TYPE_P]==ICMP_TYPE_ECHOREQUEST_V){
    ^
    web_variant1_01:78:27: error: 'ICMP_TYPE_ECHOREQUEST_V' was not declared in this scope
    && buf[ICMP_TYPE_P]==ICMP_TYPE_ECHOREQUEST_V){
    ^
    web_variant1_01:79:7: error: 'es' was not declared in this scope
    es.E_make_echo_reply_from_request(buf,plen);
    ^
    web_variant1_01:84:11: error: 'IP_PROTO_P' was not declared in this scope
    if (buf[IP_PROTO_P]==IP_PROTO_TCP_V
    ^
    web_variant1_01:84:24: error: 'IP_PROTO_TCP_V' was not declared in this scope
    if (buf[IP_PROTO_P]==IP_PROTO_TCP_V
    ^
    web_variant1_01:85:14: error: 'TCP_DST_PORT_H_P' was not declared in this scope
    && buf[TCP_DST_PORT_H_P]== 0
    ^
    web_variant1_01:86:14: error: 'TCP_DST_PORT_L_P' was not declared in this scope
    && buf[TCP_DST_PORT_L_P]== mywwwport){
    ^
    web_variant1_01:87:15: error: 'TCP_FLAGS_P' was not declared in this scope
    if (buf[TCP_FLAGS_P] & TCP_FLAGS_SYN_V){
    ^
    web_variant1_01:87:30: error: 'TCP_FLAGS_SYN_V' was not declared in this scope
    if (buf[TCP_FLAGS_P] & TCP_FLAGS_SYN_V){
    ^
    web_variant1_01:89:5: error: 'es' was not declared in this scope
    es.E_make_tcp_synack_from_syn(buf);
    ^
    web_variant1_01:92:15: error: 'TCP_FLAGS_P' was not declared in this scope
    if (buf[TCP_FLAGS_P] & TCP_FLAGS_ACK_V){
    ^
    web_variant1_01:92:30: error: 'TCP_FLAGS_ACK_V' was not declared in this scope
    if (buf[TCP_FLAGS_P] & TCP_FLAGS_ACK_V){
    ^
    web_variant1_01:96:32: error: 'TCP_FLAGS_FIN_V' was not declared in this scope
    if (buf[TCP_FLAGS_P] & TCP_FLAGS_FIN_V){
    ^
    web_variant1_01:104:14: error: 'es' was not declared in this scope
    plen=es.E_fill_tcp_data_p(buf, 0, PSTR("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n<h1>200 OK</h1>"));
    ^
    web_variant1_01:116:15: error: 'es' was not declared in this scope
    SENDTCP: es.E_make_tcp_ack_from_any(buf);
    ^
    /Users/alena/Downloads/web_urok_01/web_variant1_01/web_variant1_01.ino: In function 'int8_t analyse_cmd(char*)':
    /Users/alena/Downloads/web_urok_01/web_variant1_01/web_variant1_01.ino:162:31: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
    if (find_key_val(str,"cmd")){
    ^
    /Users/alena/Downloads/web_urok_01/web_variant1_01/web_variant1_01.ino: In function 'uint16_t print_webpage(uint8_t*)':
    web_variant1_01:183:12: error: 'plen' was not declared in this scope
    return(plen);
    ^
    Несколько библиотек найдено для "Ethernet.h"
    Используется: /Applications/Arduino.app/Contents/Java/libraries/Ethernet
    Не используется: /Users/alena/Documents/Arduino/libraries/Ethernet_ENCJ60
    exit status 1
    'es' was not declared in this scope
    Неверная версия '1.04' для библиотеки в: /Users/alena/Documents/Arduino/libraries/arduino_uip-master

    Этот отчёт будет иметь больше информации с
    включенной опцией Файл -> Настройки ->
    "Показать подробный вывод во время компиляции"
     
    Asper Daffy нравится это.
  17. NikitOS

    NikitOS Король шутов Администратор

    Вот это включить

    И вставить лог правильно
     
  18. b707

    b707 Гуру

    Алена, а Вы эти сообщения читали? Столько ошибок говорит о том, что вы либо скетч неверно скопировали, либо библиотеку. Для начала поставьте библиотеку правильно, чтобы она была в Ардуино в одном экземпляре (в сообщении об ошщибке написано. что их у вас несколько),
    Причем ставить надо именно ту, что качается по ссылке, где вы взяли скетч
     
  19. alena996

    alena996 Нерд

    удалила лишние библиотеки, поставила те что шли со скетчем, проверила скетч. ошибки те же
     
  20. NikitOS

    NikitOS Король шутов Администратор