Интернет вещей (IoT) делаем сами

 

Интернет вещей (IoT) делаем сами

Интернет вещей делаем сами

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

Немного общих слов и замечаний


Многие из возможных читателей или посетителей этого сайта уже хорошо владеют отдельными навыками, требуемыми при разработках подобных систем.
Одни хорошо владеют программированием, другие на “ты” общаются с электроникой или электричкой, третьи ничего этого не знают, но представляют себе что они хотят получить от собранной системы и могут более-менее описать требования для её разработки.
Мы на страницах проекта по стараемся объединить все эти и, возможно другие навыки воедино, руководствуясь собственными опытом и знаниями, а также рациональным подходом и здравым смыслом (как мы его понимаем))).
По ходу описания проекта, возможно будут встречаться отступления от ему, которые будут подробнее описание ь детали проекта и технические подробности используемых элементов, а также их взаимодействия.
Кроме того, возможно мы будем находить неверные или тупиковый решения, отказываться от них и менять на ходу на более подходящие.

Краткое описание стартового набора


Вначале идет краткое описание стартового набора для нашей системы интернета вещей (IoT), а дальше будем подробнее описывать откуда оно все берется, как соединяется, настраивается и программируется.

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

После многочисленных проб и ошибок была принята следующая конфигурация ядра ситемы:

Железо


Raspberry Pi 3 — в качестве управляющего компьютера и средства коммуникации через интернет

raspiboard.jpg


Arduino Mega 2560 — как универсальный драйвер всего, что можно подключить к системе управления. Между собой плата Arduino и Raspberry Pi 3 подключены через порт USB. Плата Arduino Mega была выбрана «на вырост», так как имеет самое большое количество портов ввода/вывода и большую внутреннюю память. На самом деле для большинства задач будет вполне достаточно простенькой и хорошо всем знакомой Arduino Uno или аналогичной.

arduinoboard.jpg


Еще одна необязательная, но очень удобная "фишечка", найденная нами на просторах интернета (и на них же приобретенная) - пластиковая объединяющая панель Project Boatd. На этой панели есть установочные места с винтовыми креплениями для плат Raspberry Pi и Arduino разных типов и место для приклеивания макетной платы для беспаечного монтажа проводов и компонентов Breadboard.

projectboard.jpg


Вот примерно так выглядит собранный на этой плате проект датчика температуры, влажности и давления с удаленной передачей данных через интернет. Но об этом немного позже.


IMG_20171125_162549.jpg

Софт


Ну, разумеется на Raspberry Pi установлена родная операционная система Debian (Raspbian) скачанная с сайта поддержки сообщества и установленная по инструкции с таго же сайта. Для ее первоначального запуска и настройки системы нам нужно будет подключить к плате Raspberry Pi монитор с HDMI разъемом (или к обычному монитору через переходник, который придется купить дополнительно). Также во время этого первоначального запуска нужно будет настроить подключение нашей платы к сети. Тут возможно как подключение через проводную сеть Ethernet. Так и через беспроводную сеть WiFi.

raspbianmain.jpg


TeamViewer 12 — программа для удаленного управления платой Raspberry Pi через интернет, так как вся система будет работать без монитора, клавиатуры и мыши. На сайте разработчиков TeamViewer есть версия программы специально для Rasoberry Pi

yeamviewer.jpg


Для удаленного управления системой программа TeamViewer была также установлена на домашний компьютер под управлением Linux Ubuntu и планшет с Android. На сервере производителей была зарегистрирована учетная запись и к ней привязана группа из этих трех устройств. В итоге платой Raspberry Pi можно управлять как с домашнего компьютера (или ноутбука), так и с планшета или любого другого девайса под управлением OS Android.

Разобравшись с управлениеем нашим удаленным компьютером идем дальша. Подключаемся к нему через удаленный рабочий стол и устанавливаем на него среду разработки Arduino IDE.
После установки запускаем среду разработки Arduino и настраиваем в ней тип платы (в моем случае это Arduino Mega 2560) и выбираем виртуальный COM порт, к которому плата Arduino подключена ( в списке портов в менб выбора будет всего один порт, на нем и кликаем мышью). Все, наши платы соединены программно.

arduinoidemain.jpg


Далее — для разработки программы управления системой на плате Raspberry Pi мы будем использовать среду разработки Lazarus,которую также устанавливаем на Raspberry Pi через удаленный рабочий стол.

lazarusmain.jpg


Ну и наконец, для того чтобы программа, написанная в среде Lazarus могла передавать и получать информацию от Arduino в среду программирования Lazarus нужно установить дополнительный пакет — 5dpo. Визуальный компонент SdpoSerial, который предоставляет этот пакет позволяет устанавливать, прерывать соединение через COM порт и передавать через него данные как в одну. Так и в другую сторону.

Все проверили, все работает. Что дальше?

Придумываем протокол обмена информацием между Raspberry Pi (далее RasPi) и Arduino


Так как «головой» проекта у нас будет RasPi, то и работать в связке с Arduino от и должен как  руководитель, или правильнее Master. То есть он передает команды управления и данные плате Arduino и получает от нее ответ для анализа и выполнения последующих действий.
Arduino же, в свою очередь будет исполнителем, сервером или Slave устройством, которое ожидает команды мастера, выполняет порученные от него команды и возвращает ответы о выполнении команд и их результатах. А в промежутках между вкомандами может выполнять и еще какую-нибудь текущую работу.

Какие же команды мы будем передавать? И что ожидаем получать в ответ?

На данном этапе разработки мы всего предусмотреть не сможем, поэтому пока начнем фантазировать:

1. Простые команды управления цифровыми портами ввода/вывода Arduino (пинами). Они делятся на две части — установка пина (находящегося в режиме вывода или OUTPUT) в состояние HIGH или LO и чтение состояния пина (если он установлен в режим INPUT) с возвращением значения этого состояния (HIGH или LO).

2. Команды для работы с аналоговыми портами Arduino и портами в режиме PWM или при управлении сервоприводами. Здесь мы должны передать/получить не только адрес или номер порта, но и его текущее значение для ввода или вывода (например чему равен выходной сигнал аналогового датчика, подключенного к порту A1 или подать на выход порта 6 ШИМ ( PWM) значение, равное 64, или повернуть ротор сервомашинки, подключенной к порту 8 на угол 35 градусов и т. д.)

3. Мы будем пользоваться различными интерфейсами, с которыми может работать Arduino (I2C, 1-Wire и, возможно другими), по которым будем передавать и получать обратно цифровую и текстовую информацию (например — вывести в первой строке LCD дисплея текст «Temperature =» или получить от цифрового датчика давления строку со значение текущего атмосферного давления, или вывести на экран текущее значение напряжения аккумулятора при работе в автономном режиме и т. д.)

4. ,  5. ….. и т. д. - это мы будем придумывать по ходу наших разработок.
Текущий, актуальный на данный момент список команд будет находиться на этой странице нашего сайта.