Главная
Пятница, 23 Июнь 2017

Призма - не по детски интересные поделки
своими руками...

Призма - Меню
 »  Новости
Инструкции
Каталог файлов
Фотоальбом
 »  Форум
 »  Мои эксперименты
 »  Копилка идей
Игры on-line
 »  Гостевая книга
 »  Каталог сайтов
Призма - Опрос
Как часто вы посещаете этот сайт?
Всего ответов: 495
Призма - Поиск
Призма - Статистика


Рейтинг@Mail.ru

Яндекс.Метрика


Онлайн всего: 1
Гостей: 1
Пользователей: 0


Сайт сегодня посетили:



Главная » 2015 » Сентябрь » 17 » Метеостанция своими руками (Часть 2) - Arduino проект
Метеостанция своими руками (Часть 2) - Arduino проект
20:22

Часть 2 (подключаем LAN модуль HR911105A (ENC28J60) )

Замечу, что данная часть статьи никак пока не связана с предыдущей частью, т.е. все выполняется на "голой" ардуинке и я игнорирую тут подключенный в предыдущей части экран и датчик BMP085. Хотя я их и на самом деле и не отключал, но пока эта часть никак не завязана с первой, поэтому сделаю вид, что LAN модуль и предыдущий "навес" никак к друг другу не относятся, что бы не перегружать статью. Позже я пришел к тому, что экран для метеостанции на основе Arduino с использованием сетевого модуля вовсе не нужен, поскольку гораздо удобнее установить виджет для смартфона и иметь доступ ко всей информации даленно. А вот датчик влажности и температуры позже все же подключил чуть позже.

На всякий случай оставлю ссылку на первую часть - Часть 1 (подключаем экран и датчик BMP085)

Ну вот и пришлось повозиться. Виновником напряга оказался сетевой модуль HR911105A (ENC28J60). Перепробовал достаточно много разных библиотек по работе с ним, мне не удавалось даже проверить работоспособность. В итоге помогло мне видео Дмитрия Осипова, где приведены ссылки на актуальные библиотеки и рабочий скрипт по управлению светодиодами через web. Правда и тут столкнулся с тем, что не сразу завелась шарманка. Пока коротко законспектирую, что проблема была с постоянным IP в сети с роутером, который сам назначает IP адреса (DCHP сервер). И еще интересный момент - проблема чудесным образом разрешилась после запуска монитора последовательного порта, хотя его и ранее запускал не раз. Ну и еще заковыка была в том, что мой модуль имел на борту гребенку на 12 контактов, а не на 10 (как у всех) и питание требовал 5В, а не 3,3В.

Итак, теперь по порядку о том, как подключить ENC28J60. В видео идет речь о подключении 10-тиконтактного модуля. У меня на руках был модуль с двенадцатью выводами на борту. Вот так он выглядит внешне:

Четкого описания и схемы по нему я не нашел в инете. Было лишь одно упоминание на одном из форумов по ардуино, что контакт SI на десяти-контактном шилде соответствует контакту ST в двенадцати-контактной версии. Вместо 3,3в используется питание 5в. Питание брал прямо с ардуинки, вроде держит, правда ручаться за такой вариант не буду, т.к. по правилам требуется все-таки питать шилд отдельно, но при этом стоит объединять GND ардуины и GND отдельного источника питания.Но, в этом вопросе я не эксперт, надеюсь знающие люди подтянутся и в комментариях подтвердят мою версию или сделают мне замечание, что бы я своим дилетантством не смущал массы ардуиноменов и ардуиновуменш :)

Вместо таблицы соответсвия контактов приведу более наглядную схему подключения сетевого модуля к ардуино:

Отмечу несколько комментариев по скетчу и особенности работы:

Скетч уже содержит достаточно подробные комментарии и в нем приведены ссылки на оригинал скетча и библиотек, но что бы Вам было удобнее приведу тут тоже прямые ссылки на необходимую библиотеку ethercard

Еще раз напомню, что мой модуль с 12 контактами питается от 5v (это прямо указано на самой плате). Не перепутайте с 10ти-контактным модулем, у которого питание составляет 3,3v. В скетче есть комментарий по питанию, но он не учитывает, что бывают пяти-вольтовые модули.

Мac-адрес, на сколько я понял, что можно задать весьма случайное значение.

Выдержка с сайта народного мониторинга:

+ MAC - Уникальный серийный номер устройства мониторинга

Предназначен для идентификации устройства в проекте и привязки к его владельцу и к карте в разделе Датчики. Состоит из 12-18 символов A-Z и 0-9 иногда разделенных '-' или ':'. Для обеспечения уникальности рекомендуется использовать MAC-адрес сетевого интерфейса вашего устр-ва мониторинга или компьютера, который можно узнать выполнив командной строке getmac или ipconfig в Windows и ifconfig в Linux. Допускается привязка нескольких устр-в с разными MAC к одному владельцу.
Постоянный IP - обратите внимание, что бы он не повторял ни один другой IP в вашей домашней локальной сети, иначе будет конфликт и работоспособности от модуля вы не добьетесь.
Массив пинов, к которым подключаются светодиоды тоже имеет заковыку. Расскажу просто об этой "незадокументированной особенности"... При попытке включить LED1 на втором пине веб-страница переставала отвечать, т.е. то ли контроллер зависал, то ли еще какая-то бяка, но я с этим вопросом решил даже не разбираться, просто сообщаю, что у меня LED1 не работал, хотя на 3 и 4 пинах все работало отлично.
Совсем малость я позволил себе подкорректировать оригинальный скетч от Дмитрия - я изменил шрифт на web странице, т.о., что стало возможно управлять светиками и со смартфона. В оригинале шрифт мелкий и попасть пальцем в нужную строку было проблематично.
Итак, мы уже умеем выводить значение температуры и давления с датчика на экран и умеем взаимодействовать по сети. Остается объединить эти 2 части и наша метеостанция уже сможет сиять в народном мониторинге. 
Процесс объединения этих 2-х частей был мной реализован гораздо позже и этому была пара причин:
1) Работа с сетью отнимает значительное количество оперативной памяти и не позволяет особо развернуться. Возможно частично побороть оптимизацией кода. 
2) Отказавшись от подключения экрана к метеостанции я не пожалел, т.к., во-первых экран пригодится для других Arduino проектов, а во-вторых, сервис Народного мониторинга предлагает несколько приложений для смартфонов. Имея показания на экране смартфона уже нет необходимости обращаться к отдельному экрану метеостанции.
С сетевой частью и отправкой данных на сервер Народного мониторинга пришлось изрядно повозиться. Все еще осложнялось тем, что на развлечение с Arduino`й я выделял время только изредка по вечерам и такая эпизодическая деятельность заставляла вновь и вновь освежать в памяти казалось бы прописные истины. Поэтому совет дам такой: если что-то не получается постарайтесь выделить время и заняться вопросом до победного, что бы не приходилось тратить лишнее время на восстановление в памяти уже известных вещей.
Опишу проблемы с которыми столкнулся я:
  • Периодически отсутствовал физический контакт сетевого модуля ENC28J60 и Arduino.
  • Питания от USB может едва хватать на работу Ардуино с сетевым модулем, т.к. последний кушает около 250мА.
  • Библиотеки для работы с сетевым модулем. Их невероятное количество. Это, пожалуй, самый серьезный фактор, с которым мне пришлось бороться.

Теперь подробнее по каждому пункту:

1) Отследить эту проблему не самая большая трудность. Главное - добиться работы любого скетча для работы сетевого модуля. Я проверял все скетчем от Дмитрия Осипова, что упоминается выше в видео. Т.е. добившись раз верной работы его скетча я загружал его вновь если сталкивался с неправильной работой других скетчей и иногда оказывалось, что скетч Дмитрия для управления светодиодами с Web-страницы тоже не работает. В этом случае приходилось шевелить проводками и периодически перезагружать Arduino до тех пор пока все не налаживалось. В идеале, конечно все соединения паять, но первый раз проект, как правило, собирается на макетной плате и проблема может быть банальна - отсутствие контакта. И тут два пути - все прозванивать тесетром или тот, что описан в этом пункте.

2) Не уверен, что я сталкивался именно с этой проблемой, но исключать ее нельзя. По крайней мере иногда передернуть USB шнур из одного порта в другой помогало обойти проблему. Но, четкой зависимости я не заметил и если вы уверены в том, что все должно работать, но не работает советую проверить мультиметром напряжение питания Arduino и напряжение питания сетевого модуля ENC28J60. Если проблема есть, то ее может не стать при автономном питании Arduino от батареек или от блока питания, но если проблемы нет при питании от USB, то она наоборот может появиться на автономном устройстве. Решение: использование надежного источника питания и возможно отдельного стабилизатора напряжения для сетевого модуля. Я для другого проекта приобретал на Али такой модуль XM1584 DC-DC преобразователь 3а регулируемый на основе LM2596. Работает, хотя в данном случае все обошлось без него.

3) С библиотеками у меня была самая засада. Во-первых самих сетевых модулей и шилдов (расширений) для Arduino существует много разных и для большинства из них свои библиотеки со схожими названиями. По началу я даже не сразу понял, что брал библиотеку одну, а в скетче пытался использовать методы от другой библиотеки. Так что знайте библиотека Ethernet и Ethercard это не одно  тоже. :) Для сетевого модуля ENC28J60 лично мне подошла библиотека Ethercard, хотя вроде бы существуют и другие библиотеки пригодные для данного сетевого модуля, но у меня заставить их хоть как-то мало-мальски работать так и не получилось.

Но это еще не все. Мало того, что библиотеки существуют разные, так еще и одна и та же библиотека имеет разные версии (в зависимости от даты релиза) и в зависимости от этой же даты она имеет в себе те или иные ошибки, которые не позволят ничего толком запустить. Но! И это еще не все. Версии среды разработки скетчей тоже влияют на компиляцию или возникновение всевозможных скетчей. Пока искал рабочие варианты находил в некоторых источниках код, но авторы почему-то не прикладывали библиотеки, некоторые авторы отсылали использовать библиотеку с более ранней датой релиза, но не уточняя какой, что сводило пользу от их совета к нулю. В итоге перебрав невероятное количество комбинаций (Версия среды Arduino, версии библиотек и различные скетчи) звезды в итоге сошлись и "Hello World" был отправлен по сети с Arduino на сервис Народного мониторинга. Я собрал в один архив свой рецепт: Arduino 1.6.6 и три библиотеки (две для работы с датчиками и третья библиотека Ethercard для работы с ENC28J60).

Скетч пока недооформлен. Бросаю как есть, это все-таки лучше чем ничего. Постараюсь на днях дооформить и выложу тут же. 

Код скетча отправки показаний датчиков на сервис Народный мониторинг под спойлером:

По скетчу тоже есть комментарии. Для меня человека далекого от сетевой передачи данных все это выглядит шаманством... отправлять какие-то MAC-адреса и всякие казалось бы несвязанные значения между кракозябрами #, /n, & и т.п. Постараюсь так же рассказать как эти вещи усвоил я и как это реализовано в скетче. И обязательно отмечу особенности отправки показаний погодных датчиков на сайт http://narodmon.ru/ с погодной станции сделанной своими руками.
 
Как приложение к статье приведу ссылку на невероятно подробнейшее описание работы с ENC28J60. Правда, это далеко выходит за рамки данной статьи, но может быть кому-то будет полезно. Кстати статья в 3-х частях и при перелопачивании кучи материалов про сетевой модуль я наткнулся на эту статью уже после того, как надобность в ней отпала. Странно, что поисковики так низко ранжируют эту статью.

Статья еще не закончена. Постараюсь продолжить статью в ближайшие дни. Заглядывайте почаще...

Последняя правка - 17 марта 2017.

Категория: Arduino | Просмотров: 6145 | Добавил: Arkano | Рейтинг: 5.0/3 |
Всего комментариев: 5 (комментарии можно оставлять без регистрации)
Рейтинг: 0
Имя: Александр
Написал: Александр | Дата: 10 Октябрь 2016, 19:25 


Блин! По умолчанию в стандартных примерах в программе в этой библиотеке используется PIN 8.
Оказывается в begin нужно добавить третий параметр, который будет означать номер порта.
То есть надо ставить "10":
ether.begin(sizeof Ethernet::buffer, mymac,10)
0   Спам
4
Рейтинг: 1
Имя: Евгений
Написал: Arkano163rus | Дата: 11 Октябрь 2016, 23:09 


Еще лучше, как в моем примере, прописать следующим образом:
       
Код
if (ether.begin(sizeof Ethernet::buffer, mac,10) == 0)
     Serial.println(F("Failed to access Ethernet controller" ) ) ;
Если ответ сетевым модулем не получен (подключения нет), то сообщаем об этом в терминал. 2 зайца разом - и обозначили и проверили. happy
0  
5
Рейтинг: 0
Имя: Евгений
Написал: Arkano163rus | Дата: 11 Январь 2016, 21:10 


Метеостанция уже достаточно давно работает, но руки не доходят довести статью до ума.
Из планов:
 - Опубликовать плату в формате layout для вытравливания и сборки всего устройства в компактном, аккуратном и надежном виде.
 - Опубликовать окончательную версию скетча для ардуино.
 - Представить фотографии оформления уличного датчика и самого устройства дома.

Если вдруг у кого-то будет большое желание увидеть все это побыстрее - пишите в комментариях. Комменты я проверяю практически ежедневно и постараюсь ответить в кратчайшие сроки.
0  
3
Рейтинг: 0
Имя: Евгений
Написал: Arkano163rus | Дата: 23 Ноябрь 2015, 23:02 


Ааа.а.а.а..ааАа.аАА.  wacko
Дело двинулось!

Получилось передать данные на сервер народного мониторинга с использованием модуля Enc28j60 и библиотеки к нему EtherCard.

Хренокод в спойлере в следующем комментарии. Этот код пока адовый и его задача была просто тупо передать хоть что-то, хоть куда-то ибо пару месяцев мучений перед этим были безуспешны. Конечно не 24 часа в сутки я этому уделял, в среднем наверно даже не более получаса-часа в день. Но все-таки уйма времени ушла на разбор кучи различных библиотек и их версий. Готового рабочего скетча для Arduino с отправкой данных на народный мониторинг модулем Enc28j60 мне, увы, не попалось. Поэтому пришлось изрядно повозиться.

Постараюсь в скором времени заняться его настройкой и отладкой и детальным описанием что к чему. А то, большинство подобных статей написаны какими-то гиками и пойди в их сленге разберись. Хуже иностранцев, хотя вроде и по русски многие статьи читал.  biggrin
0  
2
Рейтинг: 0
Имя: Админ
Написал: Arkano | Дата: 06 Октябрь 2015, 23:10 


Уперся в проблему подключения к Народному мониторингу (передачи на него данных).
Сетевая библиотека съедает 79% памяти Ардуино и на остальные библиотеки не остается места... surprised
0  
1
Имя *:
Email:
Код *:
Форма входа
Знаете ли Вы что...

Леонардо да Винчи изобрел ножницы

Облако тегов
Случайные картинки



Призма - Друзья
Календарь новостей
«  Сентябрь 2015  »
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
282930

Связь с автором
ICQ: 226-325-702
Призма-кнопка
Предлагаю обмен кнопками. Принимаются предложения от сайтов смежной тематики, с посещаемостью не ниже 300 хостов в сутки.
Призма - не по детски интересные поделки
Получить код

Copyright Prizma © 2008-2017
При использовании материалов сайта активная ссылка на источник обязательна!
Сайт создан в системе uCoz