ATmega2560+W5100 для умного дома

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
Vyacheslav
Сообщения: 13
Зарегистрирован: 24 июл 2013, 21:41

Re: ATmega2560+W5100 для умного дома

Сообщение Vyacheslav » 25 дек 2013, 08:17

Толку от PoE никакого, пока нет прошивки под такую связку :)

vtec
Сообщения: 459
Зарегистрирован: 19 сен 2011, 09:28

Re: ATmega2560+W5100 для умного дома

Сообщение vtec » 25 дек 2013, 08:35

А при чем тут прошивка? POE на прошивку не влияет, только железо

Urbas81
Сообщения: 313
Зарегистрирован: 28 авг 2012, 14:22

Re: ATmega2560+W5100 для умного дома

Сообщение Urbas81 » 25 дек 2013, 10:51

vtec писал(а):А куда они делись?
http://www.terraelectronica.ru/images/n ... hernet.jpg
Мне кажется именно в данной розетке нет связи для питания, там же внутри трансформаторы стоят.

Urbas81
Сообщения: 313
Зарегистрирован: 28 авг 2012, 14:22

Re: ATmega2560+W5100 для умного дома

Сообщение Urbas81 » 25 дек 2013, 10:58

Aquarius писал(а): Дело не в коннекторе RJ45, а в разводке платы. Она не предусматривает установку этого модуля. Если посмотреть на оригинальный шилд сверху то можно увидеть отверстия по линии, идущие под небольшим углом. В него как раз и устанавливается этот модуль РоЕ.
В коннекторе дело тоже, у меня была мысль самому прокинуть 12 вольт по витой паре, и от розетки припаять провода, но когда я прозвонил неиспользуемые контакты, связи небыло, это и не удивительно, именно в HR11105A и H нет прямой связи, если обратить внимание, то шильд с PoE имеет другой разъем, где есть прямая связь через розетку.

Urbas81
Сообщения: 313
Зарегистрирован: 28 авг 2012, 14:22

Re: ATmega2560+W5100 для умного дома

Сообщение Urbas81 » 25 дек 2013, 11:16

Сейчас специально посмотрел разъемы UDE, и из всего разнообразия, только в одном нашел сквозные 2 контакта, этот разъем без светодиодов, шильд как видно имеет как раз эти светодиоды на плате. Из этого http://www.ceviconn.com/engl/rj45-connectors/single-row перечня, разъем второй сверху.

Sergey Borovkov
Сообщения: 77
Зарегистрирован: 22 ноя 2013, 03:17

Re: ATmega2560+W5100 для умного дома

Сообщение Sergey Borovkov » 25 дек 2013, 11:33

я заказал ардуину и шилд к ней. Продавец уже выслал. Как дойдут, буду ковырять прошивку.

Про PoE я тоже думал в свободные пары закинуть 12 вольт и тоже обломался :-). Есть еще инжекторы poe. Они бывают парными, т.е. один забрасывает питание в линию, а второй изымает и дает постоянку.

Urbas81
Сообщения: 313
Зарегистрирован: 28 авг 2012, 14:22

Re: ATmega2560+W5100 для умного дома

Сообщение Urbas81 » 25 дек 2013, 11:36

Sergey Borovkov писал(а):я заказал ардуину и шилд к ней. Продавец уже выслал. Как дойдут, буду ковырять прошивку.

Про PoE я тоже думал в свободные пары закинуть 12 вольт и тоже обломался :-). Есть еще инжекторы poe. Они бывают парными, т.е. один забрасывает питание в линию, а второй изымает и дает постоянку.
Ну это как вариант, да, можно просто выдернуть по 2 провода на концах и повесить разъемы.

Vyacheslav
Сообщения: 13
Зарегистрирован: 24 июл 2013, 21:41

Re: ATmega2560+W5100 для умного дома

Сообщение Vyacheslav » 25 дек 2013, 12:01

Нашёл почти готовое решение по работе вышеуказанной связки
http://robocraft.ru/blog/238.html - здесь.
Сам код ниже, кто что может сказать по этому поводу - пишите
#include <WString.h>
#include <Ethernet.h>
/*Управление светодиодом через Ethernet */
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //mac - адрес ethernet shielda
byte ip[] = { 192, 168, 88, 25 }; // ip адрес ethernet shielda
byte subnet[] = { 255, 255, 255, 0 }; //маска подсети
Server server(80); //порт сервера
int ledPin = 4; // указываем что светодиод будет управляться через 4 Pin
String readString = String(30); //string for fetching data from address
boolean LEDON = false; //изначальный статус светодиода - выключен

void setup(){
//запускаем Ethernet
Ethernet.begin(mac, ip, subnet);
//устанавливаем pin 4 на выход
pinMode(ledPin, OUTPUT);
//enable serial datada print
Serial.begin(9600);
}
void loop(){
// Создаем клиентское соединение
Client client = server.available();
if (client) {
while (client.connected()) {
if (client.available()) {
char c = client.read();
//read char by char HTTP request
if (readString.length() < 30) {
//store characters to string
readString.append( c); }
//output chars to serial port
Serial.print( c);
//if HTTP request has ended
if (c == '\n') {
//Проверяем включили ли светодиод?
//Level=1 - включен
//Level=0 - выключен
if(readString.contains("Level=1")) {
//Включаем светодиод
digitalWrite(ledPin, HIGH); // set the LED on
LEDON = true;
}else{
//Выключаем светодиод
digitalWrite(ledPin, LOW); // set the LED OFF
LEDON = false;
}
// Формируем HTML
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
client.println("<head> ");
client.println("<meta http-equiv='Content-Type' content='text/html; charset=utf-8' /> ");
client.println("<title> Arduino :: Управление V0.1</title>");
client.println("</head> ");
client.println("<body");
//controlling led via radio elements
client.println("<h1>Управление светодиодом 4pin</h1>");
if (LEDON){
client.println("<form method=get name=LED><input type=radio name=Level value=1 CHECKED>Включить
<input type=radio name=Level value=0>Выключить
<input type=submit value=Применить></form>");
client.println("<font size=’5?>LED-статус: ");
client.println("<font size=’5?>Вкл.");
}else{
client.println("<form method=get name=LED><input type=radio name=Level value=1>Включить
<input type=radio name=Level value=0 CHECKED>Выключить
<input type=submit value=Применить></form>");
client.println("<font size=’5?>LED-статус: ");
client.println("<font size=’5?>Выкл");
}
client.println("<hr />");
client.println("</body></html>");
//clearing string for next read
readString="";
//останавливаем web-client
client.stop();
}
}
}
}
}

Sergey Borovkov
Сообщения: 77
Зарегистрирован: 22 ноя 2013, 03:17

Re: ATmega2560+W5100 для умного дома

Сообщение Sergey Borovkov » 25 янв 2014, 21:06

Ардуина и шилд пришли. Начал переделывать megad-328 под w5100. Ардуина 328+шилд уже работают как веб-сервер mega-d. При этом в основном проекте надо только закоментить лишние инклуды, добавить инклуд моего модуля. Ну и изменить makefile. Т.е. я вообще не трогал логику работы main.c, ну и надеюсь - не придется.
Осталось сделать функцию веб-клиента, чтобы дергать другой сервер при реакции на события. Ну и протестить. Пока 2.7 кб экономии флеш-памяти, будет чуть меньше, когда доделаю.

Думаю, что можно будет точно также адаптировать и форк "Умный дом Ethernet + 1-Wire + Bootloader".

Для w5100 существует бутлоадер, поддерживающий mega 328 и mega 2560. Работает через tftp.

dimik2000
Сообщения: 34
Зарегистрирован: 13 сен 2012, 12:51

Re: ATmega2560+W5100 для умного дома

Сообщение dimik2000 » 27 янв 2014, 19:57

To: Vyacheslav
Вот поглядите. Мега и 5100 в подобном устройстве.
http://computer-service.pro/smf/index.php?topic=62.0

Vyacheslav
Сообщения: 13
Зарегистрирован: 24 июл 2013, 21:41

Re: ATmega2560+W5100 для умного дома

Сообщение Vyacheslav » 28 янв 2014, 00:36

Нашёл нужны вещи. Ковыряю код вместе с энтузиастами... выложу здесь, как будет что выкладывать. Сегодня моя мега в тестовом режиме работает и шлёт запросы к серверу того же формата, что и автора этого ресурса :)
На вышеуказанном ресурсе сам сижу :)

Sergey Borovkov
Сообщения: 77
Зарегистрирован: 22 ноя 2013, 03:17

Re: ATmega2560+W5100 для умного дома

Сообщение Sergey Borovkov » 28 янв 2014, 01:52

У меня уже шлются запросы при событиях. Осталось немного доделать, скопировать чуть кода обработки результатов запросов к внешнему серверу.

Vyacheslav
Сообщения: 13
Зарегистрирован: 24 июл 2013, 21:41

Re: ATmega2560+W5100 для умного дома

Сообщение Vyacheslav » 28 янв 2014, 11:38

Начал переделывать megad-328 под w5100. Ардуина 328+шилд уже работают как веб-сервер mega-d.
Можно поподробнее... я в С++ не в зуб ногой вообще, с ардуино ещё кое как.... если что-то не сложное.

Если можно скинтье сюда то, что у вас получилось ... в виде ссылки на архив например. Крайне интересно.

И кстати зачем вы себя загоняете в строгие рамки 328 чипом когда есть 2560 в котором килобайты считать не нужно будет :)?

Sergey Borovkov
Сообщения: 77
Зарегистрирован: 22 ноя 2013, 03:17

Re: ATmega2560+W5100 для умного дома

Сообщение Sergey Borovkov » 28 янв 2014, 23:57

Я как сделаю с виду адекватный вариант - выложу. Может сегодня получится. У меня есть и 2560 мега и 328, на всякий случай обе заказал. Но я не хочу брать готовый исходный код megad-328 и в результате получить проект для ардуины, который при любом изменении исходников в megad придется переделывать. Сейчас берется готовый megad-328, версии 3.11, в нем правится меньше 10 строк в начале, добавляются файлы и вуаля, проект компиляется под w5100.

Я посмотрел готовый стек от ардуины для w5100. Он конечно работает и с ним можно легко сделать простые вещи. Но он нереально монстрообразный и неоптимальный. Наверное его можно прикрутить вместо той библиотеки, что я нашел, но этот стек понятет за собой еще тучу библиотек, которые не используются нигде, кроме этого стека. И главное - все равно не получится простой проект в стиле ардуино.

Sergey Borovkov
Сообщения: 77
Зарегистрирован: 22 ноя 2013, 03:17

Re: ATmega2560+W5100 для умного дома

Сообщение Sergey Borovkov » 29 янв 2014, 04:21

Вот, выкладываю результат. Запускал пока только на arduino 328. Я бы это охарактеризовал как бету. В ней есть ошибки, но время от времени она работает как надо :-).
Страницы отдает, при событиях на удаленный сервер ходит, результат - выполняет.

Прикольно то, что для w5100 похоже вообще не нужен буфер в памяти МК для отправки данных. Буфер можно сразу размещать в w5100. Поскольку я почти не правил main.c, у меня блок данных собирается в памяти и потом разом отправляется.
Но если от буфера на отправку отказаться, то видимо можно будет сделать 1-wire без внешних микрух и тд. Памяти остается много, прошивка занимает 22.5 кб флеша.

Известные баги и особенности:
1. на uart выкидывает отладочную инфу, поэтому не стоит эти пины использовать.
2. иногда отваливается сеть.
3. Иногда в логах сервера, на который сваливаются события, видна ахинея, типа "e.php?ptGET /none.php?pt=5&m=1 HTTP/1.1" 400 226
4. есть подозрение, что команда по умолчанию вызывается и в случае, если сервер, обрабатывающий событие выдал 200-й результат.

ps. Библиотека w5100 http://www.seanet.com/~karllunt/w5100_library.html имеет серьезную багу, из-за которой работает только с нулевым сокетом. У меня - уже исправленная версия. На нахождение ошибки в чужом непонятном коде убил часа 3 :-(.
Еще эта библиотека не поддерживает исходящие сокеты, пришлось делать лог того, что делает код ардуины (в тамошнем коде черт ногу сломит, если не знать нормально С), потом это же приделывать в библиотеку w5100.

pps. w5100 умеет, в отличие от enc28j60, работать на обычном патче с компьютером, без свитча. Но у меня ощущение, что через свитч работает не в пример стабильнее. С чем связано - не знаю. Но проявляется не только на моих исходниках, но и на примерах arduino.
Вложения
megad-w5100.zip
(55.16 КБ) 582 скачивания

Vyacheslav
Сообщения: 13
Зарегистрирован: 24 июл 2013, 21:41

Re: ATmega2560+W5100 для умного дома

Сообщение Vyacheslav » 01 фев 2014, 18:07

У меня тоже есть наработки по этой теме... правда библиотека w5100 другая похоже... сейчас не знаю как тут выложить.. и стоит ли, пока всё очень сыро....
Но там чисто ардуиновский скетч. Только логику делаю такую же как Андрея.
Посмотреть общий вид можно тут domik43.net (сейчас отключено, пишу прошивку потихоньку и запихиваю в устройство, проверяю, тестирую) в понедельник опять повешу.
Предлагаю объединить может усилия? Текущая прошивка Андрея очень скромна в силу ограниченной памяти 328-ой меги... Под 2560 я лично хочу иметь что-то более удобно настраиваемой в плане интерфейса и сохранение настроек хочу переместить из еепром на карту паямти (при физической замене 2560 не хочется заново настраивать все пины, а файлы с карты памяти легко резервировать).

Sergey Borovkov
Сообщения: 77
Зарегистрирован: 22 ноя 2013, 03:17

Re: ATmega2560+W5100 для умного дома

Сообщение Sergey Borovkov » 02 фев 2014, 04:52

С моей точки зрения, надо либо переписывать с нуля на том же стеке от arduino, либо дописывать текущий проект, либо - брать стороннюю разработку, типа упоминавшейся тут.
Сразу скажу, что с картой памяти сходу столкнешься с проблемами, поскольку и w5100 и карта используют один SPI. Быстродействие avr далеко не запредельна. И как только мы увеличим количество пинов, сразу столкнемся с проблемами быстродействия, я в этом почти уверен.
Поэтому я искренне считаю, что не нужно пытаться на меге сделать сайт или навести красоту. Для этого есть более подходящие устройства, на которых работает php, хотя бы роутеры. Стоят недорого.

Что я бы хотел получить?
1. Поддержку 1-wire на нескольких пинах. Это позволит не париться и сделать звезду из 1wire.
2. Поддержку датчиков давления bmp085
3. Возможность получить настройки по сети и отдать их. Т.е. меняем мегу на другую, в пару кликов (образно) заливаем все настройки.
4. Возможность получить данные всех пинов одним запросом
5. Возможность выдавать по аналоговым пинам не только текущее значение ADC, но и амплитуду колебаний (это позволит подключить копеечный датчик тока asc712)
6. Тот же функционал, что добавил Андрей - прошивка по сети, настройка Ip по сети, пауза в командах.

Sergey Borovkov
Сообщения: 77
Зарегистрирован: 22 ноя 2013, 03:17

Re: ATmega2560+W5100 для умного дома

Сообщение Sergey Borovkov » 02 фев 2014, 05:02

Новая версия. Вроде работает все, что было в 3.11.
Единственное, что - оригинал на enc при быстром последовательном срабатывании входов умеет отправлять запросы и позже последовательно получать ответы. У меня в прошивке этого нет. На выход используется один сокет из трех свободных. Т.е. если один вход сработал, пошел запрос на сервер, тут же сработал второй, до того, как сервер ответил на первый запрос, то чуть позже пришедший ответ на 1-й запрос, скорее всего даже не будет получен.
Насколько это важно - не знаю. Я пробовал очень часто замыкать кнопки, 4-5 замыканий в секунду успевают отработать корректно.

Буду теперь переводить на 2560 (там вроде проблем нет, но спать хочется...), потом буду делать совместимый бутлоадер. Ну или хотя бы - сделаю поддержку смены ip и получения списка подключенных девайсов.
Вложения
megad-w5100-2.zip
(59.12 КБ) 527 скачиваний

Sergey Borovkov
Сообщения: 77
Зарегистрирован: 22 ноя 2013, 03:17

Re: ATmega2560+W5100 для умного дома

Сообщение Sergey Borovkov » 02 фев 2014, 05:23

Vyacheslav писал(а):У меня тоже есть наработки по этой теме... правда библиотека w5100 другая похоже... сейчас не знаю как тут выложить.. и стоит ли, пока всё очень сыро....
Но там чисто ардуиновский скетч. Только логику делаю такую же как Андрея.
Посмотри мои исходники.
Файлы network.* полностью подменяют функционал оригинальных библиотек проекта Андрея. Причем network.c не содержит вроде ни одного прямого обращения к регистрам w5100. Т.е. это некоторый уровень абстракции. Если его переделать (а это сделать уже несложно, там почти везде вызовы понятных функций, типа GetSocketStatus, Connect и тд), то можно подключить почти любой стек.

Проблема в том, что переписывать с нуля - замучаешься. Точнее - замучаешься отлаживать. Да, в исходнике Андрея заложена достаточно глубоко оптимизация, которая не нужна для w5100. К примеру, я слегка выпал в осадок, когда понял, что он использует один статический буфер в памяти и для приема запросов от web клиента, для отправки ответов на эти запросы, для формирования запросов при срабатывании триггеров и при получении ответов. Причем из двух разных исходников! С w5100 от большого буфера можно было бы уйти, поскольку вместо одного исходящего пакета спокойно можно послать любое количество. Библиотека ардуино вообще при посылке socket.writeln("bla"); посылает ТРИ пакета - "bla", \r и \n. С моей точки зрения, это перебор, но доходит все нормально.
Но мне проще доделать, чем писать с нуля. На доделку я убил часов 20, а на написание с нуля убил бы в разы больше...

Sergey Borovkov
Сообщения: 77
Зарегистрирован: 22 ноя 2013, 03:17

Re: ATmega2560+W5100 для умного дома

Сообщение Sergey Borovkov » 04 фев 2014, 09:11

Что-то я тут посмотрел и увидел, что на рынке существуют шилды и на ENC28J60. Вот, к примеру: http://www.aliexpress.com/item/Free-shi ... 02942.html
Это я к тому, что можно было вероятно не корячиться и не переделывать прошивку под w5100. У w5100 безусловно есть свои плюсы, но плюс наличия активного сообщества для ENC28J60 имхо перевешивает плюсы w5100.

Учитывая, что Андрею явно уже стало "тесно" в atmega328, вероятно имеет смысл немного подождать и он перейдет на другие чипы.
Я залез в исходники main.c, там надо внести очень много изменений, касающихся выводов (у 2560 меги сильные отличия от 328). Они совсем несложные, но их много. Это будет означать, что при каждом выходе прошивки под оригинальную megad надо будет переделывать исходники, причем вручную. Вот этого я очень не хочу.

Я не очень понимаю чем мне лучше заняться. Пока я вижу, что тема arduino+shield w5100 мало кому интересна. Смысл вкладывать в данное решение свои усилия при том, что рядом есть исходники Andrey_B, DOCSIMUS, я тоже не вижу. Ведь по сути это один проект, но немного переделанный. Делать работу, которую позже повторит по-своему Andrey_B, мне не хочется.

Andrey_B - сделал решение и его развивает.
DOCSIMUS его очень улучшил в плане универсальности, добавил функционал. Параллельно сильно оптимизировал (так, что местами из-за оптимизации код стал трудночитаемым, места-то не хватает).
THK добавил другую поддержку 1-wire.
Я добавил w5100 (правда пока без UDP).

С моей точки зрения, лучше остановиться и осмотреться. Если можно распределить усилия - лучше это сделать. Насколько я понимаю, всем участникам стало понятно, что 328 меги не хватает.
Так может тогда таки перейти на другой контроллер и сделать модульную прошивку? Взять все лучшее у всех. В качестве базы взять прошивку Andrey_B, из прошивки DOCSIMUS я бы взял универсальность, поддержку 1-wire, из прошивки THK - вероятно тоже позаимствовал бы код для 1-wire . При помощи моих исходников можно будет использовать w5100.

Ответить