Вот настало время для публикации моего проекта. Наконец то разобравшись с Ethernet модулем ENC28J60, я доделал сервер. Принцип работы заключается в том, что вы можете видеть температуру и влажность с датчика, и управлять реле на 220 прямо с веб страницы.
На момент написания использовалось Arduino IDE 1.0.5.
Если вам что то не понятно, то не стесняйтесь писать комментарии.
Вот что использовалось:
1. Arduino Mega 2560

2. ENC28J60

3. DHT11

4. Реле.

Схема соединения:
В данном примере задействован только 1 реле.
Особенностью реле модуля является то, что если на контакт подается 0(low) - то оно замыкается, если 1(high) - то размыкается.
Необходимые библиотеки Libaries.zip
Код скетча:
UPD: тут обнаружилось, что скетч нормально компилируется только в более низких версиях. Качаем 1.1 , если не работает http://arduino.cc/en/Main/OldSoftwareReleases
На момент написания использовалось Arduino IDE 1.0.5.
Если вам что то не понятно, то не стесняйтесь писать комментарии.
Вот что использовалось:
1. Arduino Mega 2560

2. ENC28J60
3. DHT11

4. Реле.

Схема соединения:
В данном примере задействован только 1 реле.
Особенностью реле модуля является то, что если на контакт подается 0(low) - то оно замыкается, если 1(high) - то размыкается.
Необходимые библиотеки Libaries.zip
Код скетча:
#include "DHT.h" #include "etherShield.h" #include "ETHER_28J60.h" #define DHTPIN 3 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); int outputPin = 4; static uint8_t mac[6] = {0x2E, 0x35, 0xB5, 0xAB, 0x3F, 0x70}; // мак адрес вашего модуля (я генерировал в интернете) static uint8_t ip[4] = {192, 168, 0, 117}; // ip адрес модуля (должен соответствовать вашей сети) static uint16_t port = 80; // порт (хттп по умалчанию 80) ETHER_28J60 ethernet; void setup() { ethernet.setup(mac, ip, port); dht.begin(); pinMode(outputPin, OUTPUT); } void loop() { char* params; int h = dht.readHumidity(); int t = dht.readTemperature(); if (params = ethernet.serviceRequest()) { ethernet.print("<body background='http://bigsoft.moy.su/BackgroundSite.jpg' repeat;>"); ethernet.print("<center><H2>Temperature:<font color=#00FF00> "); ethernet.print(t); ethernet.print("</font><br></center></H2>"); ethernet.print("<H2><center>Humidity:<font color=#FF8C00> "); ethernet.print(h); ethernet.print("<br></font></center></H2>"); ethernet.print("<H1><center><A HREF='?cmd=on'>OFF </A><br></H1></center>"); ethernet.print("<center><H1><A HREF='?cmd=off'>ON </A></H1></center>"); if (strcmp(params, "?cmd=on") == 0) //проверка полученного запроса { digitalWrite(outputPin, HIGH); } else if (strcmp(params, "?cmd=off") == 0) { digitalWrite(outputPin, LOW); } ethernet.respond(); } delay(2); }
Вот результат:
Сначала я пробросил порты через роутер. Далее зарегистрировался на noip и получил постоянный адрес для своего "сайта".
UPD: тут обнаружилось, что скетч нормально компилируется только в более низких версиях. Качаем 1.1 , если не работает http://arduino.cc/en/Main/OldSoftwareReleases


черновой вариант? достаточно неплохо.. а где же тогда чистовой?
ОтветитьУдалитьВ целом эта статья готова, просто я хотел еще более подробно расписать некоторые пункты + поправить оформление. Пока времени не хватает - учеба + новый "проект" на Processing и Arduino)
УдалитьМолодчик. Сейчас попробую- у меня всё для этого есть.
ОтветитьУдалитьСпасибо) Если будут вопросы - задавайте)
Удалитьможно бы дополнить статью- управление статусом твитер или вконтакте сменой статуса.
ОтветитьУдалитьПример: ставлю вконтакте статус "иду домой", ардуино ловит это изменение статуса- и включает реле1, которая в свою очередь включает розетку, подключенную к чайнику ))) Такие примеры где-то видел, но не в таком понятном виде..
Спасибо за идею) Постараюсь воплотить)
УдалитьДобрый вечер.
ОтветитьУдалитьПытаюсь запустить ваш пример на Arduino NANO + DHT11 + ENC28J60 БЕЗ реле.
К сожалению, страница в браузере не открывается.
Все рабочее, проверял отдельными примерами, в файле библиотеки enc28j60.c поменял подключение контроллера к моей плате следующим образом, для nano соответственно pin 10,11,12,13
В чем может быть проблема?
Здравствуйте!
УдалитьПопробуйте уменьшить количество выводимого текста на страницу. По удаляйте лишние "ethernet.print("text")". Это для того чтобы просто проверить работоспособность. Как попробуете отпишите.
Долго пытался разобраться, но так и не получилось. В итоге набрел на данную статью http://m.instructables.com/id/Arduino-TempHumidity-with-LCD-and-Web-Interface/?ALLSTEPS, собрал по схеме и все заработало. У меня вопрос, модуль enc26 у меня изначально, по ошибке был запитан от 5v, в последствии, когда ошибка обнаружилась и vcc был переброшен на 3,3v, то модуль отказался работать. Запускал от разных БП, результат один. В чем может быть причина?
Удалитьда код рабочий молодец! только вся система не долго работает только проверил виснит сразу же если постоянно щелкать на клавиши или можно просто обновить страницу много раз и все повиснет, или просто систему оставить включенной на часов 8-10 и попробовать обновить страницу. ПОЧЕМУ ТАК ПРОИСХОДИТ???
ОтветитьУдалитьСобрал железо на UNO протестил сначала на библиотеке ethercard сколько бы не щелкал и как бы жестко не тестил все работает уже больше недели. но не могу переключить библиотеку на MEGA. ПОМОГИТЕ ПЛИЗ!!!
Советую UTF-8 включить и на русском писать. А если серьёзно то у меня вопрос, как
ОтветитьУдалитьFAVICON подключить?
может залить на сервер картинку и http://htmlbook.ru/faq/kak-dobavit-ikonku-sayta-v-adresnuyu-stroku-brauzera
УдалитьА какой смысл в цикле фор на 1000 единиц?
ОтветитьУдалитьЕсть смысл убрать цикл for (int i=0; i <= 1000; i++). Если честно 0 то уже не помню для чего его добавлял)
ОтветитьУдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьДобрый вечер.
ОтветитьУдалитьПытаясь прошить Arduino Mega 2560 и вылазит ошибка:
Ошибка компиляции для платы Arduino/Genuino Mega or Mega 2560.
Помогите решить пожалуйста
Не пробовали версию ардуино ide 1.1 ставить?
УдалитьUPD: тут обнаружилось, что скетч нормально компилируется только в более низких версиях. Качаем 1.1 , если не работает http://arduino.cc/en/Main/OldSoftwareReleases