Система управления умным домом на основе Raspberry Pi. Исходный код программы для Arduino. Необходимое аппаратное и программное обеспечение

14.04.2019

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

Как видно из схемы, если кнопка не нажата, вход GPIO5 будет подключен через резистор к шине 3.3 В. Входной порт RPi имеет высокое входное сопротивление, поэтому напряжение на входной линии будет близко к 3.3 В. Это означает, что при отпущенной кнопке RPi будет определять состояние входа как «лог. 1». Когда кнопка нажата, напряжение на входе будет равно 0 В, что является «лог. 0».

Для этой простой схемы величина сопротивления резистора R1 некритична и может находиться в диапазоне от 1 кОм до 47 кОм, однако низких значений следует избегать, поскольку в этом случае увеличивается ток, потребляемый при нажатии кнопки.

Исходный код программы для чтения состояния кнопки доступен в разделе загрузок (файл с именем Listing_4(Button).txt ). Сохраните код в файле с именем button-test.py и запустите на выполнение командой

sudo python button-test.py.

Результат выполнения программы выводится на экран в виде сообщения о текущем состоянии кнопки и количестве нажатий на нее. При выполнении этого примера вы заметите, что иногда значение счетчика становится больше реального количества нажатий на кнопку, и это происходит из-за «дребезга» контактов. Примерно то же самое происходит и при отпускании кнопки. Решение состоит в использовании механизма подавления «дребезга» контактов (debouncing). Этот механизм может быть как аппаратным, так и программным, причем последний распространен больше. В исходном коде, приведенном в файле Listing_5(Button_Debounce).txt , подавление дребезга контактов кнопки реализовано, и подсчет количества нажатий кнопки будет более точным. Единственное отличие от предыдущего кода заключается в том, что теперь с задержкой 20 мс выполняется вторая проверка состояния входа - за это время дребезг контактов прекращается.

Еще один пример: вольтметр

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

Примером может служить очень простой, но точный вольтметр с диапазоном измерений 0 … 1 В (Рисунки 13, 14). Учтите, что заменить портативный мультиметр он не может, поскольку не имеет необходимых цепей защиты, и может выйти из строя сам или повредить плату RPi, если используется для чего-либо, выходящего за рамки описанных здесь примеров.

В схеме используется микросхема AD654 (преобразователь напряжение-частота), которая генерирует прямоугольные импульсы с частотой, зависящей от входного напряжения. Цифровой выход Fout микросхемы подключен к входу GPIO5 (вывод 29 разъема GPIO). Максимальная частота прямоугольных импульсов при указанных на схеме номиналах элементов равна 10 кГц, поэтому для определения входного напряжения нам потребуется точная система отсчета времени. Код для этого примера (файл Listing_6(Voltmeter).txt ) написан на Си и использует библиотеку wiringpi, написанную Гордоном Хендерсоном (Gordon Henderson). Прежде всего, установите библиотеку wiringpi , для чего выполните следующие команды:

mkdir development
cd development
git clone git://git.drogon.net/wiringPi
cd wiringPi
./build

Сохраните код в файле с именем voltmeter.c и скомпилируйте его командой

gcc -o voltmeter -lrt -lwiringPi voltmeter.c.

Чтобы запустить программу, выполните следующую команду:

sudo ./voltmeter.

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

Несколько элементов в схеме вольтметра также влияют на точность измерений. Конденсатор С1 и резистор R1 задают характеристики преобразования, поэтому желательно выбрать пленочный полипропиленовый конденсатор и точный резистор с допуском 1%. Можно использовать подстроечный резистор. Напряжение питания схемы 5 В поступает с разъема GPIO, но его реальное значение может несколько отличаться от 5 В, поэтому лучше использовать отдельный более точный источник питания.

Для быстрой проверки схемы можно использовать делитель напряжения, состоящий из двух резисторов. Схема включения делителя показана в левой части схемы вольтметра (Рисунок 12). Если резисторы прецизионные и напряжение питания в точности равно 5 В, расчет напряжения на выходе делителя дает 0.04950 В. Значение, полученное в результате реального программного измерения, составило 0.04991 В. Неплохо для такого простого проекта!

Диоды Шоттки D1 и D2 в схеме не являются обязательными, но настоятельно рекомендуются, поскольку они обеспечат некоторую защиту микросхемы, если случайно на вход будет подано напряжение вне диапазона 0…1 В.

Защищенные входы

RPi можно защитить от случайного попадания высокого напряжения, добавив к используемым входам дополнительную схему. В некоторых случаях очень хорошей и недорогой альтернативой показанной ниже схеме (Рисунок 15) может служить оптрон, способный защитить входы RPi от напряжений до 60 В и справится с переполюсовкой. Транзистор BC547B в схеме на Рисунке 14 можно заменить на 2N3904 или BC549. Допустимая мощность рассеивания резистора R1 может быть 0.25 Вт при входных напряжениях до 50 В, в противном случае лучше использовать 0.5 Вт.

Схема инвертирует входной сигнал, переключаясь в «лог. 0» при входном напряжении свыше 2 В.

Подключение к 5-вольтовй логике

Прямое подключение устройств с 5-вольтовыми логическими выходами к входам RPi может вывести плату из строя. В этом случае есть множество решений.

Если состояние 5-вольтового логического выхода меняется относительно медленно, можно рассмотреть возможность использования резистивного делителя на входе RPi, но к быстрым схемам такой способ не применим. Тогда намного более хорошим решением будет использование буферной микросхемы. Для средних скоростей (до 100 кГц) вполне подойдет схема на N-канальном MOSFET ZVN2110A (Рисунок 16). Эта схема также инвертирует входной сигнал.

Показанный на схеме транзистор можно заменить на ZVNL120A или VN10LP.

При пайке полевых транзисторов следует соблюдать основные меры предосторожности. При сборке устройства сначала установите резистор R3 и только после этого извлеките MOSFET из защитной упаковки и запаяйте в схему. Резистор R3 обеспечит некоторую защиту.

Скорость работы и джиттер

Опрос состояния кнопок и управление светодиодами - события относительно медленные, измеряющиеся десятками и сотнями миллисекунд. Иногда встречаются намного более высокоскоростные сигналы. Например, пульт от телевизора излучает инфракрасные световые импульсы со скоростью 40 тыс. раз в секунду. Несмотря на то, что основной процессор RPi работает на частоте 1 ГГц, работа подсистемы ввода/вывода с такой скоростью не поддерживается по ряду причин, как аппаратных, так и программных. Мы рассмотрим некоторые программные аспекты, касающиеся темы статьи.

RPi работает под управлением многозадачной операционной системы (ОС) Linux. Система может превентивно забирать контроль над вашей программой для выполнения других задач. Все это происходит довольно быстро, так что кажется, будто мышка по-прежнему работает во время выполнения вашей программы, но на самом деле вашей программе и коду драйвера мыши ОС предоставляет лишь короткие промежутки времени.

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

Кроме того, немаловажное значение имеет выбор языка программирования, поскольку некоторые библиотеки подходят лучше, чем другие. Интерпретированные и компилированные коды могут выполняться с разными скоростями. Короче говоря, если требуется очень точная временнáя привязка событий, возможно, придется написать драйвер Linux или использовать внешнее оборудование (например, другой микроконтроллер или логические схемы и генератор).

Одним из хороших вопросов, важных для более полного использования возможностей RPi, является то, насколько быстро можно изменять логические состояния выходов GPIO с помощью библиотек Python, Си и описанного выше командного скрипта.

Чтобы узнать это, был написан код для периодического переключения логического состояния выходного порта, к которому был подключен осциллограф. Результат представлен в Таблице 1.

Таблица 1. Максимальная частота переключения выходов при
использовании различных языков программирования
Язык
программирования
Частота Длительность
высокого уровня
Длительность
низкого уровня
Python 71.2 кГц 3.9 мкс 10.1 мкс
Си 5.8 МГц 85 нс 85 нс
Командный скрипт 3.9 кГц 115 мкс 139 мкс

Однако всегда важно помнить о джиттере, которым обязательно сопровождается работа ОС Linux. Для случая простого переключения светодиода это, кончено же, не проблема. Характер джиттера можно увидеть на осциллографе в режиме наложения нескольких каналов при синхронизации общим сигналом (Рисунок 17). Обратите внимание, что джиттер может принимать множество значений, несмотря на то, что сигналы дискретно разнесены на 4 нс (250 МГц), что связано с аппаратными особенностями RPi.

Заключение

Теперь вы увидели, что 40-контактный разъем GPIO на платах RPi может использоваться для различных проектов - от управления светодиодами до электронных схем для измерения аналоговых величин. С небольшими дополнительными схемами адаптации логических уровней RPi может взаимодействовать 5-вольтовыми устройствами. С помощью Python очень легко управлять выходами, так же как не представляет сложности и чтение состояния входов, а библиотека wiringpi значительно упрощает управление программистам, использующим Си.

Напоминаем, что попытки повторить действия автора могут привести к потере гарантии на оборудование и даже к выходу его из строя. Материал приведен исключительно в ознакомительных целях. Если же вы собираетесь воспроизводить действия, описанные ниже, настоятельно советуем внимательно прочитать статью до конца хотя бы один раз. Редакция 3DNews не несет никакой ответственности за любые возможные последствия.

Стыдно признаться, но Raspberry Pi мы заполучили больше года назад и да, не написали тогда про него ни строчки, хотя и трёхмесячное ожидание было томительным, и радость от получения посылки из Туманного Альбиона была искренней. Оно, наверное, и к лучшему. За год вокруг Raspberry Pi образовалось приличных размеров сообщество пользователей, разработчиков и компаний, которые явили миру немалое количество аксессуаров, проектов и программного обеспечения. Да и сам одноплатный компьютер успел претерпеть некоторые изменения в аппаратной части — в новых версиях убрали ряд недочётов и в два раза увеличили объём RAM у модели B.

История Raspberry Pi

Вообще история развития и появления Raspberry Pi не так проста. Первый прототип этого устройства появился в году. Уже тогда он должен был стоить $25 и предназначался для обучения школьников азам компьютерных премудростей — тому, что в англоязычной литературе принято называть Computer Science (CS), а у нас не совсем корректно зовётся информатикой (о терминологии спорят до сих пор). Основателям проекта — сотрудникам и преподавателям Компьютерной лаборатории Кембриджского университета — не нравился тот факт, что с каждым годом уровень подготовки абитуриентов неуклонно снижался. Если в 90-е годы к ним, как правило, приходили учиться молодые люди, не понаслышке знакомые с программированием, то в 2000-х типичный абитуриент был разве что немного знаком с веб-дизайном.

Сожаление разработчиков Raspberry Pi понятно, ведь их молодость пришлась как раз на время появления и расцвета первых по-настоящему домашних «персоналок» Amiga, BBC Micro, Spectrum ZX и Commodore 64. Пользователи этих ПК порой попросту вынуждены были заниматься программированием, если не находили подходящего софта для своих задач. Причём нередко надо было не просто уметь писать код, но и хорошо понимать принципы работы железной составляющей, умело обходить имеющиеся ограничения и различными ухищрениями добиваться максимальной производительности своего творения. Самые продвинутые брали в руки паяльник, ведь периферии поначалу тоже было немного. А для некоторых это и вовсе стало поводом открыть свой «свечной заводик».

Впрочем, все мы знаем, что в 90-х произошло с платформой Wintel, которая стала фактически монополистом на рынке ПК и в итоге избавила пользователей от необходимости осваивать программирование. В школах тоже решили переключиться на изучение основ работы с одним известным офисным пакетом и создание простеньких HTML-страничек. Потом лопнул пузырь доткомов, стали массово распространяться игровые приставки и персональные компьютеры. В общем, жизнь простых пользователей заметно упростилась, а ряды энтузиастов заметно поредели. Такая ситуация не устраивала преподавателей — и они загорелись идеей создания платформы, которая возродила бы интерес к самостоятельному изучению этой темы. Так ли уж всё печально, однозначно сказать трудно, но вдохновлялись создатели историей некогда легендарного учебного компьютера BBC Micro , не рассчитывая, впрочем, коренным образом изменить ситуацию с интересом к Computer Science.

Параллелей между Raspberry Pi и BBC Micro не так уж мало. Оба имеют две аппаратные, незначительно различающиеся версии — Model A и Model B. Оба основаны на RISC-подобной архитектуре, причём железо в обоих случаях используется оптимальное, хотя и не самое продвинутое. RISC OS тоже не забыли портировать. Задача у них одна и та же — заинтересовать подрастающее поколение компьютерными технологиями на достаточно продвинутом уровне. BBC Micro планировалось продать не более 12 тысяч штук, а за 10 с лишним лет в итоге было продано около полутора миллионов. Пробная партия Raspberry Pi объёмом 10 000 экземпляров разошлась за несколько минут, причём поначалу действовало правило «одна штука в одни руки». Представитель одного из двух официальных дистрибьюторов «сердечно» попросил пользователей перестать обновлять страничку онлайн-магазина, так как сервера попросту не справлялись с нагрузкой. Год спустя, во время старта продаж в США история повторилась . На текущий момент, то есть почти через полтора года после запуска, продано более полутора миллионов устройств, и это, похоже, не предел.

Скоро сказка сказывается, да не скоро дело делается. Ещё пара лет после появления первого прототипа ушла на создание различных вариантов ПК, пока в 2008 году не стало ясно, что процессоры для мобильных устройств стали доступными и достаточно мощными для работы с медиаконтентом и именно их, а не микроконтроллеры, следует использовать для претворения идеи в жизнь. В 2009 году была создана благотворительная организация Raspberry Pi Foundation, в задачи которой входит разработка и продвижение одноимённого компьютера. Два года потребовалось на создание аппаратной и программной части будущего устройства, заключение договоров и соблюдение прочих формальностей. В какой-то момент даже была идея сделать мини-ПК в виде большой флешки - с одной стороны USB-порт, а c другой HDMI-выход. Подобные устройства с Android на борту сейчас в огромных количествах клепают китайские компании. Наконец, в 2011 году появились первые альфа- и бета-версии плат. И только в начале прошлого года первая партия Raspberry Pi отправилась на сборочный конвейер, а до заказчиков она добралась ближе к лету, потому что китайский подрядчик умудрился ошибиться при сборке, что вызвало дополнительные затраты времени на исправление ошибки.

Заметьте, Raspberry Pi — по сути некоммерческий проект. Так что нет ничего удивительного в том, что на его разработку ушло столько лет. Одновременно это ответ на недовольные возгласы в духе «А почему процессор такой, а не такой-то? Где мой гигабайт памяти? Нельзя что ли было добавить поддержку SATA? Почему нет модуля Wi-Fi/3G/Bluetooth?». Помилуйте, вам за $25 (или $35) предоставили добротную машинку для домашних экспериментов и «наколенных» проектов. В конце концов, новичку проще разобраться с Raspberry Pi, чем с микроконтроллерами; он намного удобнее и функциональнее плат мини-роутеров, которые нередко используются в исследовательских задачах ; его цена заметно ниже, чем у всех остальных одноплатных решений , пусть и более функциональных. Получается, что конкурентов у Raspberry Pi пока что нет. Ну что же, мы подробно рассказали об истории создания этого проекта, но до сих пор ни разу не обмолвились о том, что он собой представляет, что с ним можно сделать и какие у него недостатки.

⇡ Технические характеристики и возможности

Raspberry Pi называют одноплатным компьютером размером с кредитную карту. На самом деле сама плата чуть крупнее — 85,6x56x21 мм — и не имеет скруглённых краёв, к тому же некоторые порты попросту торчат снаружи, не говоря уж про карту SD, которая более чем на половину выпирает за пределы платы. Решить эту проблему могут «короткие» адаптеры для micro-SD. Весит устройство всего 54 грамма. Raspberry Pi выпускается в двух версиях — Model A и Model B. У Model A нет порта Ethernet, один порт USB 2.0 и 256 Мбайт RAM, а стоит она $25. Model B оснащена портом Ethernet 10/100 Мбит/с, двумя портами USB 2.0, объём оперативной памяти у неё в два раза больше. Всё это удовольствие продаётся уже за $35. Только учтите, что это «чистая» цена, без учёта возможных налогов и расходов на доставку. Нам, к примеру, приобретение Model B обошлось чуть ли не два раза дороже. Также при покупке стоит обратить внимание на маркировку SoC. Номер партии для «старых» версий Model B с 256 Мбайт RAM начинается с K4P2G, а у ревизии с 512 Мбайт памяти — с K4P4G.

Схема Raspberry Pi Model с www.raspberrypi.org

По идее, начиная с этого года все Raspberry Pi Model B должны иметь полгигабайта RAM, но на складах перекупщиков вполне могли заваляться более ранние модели. Лицензией на производство плат обладают компании Premier Farnell, RS Components и Egoman. Причём последняя выпускает платы красного цвета, которые могут предлагаться только на китайских территориях. К первой годовщине проекта RS Components выпустили юбилейную партию плат синего цвета объёмом 1000 штук. Эти же компании имеют право продавать Raspberry Pi, а в США распространением занимается Allied Electronics. Так что все остальные магазины попросту закупают большие партии устройств у этой четвёрки и перепродают конечным потребителям. Обе модели плат от разных производителей (сборкой занимаются заводы Sony, Qisda и Egoman), имеют некоторые несущественные различия , но по большому счёту они идентичны.

Основой Raspberry Pi является система-на-кристалле, Broadcom BCM2835 (линейка BCM2708), которая включает процессорное ядро ARM11 с базовой частотой 700 МГц (возможен разгон до 1 ГГц) и графическое ядро Broadcom VideoCore IV. Из-за того, что использована ныне слегка устаревшая архитектура ARMv6, ряд дистрибутивов не поддерживают данный процессор. К ним относится, например, Ubuntu. Про Android тоже нельзя сказать, что он хорошо работает. С другой стороны, разработчики приложили максимум усилий для того, чтобы как следует подготовить ОС к работе на данном железе, чего, кстати говоря, не скажешь о многих других одноплатных ARM-компьютерах. GPU поддерживает стандарты OpenGL ES 1.1/2.0, OpenVG 1.1, Open EGL, OpenMAX и способен кодировать, декодировать и выводить Full HD-видео (1080p, 30 FPS, H.264 High-Profile). Для аппаратного ускорения MPEG-2 и VC-1 лицензии придётся докупать отдельно, и это ещё один повод напомнить, что стоимость лицензий и патентных отчислений вносит далеко не самую маленькую лепту в конечную цену почти любого высокотехнологичного устройства.

Чип памяти производства Samsung или Hynix напаян прямо поверх основного чипсета, так что увеличить RAM самостоятельно не получится. Память здесь общая, поэтому пользователь сам выбирает, сколько мегабайт отдать GPU. Видеовыходов два — композитный RCA (576i или 480i, PAL-BGHID/PAL-M/PAL-N/NTSC/NTSC-J) и HDMI 1.3a с поддержкой HDCP и протокола CEC (управление с одного ПДУ всеми мультимедийными устройствами). Так что для создания простенького медиацентра Raspberry Pi вполне подойдёт, а наличие готового решения Raspbmc значительно упрощает задачу. Выбор именно таких видеовыходов объясняется очень просто — компьютер, как в давние времена, рассчитан на подключение к телевизору, а не к мониторам. Поэтому нет, например, разъёма DVI. Ну и ладно, переходник с HDMI можно купить самому. (Сами видите, столько всего ещё можно или даже нужно докупить к этой плате ) Звук либо передаётся через HDMI, либо выводится через обычное 3,5-мм гнездо.

Встроенное устройство для чтения карт памяти гарантированно работает с большинством SD-карт объёмом до 32 Гбайт. Загружаться Raspberry Pi умеет только с карточек SD. Если точнее, то сама ОС может располагаться на USB-накопителе, но вот загрузчик всегда должен быть на SD. Кнопок включения и сброса нет — устройство само включается при подаче питания. Питается Raspberry Pi от порта micro-USB или с пары выделенных выводов GPIO. Для Model A рекомендуется источник на 5 В и 500-700 мА, а для Model B на 5 В и 700-1200 мА. То есть порта USB 3.0 или зарядного устройства для телефона должно хватить, хотя лучше подобрать более стабильный источник питания. Сами платы потребляют чуть меньше, но часть энергии требуется для работы подключенных к USB-портам устройствам. Альтернативный вариант — питание от подключенного к плате USB-хаба с отдельным БП или аккумуляторов, но это не самое лучшее решение. Кстати, контроллер Ethernet в Model B тоже «висит» на шине USB. Индикация минимальная — на плате распаяно пять светодиодов. Три из них указывают на активность и режим работы Ethernet, а ещё два сигнализируют о наличии питания и работе с SD-картой.

А теперь — самое интересное: набор низкоуровневых интерфейсов, которые позволяют подключать к Raspberry Pi платы расширения, внешние контроллеры, датчики и прочие аксессуары. Во-первых, на плате есть 15-пиновые слоты CSI -2 для подключения камеры и DSI для установки дисплея. Во-вторых, имеется колодка на 26 линий ввода-вывода общего назначения (GPIO, General Purpose Input/Output), из которых по факту для управления доступно только 17 — не густо, но и не пусто. На них же реализованы интерфейсы UART, консольный порт, SPI и I²C. На новых ревизиях плат разведены, но не распаяны ещё четыре GPIO, дополнительно дающие I²C и I²S. Если вам не знакомы все эти аббревиатуры, то не пугайтесь — это названия широко распространённых в микроэлектронике стандартов подключения одних устройств к другим. Использование GPIO — это как раз самое интересное и творческое применение Raspberry Pi.

Впрочем, недостатков у него тоже хватает. В нём, к примеру, нет собственных часов реального времени (Real Time Clock, RTC). Тех самых, которые «помнят» текущее время и идут сами по себе. Поэтому единственный способ получения времени - это синхронизация с NTP-серверами. SoC содержит в себе цифровой сигнальный процессор (DSP), но полного доступа к его API, по-видимому, до сих пор нет. Выводы GPIO никак не защищены от короткого замыкания, поэтому ошибка в монтаже может сгубить весь мини-ПК. Также они способны обрабатывать только цифровые сигналы. Видеовыходы не могут одновременно выводить картинку. Аудиовхода вообще нет. В общем, недостатков у Raspberry Pi хватает. А ещё его пример хорошо иллюстрирует процесс разработки современных устройств. Взять те же часы. Они оказались на удивление дорогим компонентом, от которого решено было отказаться. При этом разработка устройства происходила на добровольных началах, то есть никто за неё не платил. Стоимость компонентов снижается при увеличении заказа, а первую партию в 10000 штук совсем уж серьёзной не назовёшь. Сборка, доставка, налоги, пошлины, лицензии и так далее — всё это требует денег. Да и дистрибьюторы тоже хотят получить свою копеечку. И всё равно в итоге удалось уложиться в $25.

Одноплатный мини-ПК Raspberry Pi
Model A Model B
Цена $25 $35
System-on-a-chip (SoC) Broadcom BCM2835 (CPU + GPU)
CPU 700 МГц ARM11 (ядро ARM1176JZF-S), возможен разгон до 1 ГГц
GPU Broadcom VideoCore IV
Стандарты OpenGL ES 1.1/2.0, OpenVG 1.1, Open EGL, OpenMAX
Аппаратные кодеки H.264 (1080p30, high-profile);
MPEG-2 и VC-1 (лицензия продаётся отдельно)
Память (SDRAM, общая) 256 Мбайт 512 Мбайт;
256 Мбайт (до 15.10.2012)
Порты USB 2.0 1 2
Видеовыход 1 x HDMI 1.3a (CEC),
1 x RCA (576i/480i, PAL-BGHID/M/N,NTSC, NTSC-J)
Аудиовыход Гнездо 3,5 мм, HDMI
Карт-ридер SD/MMC/SDIO
Сеть - Ethernet-порт RJ45 10/100 Мбит/с
Интерфейсы 20 x GPIO (SPI, I 2 C, UART, TTL);
MIPI CSI-2, MIPI DSI
Энергопотребление 500 мА (2,5 Вт) 700 мА (3,5 Вт)
Питание 5 В через порт micro-USB или GPIO
Размеры 85,6x56x21 мм
Масса 54 г

Неудивительно, что некоторые пользователи скупают Raspberry Pi пачками и «прикручивают» к чему попало. Эта машинка может стать в ваших руках и медиацентром, и управляющим центром «умного дома», и игровой приставкой для любителей 8-битной классики , и сердцем радиоуправляемых моделей. Тут уж всё зависит от вашей фантазии, желания и прямоты рук. В Сети есть немало примеров, готовых проектов, сообществ пользователей и целых магазинов, посвящённых Raspberry Pi. Есть даже официальный очень-очень скромный The Pi Store с небольшим количеством ПО, игр, руководств и собственным журналом. Короче: «Ищущий да обрящет!» Для начала рекомендуем пролистать списки проектов на официальном форуме или же ознакомиться с наглядными примерами от Adafruit и Element14 . Ну а мы переходим ко второй части нашего обзора — практической, в которой рассмотрим процесс начальной настройки Raspberry Pi и установим на него клиент BitTorrent Sync.

Здравствуйте друзья

После того, как я испытал возможности системы управления умным домом Domoticz на своем настольном компьютере и убедился в том, что она отлично дополняет, а где и заменяет Mi Home - штатную систему Xiaomi - я решил приобрести для нее отдельный одноплатный компьютер - Raspberry Pi. И в этом обзоре я расскажу про свой опыт.

Вступление

Для тех кто не читал мой первый обзор про Domoticz - . Буквально после первых удачных экспериментов, я загорелся идеей отдельной аппаратной базы для нее, в качестве рабочей платформы настольный ПК не подходит. Выбор свой я остановил, после штудирования пабликов - на Raspberry Pi Model 3 B - компактный но мощный одноплатный компьютер на базе Soc процессора BCM2837 с 4 ядрами Cortex-A53, работающим на частоте 1.2GHz, 1GB ОЗУ и беспроводными модулями Wi-Fi и Bluetoth 4.1.

Комплект

В свой заказ я включил 4 позиции -

Что интересно в магазине имеется две модификации - китайская и английская. На момент покупки китайская стоила на 7 долларов дешевле, ее я и взял. Чего там китайского - честно говоря для меня загадка.

Медные радиаторы для Raspberry Pi - страница товара

Еще для полного комплекта вам понадобится microSD карта - не менее 4 GB и HDMI кабель. У меня в загашнике был и кабель и карта на 32 ГБ, потому покупать не стал.

Что в посылке

Через положенный срок - чуть более двух недель, курьер принес посылку с моим заказом.


Рассмотрим подробнее. Блок питания с вилкой Тип С и разъемом micro-USB.


Заявленный максимальный ток - 2А при напряжении 5 В.


Тестовое включение с нагрузкой в 2А - показывает некоторое проседание напряжения, но в пределах допустимого, блок питания - более-менее честный.


Комплект из трех медных радиаторов в пакетике, для пассивного охлаждения.


Все радиаторы имеют квадтарную форму, два радиатора с штырями и длиной стороны около 12 мм и один плоский со стороной около 15 мм.


Корпус из темного пластика с выдавленным изображением ягоды малины на крышке


Размеры корпуса - примерно 90 на 65 мм



Корпус разбирается на 5 частей - держится все защелках, никаких винтов.


С аксессуарами покончено - пора переходить к самому главному

RASPBERRY PI 3 MODEL B

Raspberry Pi 3 Model B является прямым наследником Raspberry Pi 2 Model B. Плата полностью совместима с предшественником, но наделена большей производительностью и новыми средствами коммуникации:
64-х битным четырёхядерным процессором ARM Cortex-A53 с тактовой частотой 1,2 ГГц на однокристальном чипе Broadcom BCM2837; встроенными Wi-Fi 802.11n и Bluetooth 4.1.
Кроме того, процессор имеет архитектуру ARMv53, а значит вы сможете использовать любимую операционную систему: Debian Wheezy, Ubuntu Mate, Fedora Remix и даже MS Windows 10.


Технические характеристики подробнее

CPU - Broadcom BCM2837, ARM Cortex-A53 Quad Core, 1.2 GHz
Количество ядер процессора - 4
GPU - VideoCore IV 3D
RAM - 1 GB
Хранилище - microSD
Сетевые возможности
Ethernet 10/100
WiFi 2.4G 150 mb/s
Видео вывод - HDMI
USB порты - 4
Беспроводные возможности - Bluetooth
Аудио вывод - 3,5 Jack
85,6 х 53,98 х 17мм, 45 грамм


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


На одной из длинных сторон компьютера размещены порты micro USB для питания, полноразмерный порт HDMI, CSI-2 Camera port - для подключения камеры по интерфейсу MIPI, 3,5 мм аудиоразъем. Так же на верхней стороне находится модуль процессора и Ethernet/USB Hub lan9514-jzx


На торцевой стороне скомпонованы 4 USB порта и порт Ethernet


На другой стороне материнской платы находится 40 контактов ввода/вывода общего назначения (GPIO)


На второй торцевой стороны - находится DSI Display Port для подключения штатного дисплея


На нижней стороне платы находится модуль памяти LPDDR2 SDRAM - EDB8132B4PB-8D-F


И micro-SD разъем для карты памяти


Медные радиаторы ставятся на USB/Ethernet Hub и процессор с одной стороны


И на чип памяти с другой. Этот радиатор плоский - не мешает установке платы компьютера в корпус


В корпус все устанавливается отлично, винтовых соединений нет - садится на пластиковые выступы.


Все вырезы на корпусе в точности совпадает с разъемами компьютера



Для запуска нам потребуется внешний монитор (телевизор) с HDMI входом, USB клавиатура, будет удобнее если так же будет и мышка и питания. Монитор, клавиатура и мышка - понадобятся только на момент установки, дальше достаточно будет только блока питания.


Установка операционной системы

Для установки операционной системы, первым делом необходимо загрузить архив с дистрибутивами - отсюда . Пока скачивается почти полутора гигабайтный архив, загружаем утилиту для форматирования SD карты - SD Card Formatter - отсюда . Этот дистрибутив гораздо компактнее - всего 6 МБ, поэтому не теряя времени, устанвливаем программу


и, после установки, вставляем карту памяти в картридер (у вас же есть картридер не правда ли) и запускаем SD Card Formatter. В меню Options необходимо установить “FORMAT SIZE ADJUSTMENT” в “ON”


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

Следующий шаг - первый запуск Raspberry Pi (флешку с записанным дистрибутивом, конечно устанавливаем в него). Извините за качество нескольких следующих фото - с экрана телевизора:(

При первом запуске стартует меню выбора операционной системы - что ставить, причем в списке имеется даже версия WIndows 10 для Raspberry Pi. На этом этапе можно выбрать язык (внизу экрана) - русский есть и подключится к Wi-Fi сети - кнопка Wi-Fi networks


Нужная мне опарационка - Raspbian базирующаяся на Linux Debian - представлена в двух вариантах, lite И полном, с графическим интерфейсом. Я выбрал полную версию


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


Периодически измеряя температуру во время установки, максимально что я видел - 38 градусов.

После завершения установки и перезагрузки компьютера, загружается рабочий стол Raspbian


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


Для управления Raspberry с настольного ПК, нам понадобится любая программа терминал, я использую старый добрый Putty


Имя пользователя и пароль по умолчанию - pi и raspberry . Для смены пароля воспользуйтесь командой passwd .


eth0 - это Ethernet

lo - это локальный интерфейс 127.0.0.1

wlan0 - это wi-fi интерфейс


а для того что бы отредактировать файл с настройками - вводим команду

sudo nano /etc/dhcpcd.conf

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

Например мы хотим использовать адрес 192.168.0.222, маска 255.255.255.0, адрес шлюза и DNS - 192.168.0.1

Для Ethernet вставляем

static ip_address=192.168.0.222/24
static routers=192.168.0.1

interface wlan0
static ip_address=192.168.0.222/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1


Для выходя из редактора нажимаем ctrl+x
Для сохранения изменений - нажимаем “Y” и затем enter

Установка Domoticz

Большая часть работы по настройке уже закончена, теперь нам нужно установить систему Domoticz. Делается это одной командой -

sudo curl -L install.domoticz.com | sudo bash

Которая инициализирует процесс загурзки и установки системы


В процессе установки, инсталлятор задаст вопросы по поводу места установки и т.п. - все эти моменты я оставил по умолчанию.


После успешной установки, инсталлятор напишет адреса и порты веб интерфейса системы Domoticz


Но, для работы с шлюзом Xiaomi - нам нужна beta версия системы. Обновление до крайней версии беты производится командами

cd ~/domoticz
sudo ./updatebeta


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


На данный момент я уже перенес все свои рабочие сценарии с Windows версии на Raspberry - кстати стоит добавить что обе системы мирно сосуществуют одновременно. Для обеспечения бесперебойного питания миникомпьютера достаточно использовать PowerBank, который позволяет одновременно питать устройство и получать питание от внешнего источника.

Видеоверсия обзора:

Все мои обзоры устройств Xiaomi в хронологическом порядке - Список

Надеюсь обзор был полезен и интересен, спасибо за внимание.

Самая мощная на сегодня модель Raspberry Pi 3 Model B имеет разъём HDMI для подключения монитора, 4 USB-порта для подключения USB устройств, Ethernet-порт для подключения к сети, встроенный Wi-Fi и Bluetooth, 4 ядерный 64-битный процессор ARM 1.2 ГГц, 1 ГБ оперативной памяти. В отличие от обычных компьютеров на маленькой плате Raspberry есть 40 контактов (пинов) GPIO, который могут использоваться как на вход, так и на выход с применением различных протоколов взаимодействия с внешними устройствами, что и позволяет подсоединять к плате различные датчики и исполнительные приборы.

1. Внешний вид, основные элементы, корпус.

Итак, в наших руках Raspberry Pi 3 Model B.

Верхняя сторона выглядит так:

Нижняя сторона:

На нижней стороне установлены слот для SD-карты и оперативная память. SD-карта служит постоянным запоминающим устройством и содержит файлы операционной системы, программ и файлы пользователя.

Для удобства обращения с платой предлагается множество различных корпусов, а вот детали одного из них, они соединяются между собой без винтов:

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

Вот теперь можно собрать корпус и пометить туда плату микрокомпьютера:




Корпус имеет открывающуюся крышку для удобного подключения камеры, дисплея и контактов GPIO.

2. Подготовка к включению и первый запуск.

Для первого запуска Raspberry необходимо следующее:

  • микро SD-карта с установленной операционной системой (OC) Raspbian, рекомендуемой для этого устройства (оптимальная емкость карты - 8 Гб, класс скорости - 10);
  • монитор с HDMI входом;
  • сетевой блок питания с выходным напряжением 5 В и током не менее 2 А, с выходным разъемом micro-USB;
  • USB-мышь и USB-клавитура.

Образ операционной системы Raspbian, созданной на основе Linux Debian 8 Jessi, можно скачать в разделе Downloads сайта raspberrypi.org. Для начала можно воспользоваться образом RASPBIAN JESSIE LITE, как наиболее простым в изучении. Записать образ на SD-карту удобно из-под Windows с помощью программы Win32DiskImager. Способ установки и сама программа описаны на сайте Raspberry по адресу.

Вы также можете воспользоваться файлами, размещенными на нашем сайте в карточке Raspberry Pi 3 или напрямую скачать с Яндекс диска:

  • образ операционной системы;
  • программа Win32DiskImager.

Дальнейшее описание базируется именно на этом образе.

Мышь и клавиатура, подключенные к Raspberry без проблем распознаются системой. Можно также использовать беспроводную мышь и клавиатуру, например Bluetooth, но их надо настроить после запуска Raspberry, а для этого нужна хотя бы USB-мышь. У нас в хозяйстве не нашлось USB-клавиатуры, поэтому для первого запуска мы подключили USB-мышь, а также монитор и питание:

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

На начальном экране имеются легко распознаваемые иконки Меню, интернет-браузера, менеджера Bluetooth, регулятора громкости, настройки сети и некоторые другие. Из них, пожалуй, самая нужная при настройке и работе - это черный экранчик в правой верхнем углу: терминал. С помощью терминала вводятся команды операционной системы. Поскольку далеко не все программы для Linux имеют графический интерфейс, их можно запустить и работать в них только посредством командной строки. Именно эту возможность и предоставляет терминал. Также все системные операции Linux, например установка и удаление программ осуществляются преимущественно через терминал. В OC используется программа LXTerminal, которая и запускается при щелчке правой кнопкой мыши по иконке. Следует заметить, что многие команды требуют ввода в начале строки приставку sudo (gksudo при запуске программ с графическим интерфейсом), что позволяет выполнить команду от лица администратора компьютера, то есть с наивысшими правами (sudo - Super User Do). Только администратор может устанавливать и удалять программы, а также менять параметры OC и ее конфигурацию.

После первой загрузки системы имеет смысл сразу подключиться к интернету, чтобы обновить файлы ОС до актуальной версии. В правом верхнем углу рабочего стола есть иконка с узнаваемым изображением двух терминалов. При подключении кабеля к разъему Ethernet на плате Raspberry происходит автоматическое подключение к локальной сети. Если щелкнуть мышью по этой иконке, появляется список беспроводных сетей, из которых можно выбрать свою и подключиться к ней, введя соответствующий ключ. При этом вместо терминалов на иконке появится стандартное изображение подключение к беспроводной сети. Именно такая ситуация показана на рисунке выше.

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

Теперь можно подключить, например, беспроводные мышь и клавиатуру по Bluetooth:

Это делается щелчком на иконке с логотипом Голубого Зуба рядом с индикатором подключение к сети в правом верхнем углу экрана. Далее надо нажать Add Device и выбрать ваши устройства из списка найденных беспроводных устройств.

Следует отметить, что при всем удобстве использовании Bluetooth устройств ввода с Raspberry - они не занимают разъемов USB - эти устройства в нашем случае периодически теряли связь с платой. Поэтому для стабильной работы, все же следует использовать USB-мышь и клавиатуру, а так же, в качестве альтернативного варианта, занимающего только один USB-разъем, комплект мыши и клавиатуры с одним приемопередатчиком по радиоканалу.

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

3. Знакомство с GPIO, программированием на Python и запуск светофора

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

Вот схема 40-контактного разъема GPIO:

Как видно, кроме обычных цифровых пинов вход/выход, принимающих или выдающих значения логических 0 и 1, имеются контакты, работающие по распространенным интерфейсам I 2 C, SPI и UART. Также есть возможность генерации ШИМ и прерываний от изменения уровней на входах.

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

Для программирования этого алгоритма воспользуемся встроенной в образ ОС Raspbian интегрированной среды разработки (IDE) на языке Python (Пайтон). Язык Python имеет большое число достоинств, о которых можно почитать в сети, что делает его весьма хорошим инструментом как для начинающих программистов, так и для профессионалов. Это интепретирущий язык, его команды выполняются последовательно, одна за другой. В IDE Python команды можно выполнять, просто вводя их с клавиатуры и нажимая клавишу Enter в конце строки.

Среда разработки программ на языке Python запускается с рабочего стола последовательным выбором Menu - Programming - Python 3 . Далее, в открывшемся окне Python Shell следует нажать File - New File . В открывшемся окне редактора нужно набрать или скопировать следущий текст программы, обращая особое внимания на отступы в тексте, так как для программ на Python они имеют принципиальное значение:

#!/usr/bin/python

import RPi.GPIO as GPIO
from time import sleep

RED_PIN = 36

YELLOW_PIN = 32
GREEN_PIN = 29
BUTTON_PIN = 40

print ("RPi.GPIO init start")
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
print ("RPi.GPIO init end")

print ("GPIO setup")

GPIO.setup(RED_PIN, GPIO.OUT)

GPIO.setup(YELLOW_PIN, GPIO.OUT)
GPIO.setup(GREEN_PIN, GPIO.OUT)
GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)

GPIO.output(RED_PIN, 0)
GPIO.output(YELLOW_PIN, 0)
GPIO.output(GREEN_PIN, 1)

while True:

if inp==0:
for x in range(0, 5):
GPIO.output(GREEN_PIN, 1)
sleep(0.5)
GPIO.output(GREEN_PIN, 0)
sleep(0.5)
GPIO.output(YELLOW_PIN, 1)
sleep(2)
GPIO.output(YELLOW_PIN, 0)
GPIO.output(RED_PIN, 1)
sleep(5)
GPIO.output(YELLOW_PIN, 1)
sleep(1)
GPIO.output(RED_PIN, 0)
GPIO.output(YELLOW_PIN, 0)
GPIO.output(GREEN_PIN, 1)

Первая строка указывает, где в ОС находится интерпретатор Python.

Функция, начинающаяся с print , просто выводит свой аргумент на экран.

Строки, начинающиеся с GPIO.setup , задают режим выхода (OUT ) или входа (IN ) соответствующих пинов, а аргумент pull_up_down=GPIO.PUD_UP включает подтягивающий резистор на входе 40, к которому подключена кнопка. Поскольку программа на Python не имеет стандартного «вечного цикла», как, например в Ардуино, где загруженная в микроконтроллер программа выполняется бесконечно, пока подано питание, оператор while True: осуществляет этот цикл. Нам ведь надо возвращать наш светофор в исходное состояние всякий раз по завершению цикла его работы.

Оператор присвоения inp = GPIO.input(BUTTON_PIN) записывает в переменную inp значение на входе 40. Если кнопка не нажата - это 0, если нажата - 1. Если inp равно 0, то начинается цикл работы светофора:

  • с помощью цикла for 5 раз мигает зеленый светодиод;
  • на 2 секунды зажигается желтый (пауза задается оператором sleep);
  • желтый гаснет, зажигается красный на 5 секунд и т д.

После окончания цикла работы светофора все начинается снова.

Теперь необходимо собрать электрическую схему с помощью проводов с разъемами без пайки:



Короткие ножки светодиодов (это минус) подключаем к земле - контакты 6, 14, 20; длинные (плюс) через резисторы 240 Ом - к контактам 29 (зеленый), 32 (желтый), 36 (красный).

Кнопку подключаем к контактам 39 и 40.

Теперь в редакторе с нашей программой выбираем Run - Run Modul или нажимаем F5, и программа начинает выполняться, ожидая нажатия кнопки.

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

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

Тут нам понадобится терминал, без него обойтись.

Сначала сохраним нашу программу в виде файла svetofor-rpi.py3 в корневом каталоге пользователя /home/pi .

Теперь запустим терминал и после приглашения pi@raspberrypi:~ $ наберем следующую строку: gksudo leafpad /etc/xdg/autostart/Svetofor.desktop .

Тем самым мы вызовем текстовый редактор leafpad и создадим файл Svetofor.desktop в папке автозапуска.

В текстовом редакторе набираем следующее:


Version=1.0
Encoding=UTF-8
Name=Svetofor
Comment=
Exec=sudo python /home/pi/svetofor-rpi.py3
Terminal=false
Type=Application

и сохраняем файл.

Основное в этом файле - строка, начинающаяся с Exec , которая запускает интерпретатор Python на выполнение программы svetofor-rpi.py3 .

Можно проверить, зайдя в папку /etc/xdg/autostart с помощью файлового менеджера, чья иконка в виде двух ящичков расположена в левом углу экрана, появился ли в этой папке файл Svetofor.

Теперь, если выключить питание, отключить монитор, мышь и клавиатуру, и снова включить питание, наш светофор начнет работать в автономном режиме!

Видео работы светофора:

Многие наверняка знают, что подать питание на Arduino от Raspberry Pi не трудно, для этого просто нужен USB шнур. Обратная задача выглядит сложнее, так как у большинства контроллеров Arduino нет USB выхода (Due - исключение). Тем не менее, это возможно сделать с помощью пинов GPIO, и я хочу рассказать о конкретном примере для Arduino Nano V3.0 и Raspberry Pi B rev.2. Помимо самой подачи питания, также расскажу как можно контроллировать это питание используя кнопку и MOSFET транзистор.

Теоретическая возможность
Большинство Arduino-совместимых контроллеров изпользуют 5V пины. Исключение составляет разве что Arduino Due и 3.3V выход из Arduino, но сейчас не об этом. Также известно, что один из способов подать питание на Raspberry Pi - это использование 5V и GND пинов на 26-ти контактном разъеме P1:

Казалось бы, что решение очевидно - надо подсоединить Raspberry Pi к любому из пинов Arduino, и все заработает. Моя попытка сделать это привела к тому, что Raspberry Pi засветил светодиодом PWR, но светодиод ACT так и не зажегся. Причина - очень маленькая сила тока от пинов Arduino (порядка 40-50 мА). Но у Arduino есть отдельный пин 5V, который (согласно ссылке) может выдавать около 400-500 мА. Теперь необходимо проверить, хватит ли такого тока для питания Raspberry.

Для нормального питания Raspberry Pi с двумя подключенными USB устройствами необходимо порядка 700 мА. Каждое USB устройство может потреблять до 140 мА (). Малина может потреблять еще больше тока, если она разогнана (моя - нет). Таким образом, если использовать неразогнанную RPi без USB устройств, то силы тока от Arduino 5V пина должно вполне хватить.

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

Необходимое аппаратное и программное обеспечение
Я использовал следующие «железные» части:
  • Raspberry Pi B rev. 2;
  • Arduino Nano V3.0;
  • кнопка для контроля питания (я использовал кнопку с фиксацией и сигнальным проводом);
  • MOSFET транзистор (у меня оказался IRF530N);
  • Breadboard и несколько проводов.
Для прошивки Arduino понадобится IDE, я использовал версию 1.5.8 BETA, но стабильная 1.0.6 тоже подойдет. Также понадобится моя маленькая библиотека для PowerButton (ссылка в конце статьи в разделе про утилиты).
Схемы
Схема подключения выглядит так:

Принципиальная схема так:

Пояснения к схемам:

  1. D2 подсоединен к пину SIG у кнопки.
  2. D4 подсоединен к пину VCC у кнопки.
  3. D5 подсоединен к затвору MOSFET.

Cоединение c D2 пином не случайно: библиотека для кнопки использует прерывания, а у Arduino Nano только пины D2/D3 предназначены для этих целей (проверить какие пины на вашей Arduino поддерживают прерывания можно ).

Исходный код программы для Arduino
#include

#define POWER_PIN_SIG 2
#define POWER_PIN_VCC 4
#define POWER_FET_GATE 5
#define POWER_PIN_INT 0

PowerButtonSwitch pbs;

void onPowerOn() {
Serial.println ("Power On" ) ;
digitalWrite(POWER_FET_GATE, 1 ) ; // Открываем затвор (gate)
}

void onPowerOff() {
Serial.println ("Power Off" ) ;
// Закрываем затвор (gate)
}

void setup() {
Serial.begin (9600 ) ;

// Вывод сигнала от Arduino к затвору MOSFET (gate)
pinMode(POWER_FET_GATE, OUTPUT) ;
digitalWrite(POWER_FET_GATE, 0 ) ;

// Начальная настройка кнопки питания
pbs.setupPowerButton (POWER_PIN_SIG, POWER_PIN_VCC, POWER_PIN_INT) ;

// Считываем текущее значение
// Если есть сигнал от кнопки,
// включаем Raspberry Pi
int st = pbs.getSwitchStatus () ;
if (st == POWER_ON) {
onPowerOn() ;
}

// Добавляем обработчики событий
pbs.onPowerOn (onPowerOn) ;
pbs.onPowerOff (onPowerOff) ;
}

void loop() {
// Пустой цикл
delay(1000 ) ;
Serial.println ("No actions" ) ;
}

Большинство действий на себя берет библиотека, так что код очень прост.

Тестирование решения
Короткое видео с тестированием:

Как видно, визуально все работает. Но все-таки надо проверить напряжение между пинами TP1/TP2 (методика ). У меня получилось значение ~4.6V, рекомендуемое значение больше 4.75V.
Заключение
Несмотря на то, что все работает, все-таки есть подозрение что при подключении периферии тока от 5V пина Arduino будет недостаточно. MOSFET и кнопка работают отлично в паре, такая связка может пригодится для дальнейших проектов.

Утилиты и библиотеки, использованные для написания:

  • Fritzing : использовалась для рисования схем, доступна .
  • собственно библиотека для PowerButton : можно взять с GitHub .

Так как это мой первый пост, отзывы и комментарии будут очень полезны.

Похожие статьи