Arduino Pro Mini + Enc28j60 + библиотека (UIPEthernet)
- Войдите на сайт для отправки комментариев
Сб, 15/04/2017 - 15:58
Дорый день. Вопрос следующего характера.
При прошивке выдает следующее.
ВНИМАНИЕ: Категория '' в библиотеке UIPEthernet не является действительной. Установка на 'Uncategorized'
Скетч использует 25376 байт (82%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 1345 байт (65%) динамической памяти, оставляя 703 байт для локальных переменных. Максимум: 2048 байт.
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
Invalid version found: 1.04
Invalid version found: 1.04
Invalid version found: 1.04
Invalid version found: 1.04
Invalid version found: 1.04
Invalid version found: 1.04
Invalid version found: 1.04
Invalid version found: 1.04
Соответственно пинга нету и страница не открывается. Шилд подключен от USB отдельно от ардуинки. Лампочка актив на шилде горит, лампочка линк пару сек мигает. Дальше тишина.
Имеем Arduino IDE 1.8.2, Arduino pro mini, ethernet shild ENC28J60. Зашиваю с помощью USBASP.
Сам скетч собственно
#include <SPI.h> #include <UIPEthernet.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, 0xAB, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192, 168, 1, 177); // я использовал порт 19989: EthernetServer server(19989); String httpHandler=""; int relayPin5=5; int relayPin4=4; int relayPin3=3; int relayPin2=2; void setup() { // устанавливаем скорость передачи данных для последовательного порта и ждем, когда он будет готов Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for Leonardo only } pinMode(relayPin5, OUTPUT); pinMode(relayPin4, OUTPUT); pinMode(relayPin3, OUTPUT); pinMode(relayPin2, OUTPUT); digitalWrite(relayPin5, HIGH); digitalWrite(relayPin4, HIGH); digitalWrite(relayPin3, HIGH); digitalWrite(relayPin2, HIGH); // устанавливаем соединение с Ethernet шилдом и запускаем его в режиме сервера: Ethernet.begin(mac, ip, 10); server.begin(); Serial.print("server is at "); Serial.println(Ethernet.localIP()); } void loop() { // прослушиваем подключенных клиентов 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(); httpHandler +=c; //Serial.write(c); // когда дошли до конца строки (символ '\n'), это означает что http запрос завершился //и можно отправлять клиенту ответ if (c == '\n' && currentLineIsBlank) { // отправляем клиенту ответ client.println(F("HTTP/1.1 200 OK")); client.println(F("Content-Type: text/html")); client.println(F("Connection: close")); // соединение будет закрыто после завершения ответа client.println(F("<!DOCTYPE HTML>")); client.println(F("<html>")); client.println("<meta http-equiv='refresh' content='5; URL=/'>"); // refresh the page automatically every 5 sec //немного стилей для наглядного отображения надписей и кнопок клиенту //это стили bootstrap'а ))) client.println(F("<style> ")); client.println(F(".btn {")); client.println(F(" display: inline-block;")); client.println(F(" padding: 6px 12px;")); client.println(F(" margin-bottom: 0;")); client.println(F(" font-size: 14px;")); client.println(F(" font-weight: normal;")); client.println(F(" line-height: 1.42857143;")); client.println(F(" text-align: center;")); client.println(F(" white-space: nowrap;")); client.println(F(" vertical-align: middle;")); client.println(F(" cursor: pointer;")); client.println(F(" -webkit-user-select: none;")); client.println(F(" -moz-user-select: none;")); client.println(F(" -ms-user-select: none;")); client.println(F(" user-select: none;")); client.println(F(" background-image: none;")); client.println(F(" border: 1px solid transparent;")); client.println(F(" border-radius: 4px;")); client.println(F("}")); client.println(F(" .btn:focus,")); client.println(F(" .btn:active:focus,")); client.println(F(" .btn.active:focus {")); client.println(F(" outline: thin dotted;")); client.println(F(" outline: 5px auto -webkit-focus-ring-color;")); client.println(F(" outline-offset: -2px;")); client.println(F(" }")); client.println(F(" .btn:hover,")); client.println(F(" .btn:focus {")); client.println(F(" color: #333;")); client.println(F(" text-decoration: none;")); client.println(F(" }")); client.println(F(" .btn:active,")); client.println(F(" .btn.active {")); client.println(F(" background-image: none;")); client.println(F(" outline: 0;")); client.println(F(" -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);")); client.println(F(" box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);")); client.println(F(" }")); client.println(F(".btn-success {")); client.println(F(" color: #fff;")); client.println(F(" background-color: #5cb85c;")); client.println(F(" border-color: #4cae4c;")); client.println(F("}")); client.println(F(" .btn-success:hover,")); client.println(F(" .btn-success:focus,")); client.println(F(" .btn-success:active,")); client.println(F(" .btn-success.active,")); client.println(F(" .open > .dropdown-toggle.btn-success {")); client.println(F(" color: #fff;")); client.println(F(" background-color: #449d44;")); client.println(F(" border-color: #398439;")); client.println(F(" }")); client.println(F(" .btn-success:active,")); client.println(F(" .btn-success.active,")); client.println(F(" .open > .dropdown-toggle.btn-success {")); client.println(F(" background-image: none;")); client.println(F(" }")); client.println(F(" .btn-success .badge {")); client.println(F(" color: #5cb85c;")); client.println(F(" background-color: #fff;")); client.println(F(" }")); client.println(F(".btn-danger {")); client.println(F(" color: #fff;")); client.println(F(" background-color: #d9534f;")); client.println(F(" border-color: #d43f3a;")); client.println(F("}")); client.println(F(" .btn-danger:hover,")); client.println(F(" .btn-danger:focus,")); client.println(F(" .btn-danger:active,")); client.println(F(" .btn-danger.active,")); client.println(F(" .open > .dropdown-toggle.btn-danger {")); client.println(F(" color: #fff;")); client.println(F(" background-color: #c9302c;")); client.println(F(" border-color: #ac2925;")); client.println(F(" }")); client.println(F(" .btn-danger:active,")); client.println(F(" .btn-danger.active,")); client.println(F(" .open > .dropdown-toggle.btn-danger {")); client.println(F(" background-image: none;")); client.println(F(" }")); client.println(F(" .btn-danger .badge {")); client.println(F(" color: #d9534f;")); client.println(F(" background-color: #fff;")); client.println(F(" }")); client.println(F(".alert {")); client.println(F(" padding: 5px;")); client.println(F(" margin-bottom: 10px;")); client.println(F(" border: 1px solid transparent;")); client.println(F(" border-radius: 4px;")); client.println(F("}")); client.println(F(".alert-success {")); client.println(F(" color: #3c763d;")); client.println(F(" background-color: #dff0d8;")); client.println(F(" border-color: #d6e9c6;")); client.println(F("}")); client.println(F(".alert-danger {")); client.println(F(" color: #a94442;")); client.println(F(" background-color: #f2dede;")); client.println(F(" border-color: #ebccd1;")); client.println(F("}")); client.println(F("a {")); client.println(F(" color: #428bca;")); client.println(F(" text-decoration: none;")); client.println(F("}")); client.println(F("</style>")); //здесь я условился, что клиент будет посылать запрос на включение/отключение реле в виде GET запроса '?relay{№ вывода (pin)}={состояние 1-вкл., 0-откл.}' //исходя из этого парсим http запрос клиента, чтоб определить какое действие он хочет совершить, и с каким реле String pinNumber=httpHandler.substring(11,12);//номер вывода для реле String statusRelay=httpHandler.substring(13,14);//состояние 1-вкл., 0-откл. if(pinNumber=="2"){//если номер вывода в Get запросе равен 2 if(statusRelay=="1"){//клиент хочет включить реле statusRelay=1, если выключить, то statusRelay=0 digitalWrite(relayPin2, LOW); }else{ digitalWrite(relayPin2, HIGH); } } if(pinNumber=="3"){//аналогично предыдущему if(statusRelay=="1"){ digitalWrite(relayPin3, LOW); }else{ digitalWrite(relayPin3, HIGH); } } if(pinNumber=="4"){//аналогично предыдущему if(statusRelay=="1"){ digitalWrite(relayPin4, LOW); }else{ digitalWrite(relayPin4, HIGH); } } if(pinNumber=="5"){//аналогично предыдущему if(statusRelay=="1"){ digitalWrite(relayPin5, LOW); }else{ digitalWrite(relayPin5, HIGH); } } //считываем состояния других выводов для отображения клиенту int pin2Status=digitalRead(relayPin2); int pin3Status=digitalRead(relayPin3); int pin4Status=digitalRead(relayPin4); int pin5Status=digitalRead(relayPin5); //вывод информации о состоянии и кнопок включения (при отключенном состоянии) либо отключения (при включенном состоянии) client.print(F("<span class='alert'>Relay2:</span> ")); client.println(pin2Status == 0 ? F("<span class='alert-success alert'>VKL</span> ") : F("<span class='alert-danger alert'>OTKL</span> ")); if(pin2Status == 1) client.println(F("<a href='?relay2=1' class='btn btn-success'>Vkl relay 2</a>")); else client.println(F("<a href='?relay2=0' class='btn btn-danger'>Otkl relay 2</a>")); client.print(F("<br><br><span class='alert'>Relay3:</span> ")); client.println(pin3Status == 0 ? F("<span class='alert-success alert'>VKL</span> ") : F("<span class='alert-danger alert'>OTKL</span> ")); if(pin3Status == 1) client.println(F("<a href='?relay3=1' class='btn btn-success'>Vkl relay 3</a>")); else client.println(F("<a href='?relay3=0' class='btn btn-danger'>Otkl relay 3</a>")); client.print(F("<br><br><span class='alert'>Relay4:</span> ")); client.println(pin4Status == 0 ? F("<span class='alert-success alert'>VKL</span> ") : F("<span class='alert-danger alert'>OTKL</span> ")); if(pin4Status == 1) client.println(F("<a href='?relay4=1' class='btn btn-success'>Vkl relay 4</a>")); else client.println(F("<a href='?relay4=0' class='btn btn-danger'>Otkl relay 4</a>")); client.print(F("<br><br><span class='alert'>Relay5:</span> ")); client.println(pin5Status == 0 ? F("<span class='alert-success alert'>VKL</span> ") : F("<span class='alert-danger alert'>OTKL</span> ")); if(pin5Status == 1) client.println(F("<a href='?relay5=1' class='btn btn-success'>Vkl relay 5</a>")); else client.println(F("<a href='?relay5=0' class='btn btn-danger'>Otkl relay 5</a>")); //рисуем кнопку "обновить" client.println(F("<br><br><br><a href='/'>Obnovit'</a>")); httpHandler=""; client.println(F("</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(10); // разрываем соединение с клиентом client.stop(); Serial.println("client disconnected"); } }
Такая же штука была. UIPEthernet заработала в IDE 1.0.4.