четверг, 14 июля 2016 г.

4.9. Как отправить данные в сеть

Урок: 4.9. Как отправить данные в сеть

Транскрибация урока: Мы снова пойдем в Образцы, найдем раздел Ethernet и найдем в нем пример WebServer. Давайте смотреть, что там будет происходить. Вначале есть комментарии, а затем уже что-то интересное. Во-первых, подключается 2 библиотеки: SPI и Ethernet. Первая из них нужна для работы с интерфейсом SPI, а вторая, соответственно, для работы с Ethernet-шилдом. Затем мы видим какие-то уже значения, сохраняемые в массив MAC. Это, собственно, и есть тот самый MAC-адрес, которые наклеен с обратной стороны Ethernet-шилда. Он обозначается в 16-ричной системе счисления, поэтому здесь есть префикс 0x, а затем, я вот сюда уже переписал цифры с нашего Ethernet-шилда, вы сделаете со своим то же самое. В 16-ричной системе, напомню, символы A, B, C, D, E, F — это тоже цифры. Поэтому вот такой набор цифр мы сюда записали и дальше видим, что создается какой-то объект IP. Вы наверняка что-то слышали про IP-адреса, по которым можно обращаться к каким-то удаленным компьютерам. Вот и мы будем обращаться к нашему серверу на Arduino по IP-адресу. Какой адрес сюда вы можете записать? Попробуйте зайти в панель администратора своего роутера. Обычно, когда вы подключены к Wi-Fi сети своей или проводом подключитесь к роутеру, зайдя на адрес 192.168. 0.1 или 1.1, вы попадете в панель администратора. Стандартный логин и пароль туда admin admin или admin пусто. Если стандартные не подходят, найдите инструкцию или человека, который у вас настраивал сеть, объясните, зачем вы хотите туда зайти. Когда вы туда попадете, найдите раздел про DHCP. Здесь есть в настройках обычно некий диапазон адресов: начальный и конечный. В нашем случае это от 192.168.0.100 до 192.168.0.199. И из этого диапазона мы можем выбрать какое-нибудь значение, чтобы прописать его как IP-адрес нашего устройства. Если вас эта тема заинтересует, вы можете найти другие примеры, где получение адреса происходит автоматически, но сейчас речь о самом простом примере. Я выбрал из нашего диапазона адрес 192, 168, 0, 50. Обратите внимание, что здесь он через запятую пишется, а не через точки, как обычно. И затем создаются еще некоторые, точнее, создается еще один объект, где мы указываем порт 80, по которому будем общаться с нашим сервером. После чего в разделе Setup происходят некие служебные действия: соединение с компьютером по USB через последовательный порт, затем готовим соединение с сервером, и вводится в последовательный порт служебное сообщение, где также выводится IP-адрес наш локальный. Дальше начинается основной цикл. Здесь есть много всего. На самом деле оно прокомментировано, давайте быстренько пробежимся. Создается объект клиент, который проверяет, есть ли клиент, то есть обращается ли кто-то к нашему серверу, есть ли какой-то запрос. И если он есть, в последовательный порт говорится, что, ага, есть клиент, и затем смотрим, что у него за запрос. На самом деле, в базовом случае нас не интересует все, что там написано, нам нужен конец запроса, потому что мы выдаем единственно возможную страницу без каких-либо вообще опций и ожидаем, будем ожидать пустой строки. Для этого здесь создается соответствующая переменная. Затем, пока клиент соединен, мы будем по символу получать его запрос. Ну и сразу выводить его в последовательный порт, если захотим почитать, что же приходит, что за запрос приходит из браузера. Затем проверяется, что мы перешли на новую строку, и она пустая, и в этом случае мы начинаем отвечать, то есть отправлять с Arduino данные запрашивающему клиенту. Ну, скорее всего, себе на ноутбук, подключенный к Wi-Fi. Это служебные заголовки, которые мы обычно не видим. Вот сообщение, что все в порядке. Затем еще служебные сообщения. Обратите внимание, что здесь есть заголовок специальный, который будет заставлять страницу автоматически обновляться каждые 5 секунд. Вообще, это как бы не очень хороший, уже не поддерживаемый, скажем так, заголовок, но он нам чуть позднее пригодится, я расскажу зачем. А после этого уже начинается выдача, собственно, страницы, той самой разметки, которую мы можем посмотреть в браузере, если откроем правой кнопкой мыши содержимое исходного кода. Я сейчас не буду подробно разбирать все теги. Ну то есть, в начале есть тег, обозначающий начало html-разметки и так далее. И тут же мы подходим к той части, которая будет выводить какие-то данные с Arduino туда, в Интернет. Здесь есть цикл со счетчиком, который пробегает по всем аналоговым пинам, по всем номерам аналоговых пинов, аналоговых пинов от 0-го до 5-го. И каждый раз будет считываться соответствующий аналоговый пин, будет выводиться текст "analog input", номер такой-то переменной счетчика является содержимым, считанным у соответствующего кода, и будет выводиться тег перевода строки, то есть чтобы на странице последующее сообщение было с новой строки. В конце, после уже цикла, идет закрывающий тег, говорящий о том, что разметка закончилась, и, собственно, идет проверка на пустую строку. В одном случае будет сохраняться, что у нас пустая строка, в другом случае — что это не так. В конце делается маленькая задержка. Клиент останавливается, закрывается соединение, и в последовательный порт выводится служебное сообщение, что клиент из Интернета отсоединен. Сейчас мы попробуем загрузить этот скетч, только помимо MAC-адреса и IP-адреса я здесь изменю то место, докуда будет пробегать вот этот вот цикл, выводящий значения с аналоговых входов. Мы попробуем только один датчик подключить. Соотвественно, пробежим от 0 до 0 — я не хочу стирать цикл. Давайте посмотрим, как это все будет работать. Итак, я собрал тестовую конструкцию, на Искру надет Ethernet-шилд, он подключен патчкордом к роутеру, и к Тройке-шилд, которая стоит поверх Ethernet-шилда, подключен модуль потенциометр, который мы будем считывать и выводить на веб-страницу. Давайте теперь попробуем зайти на страницу, только прежде я запущу последовательный порт, где у нас есть служебный вывод. У нас есть сообщение, что сервер поднят по вот этому адресу. И теперь, когда я из браузера обращусь по этому адресу, я увижу то, что нам Arduino и выдает: analog input 1023. И заметьте, что каждые 5 секунд страница обновляется. Сейчас я покручу потенциометр, и после следующего обновления значение стало 537. Выкручу в 0 — оно стало 0. И так далее. Здорово, мы научились передавать в сеть данные с Arduino. Сейчас я хочу еще раз акцентировать ваше внимание на мониторе порта. Мы открыли его и здесь видим: постоянно, каждые 5 секунд, приходят запросы от браузера. Вот так вот они выглядят, но мы их не разбираем, а просто дожидаемся их конца. Хочу отдельно остановиться на вот этих вот 3-х строчках скетча, которые нужны для того, чтобы Arduino Leonardo и, соответственно, Iskra Neo, которая аналог Leonardo, дождались установления соединения с компьютером прежде, чем выполнять дальнейший скетч. Дело в том, что, как я упоминал, у Arduino Uno и Arduino Leonardo связь с компьютером организована по-разному. И когда мы подключаем к компьютеру Arduino Uno, скетч запускается заново, и поэтому в мониторе порта мы не пропустим ничего из того, что Arduino туда отправлял. В случае с Leonardo, если мы не напишем вот эти 3 строчки, она будет отправлять что-то в порт, даже если нету соединения, и мы можем какие-то важные сообщения упустить. Поэтому в скетчах, где происходит обмен данными, часто вставляют вот эти вот строчки. В данном примере, если вы не уберете эти 3 строчки, вам для нормальной работы сервера, веб-сервера, нужно будет запустить последовательный порт, потому что иначе не будет выполняться скетч, который после вот этих вот, этих вот 3-х строчек. Поэтому либо уберите эти 3 строчки, либо запустите монитор порта, чтобы веб-сервер, который запускается ниже уже после этих действий, был запущен.

Часть: Видео

Модуль: Как полить цветок из другого города

Описание модуля: После этой недели вы сможете соединять устройство с сетью, планировать его создание заранее, управлять мощной нагрузкой и давать правильное питание вашему созданию.

Курс: Строим роботов и другие устройства на Arduino. От светофора до 3D-принтера

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

Наш курс состоит из серии практических задач про создание вещей, которые работают сами: изучают мир, принимают решения и действуют – двигаются, обмениваются данными друг с другом и с человеком, управляют другими устройствами. Мы покажем, как собирать эти устройства и программировать их, используя в качестве основы платформу Arduino.

Пройдя этот курс, вы сможете создавать устройства, которые считывают данные о внешнем мире с разнообразных датчиков, обрабатывают информацию, получают и отправляют данные на ПК, в Интернет, на мобильные устройства, управляют индикацией и движением. Создание устройств будет включать проектирование, изучение компонентов, сборку схем, написание программ, диагностику. Попутно с созданием самих устройств вы сделаете визуализацию на ПК, создадите веб-страницу, которую будет демонстрировать одно из ваших устройств, а также разберетесь с устройством и работой FDM 3D-принтера.

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

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

Весь курс посвящен практике и самым лучшим решением для вас будет раздобыть электронику, повторять показанные примеры и экспериментировать самостоятельно.

Программа:
  • Неделя 1 Один старый и много новых знакомых
  • Неделя 2 Контроллер изучает мир
  • Неделя 3 Цель обнаружена
  • Неделя 4 Как полить цветок из другого города
  • Неделя 5 Мобильный робот
  • Неделя 6 Как создать новый предмет за час
Преподаватель: Алексей Перепелкин (1), Дмитрий Савицкий (2)

Описание преподавателя: (1) Алексей Перепёлкин занимается развитием робототехники на базе ЛИОТ МФТИ. В 2012 году открыл для себя новое захватывающее чувство – когда устройство, которое сам построил и запрограммировал, работает. Свернул с финансовой дорожки и создал кружок робототехники для подростков. Готовил их к соревнованиям. Стал посещать конференции, а затем проводил мастер-классы для тех, кто тоже хочет организовать занятия. Совместно с коллегами в 2013 году разработал новые соревнования – Робопрофи – для конкурса Робот для жизни и провел их. В 2014 году впервые провел Arduino-номинацию на фестивале Робофест, а для российского финала Russian Robot Olympiad 2014 сделал творческую категорию. С тех пор эти соревнования стали регулярными. Летом 2014 провел двухнедельную мастерскую в детском лагере Никола-Ленивца, а затем преподавал в выездной школе, посвященной программированию и робототехнике, которую провели ABBYY и Яндекс. В 2015 году стал руководителем направления робототехники в GoTo Camp, выездных школах, где участники создали десятки проектов, от прототипов умных домов и операторских тележек до робота-бубниста и принтера для незрячих. В 2014 году с коллегами начал проект Роболабы: мероприятия для школьников и студентов, где участники параллельно решают усложненные задачи, а затем проводят рефлексию сделанной работы и оценивают чужие в ходе серии мероприятий.

(2) Физик, научный сотрудник, выпускник МФТИ. Запустил кружок робототехники в 2011 году. Рассказал Алексею Перепелкину о том, как здорово вести кружок робототехники. Рассказал об этом еще целому ряду людей. Побеждал со своими командами на соревнованиях. Проводил проектную работу с участниками исследовательской выездной школы МКШ с 2013 года, где руководил реализацией физических и робототехнических проектов, например, «Вслед за солнцем», в котором изучалась эффективность динамической ориентации солнечных батарей на солнце. Вместе с коллегами разрабатывал и был судьей Робопрофи. Участвовал в подготовке проекта Роболабы. Вновь пришел в МФТИ для проведения факультативного курса «Основы создания киберфизических устройств»

Организатор: Лаборатория инновационных образовательных технологий МФТИ (1), Лаборатория инновационных образовательных технологий МФТИ (2)

Описание организатора: (2) Московский физико-технический институт (неофициально известный как МФТИ или Физтех) является одним из самых престижных в мире учебных и научно-исследовательских институтов. Он готовит высококвалифицированных специалистов в области теоретической и прикладной физики, прикладной математики, информатики, биотехнологии и смежных дисциплин. Физтех был основан в 1951 году Нобелевской премии лауреатами Петром Капицей, Николаем Семеновым, Левом Ландау и Сергеем Христиановичем. Основой образования в МФТИ является уникальная «система Физтеха»: кропотливое воспитание и отбор самых талантливых абитуриентов, фундаментальное образование высшего класса и раннее вовлечение студентов в реальную научно-исследовательскую работу. Среди выпускников МФТИ есть Нобелевские лауреаты, основатели всемирно известных компаний, известные космонавты, изобретатели, инженеры.

Категория: Компьютерные науки

Описание категории: Специализации и курсы по компьютерным наукам посвящены разработке и дизайну программного обеспечения, алгоритмическому мышлению, человеко-компьютерному взаимодействию, языкам программирования и истории вычислительной науки. Курсы в этой широкой области помогут вам мыслить абстрактно, методически подходить к проблемам и вырабатывать качественные решения.

Тематика: Разработка ПО

Материал: