Керування лініями GPIO на Raspberry Pi. Raspberry Pi: керування світлодіодом

Малюнок 1. Блокова діаграма апаратної частини системи

Опис процесу монтажу апаратної частини системи займає багато часу, але досить простим. В першу чергу слід з'єднати блок живлення зі настінною розеткою за допомогою подовжувача, відрізавши розетку подовжувача. Зачистіть дроти та закріпіть їх за допомогою гвинтів у терміналах блоку живлення. Далі з'єднайте Raspberry Pi з блоком живлення, відрізавши роз'єм типу A від кабелю USB і з'єднавши дроти з відповідними висновками блока живлення, і вставте роз'єм micro USB у роз'єм живлення RPi. Після цього слід зачистити обидва кінці двох жил гнучкого кабелю і з'єднати їх з відповідними терміналами з позначеннями GND і JDVcc блоку живлення та реле. Нарешті, слід видалити джампер, що з'єднує висновок із позначенням JDVcc з виводом із позначенням Vcc. Якщо ви не видалите цей дампер, на призначені для напруги 3.3 У висновки RPi буде подано напругу в 5 В, яке з високою ймовірністю виведе комп'ютер з ладу.

Тепер, коли живлення підведено до всіх терміналів, слід з'єднати лінії IN1-IN8 модуля реле з відповідними висновками гнізда GPIO за допомогою гнучкого кабелю таким чином, як показано на Рисунку 2. Поданий у цій статті код був розроблений для випадку, коли висновки IN1-IN7 з'єднані з висновками GPIO1-GPIO7. Якщо ви вирішите поєднати дані висновки по-іншому, вам доведеться модифікувати відповідним чином ваш код.

Схема розташування висновків роз'єму GPIO Raspberry Pi наведено на Рисунку 2. На порти введення-виведення Raspberry Pi подається напруга 3.3 В, а модуль реле працює з напругою 5 В. Однак, реле ізольовані від висновків GPIO Raspberry Pi за допомогою оптопару. На оптопари може подаватися напруга 3.3 з виведення Vcc. На висновок Vcc модуля реле може бути подана напруга 3.3 з роз'єму GPIO Raspberry Pi. Переконайтеся, що ви прибрали джампер, що замикає висновки Vcc та JDVcc модуля реле.На висновок JDVcc має подаватися напруга 5 для коректної роботиреле. Розглянутий модуль реле розмикає контакти в активному стані. Це означає, що ви повинні заземлити термінали IN1-IN8 для включення реле.

Рисунок 2. Схема розташування висновків роз'єму GPIO Raspberry Pi

Попередження: Виявляйте особливу обережність при з'єднанні апаратних компонентів системи. Наслідки ураження електричним струмом можуть виявитися фатальними!

Обріжте залишки кабелів подовжувачів з вилками та закріпіть дроти у відповідних терміналах модуля реле. Також підключіть дроти кабелю, який згодом зв'язуватиме систему зі стінною розеткою, до відповідних терміналів модуля реле. Уся апаратна частина системи може бути розміщена в пеналі чи аналогічному контейнері. Подумайте про корпус заздалегідь, щоб після закінчення роботи над апаратною частиною системи уникнути необхідності від'єднання та повторного приєднання проводів до терміналів модуля реле. Крім того, я вставив кілька затискачів для кабелів, що закріплюються за допомогою гвинтів, у відповідні отвори корпусу для обмеження натягу кабелів (Малюнок 3).

Малюнок 3. Монтаж апаратної частини системи

Програмне оточення

Я розпочав створення свого програмного оточення з встановлення образу операційної системи Raspbian. Перед початком встановлення образу операційної системи вам потрібно підготувати дисплей, що підтримує передачу зображення по HDMI, клавіатуру та мишу з роз'ємами USB, а також мережевий кабель для з'єднання із системою за протоколом Ethernet. Також ви можете встановити з'єднання із системою за допомогою адаптера Wi-Fi. Створіть завантажувальну SD-картудля першого завантаження системи відповідно до інструкцій, наведених на ресурсі http://www.raspberrypi.org/documentation/installation/installing-image . У процесі першого завантаження системи установник здійснить налаштування операційної системи та розмістить дані з її образу на всьому доступному просторі картки пам'яті. Після першого завантаження ви повинні мати можливість входу в систему за допомогою стандартних даних облікового запису користувача (ім'я користувача "pi" та пароль "raspberry").

Оновлення системи є розумною дією, яка має виконуватися відразу після успішного входу в систему. Образ операційної системи Raspbian базується на пакетах програмного забезпечення дистрибутива Debian і використовує aptitude як менеджер пакетів програмного забезпечення. Крім того, вам знадобляться пакети програмного забезпечення з іменами python, pip і git. Я також міг би порекомендувати встановлення Webmin для спрощення процесу адміністрування системи. Інструкції з встановлення Webmin наведено на сайті http://www.webmin.com/deb.html (дотримуйтесь рекомендацій, наведених у розділі "Using the Webmin APT repository"):

Sudo apt-get update && sudo apt-get dist-upgrade sudo apt-get install python python-pip git git-core

Після цього вам доведеться налаштувати з'єднання за допомогою адаптера Wi-Fi. Ви можете знайти докладні інструкціїна ресурсі http://www.raspberrypi.org/documentation/configuration/wireless. Я рекомендую використовувати варіант wicd-curses. на даному етапіви можете змінити параметри налаштування Raspberry Pi за допомогою команди sudo raspi-config. Після введення цієї команди ви отримаєте доступ до зручного графічного інтерфейсу, який дозволить вам встановити значення таких параметрів, як обсяг оперативної пам'яті, що поділяється з графічним процесором, параметри швидкодії центрального процесора, режим використання графічного інтерфейсу в процесі завантаження та інших.

Іншим корисним інструментомє інтегроване середовище розробки Cloud 9 IDE. Cloud 9 IDE дозволить вам редагувати свій код на рівні Raspberry Pi за допомогою веб-браузера. Це інтегроване середовище розробки також надасть вам доступ до інтерфейсу командного рядка в рамках веб-браузера. Ви можете розробляти та виконувати будь-який код, не залишаючи свій веб-браузер. Інтегроване середовище розробки Colud 9 IDE потребує наявності певної версіїфреймворку NodeJS. Використання непідтримуваної версії фреймворку спричинить постійні аварійні завершення роботи сервера Cloud 9, які можуть привести будь-якого користувача до зневіри. Інструкції з встановлення фреймворку NodeJS на комп'ютер Raspberry Pi наведено на сайті http://weworkweplay.com/play/raspberry-pi-nodejs .

Програмне забезпечення

Я вирішив створювати користувальницький інтерфейс своєї системи з використанням технологій HTML5, CSS3 та JavaScript. Комбінація трьох згаданих технологій є потужним інструментомдля створення інтерфейсів користувача. Мова програмування JavaScriptдозволяє використовувати прості API для взаємодії з серверами. Крім того, існує безліч бібліотек для мови програмування JavaScript, таких як JQuery, Bootstrap та інших, з яких можна вибрати найбільш підходящу. HTML5 надає API WebSocket, що дозволяє веб-браузеру підтримувати з'єднання в робочому стані та здійснювати обмін даними за допомогою цього з'єднання. Ця обставина робить API WebSocket особливо корисним для реалізації динамічних програм та програм для потокової передачі даних, таких, як ігри та чати. Каскадні таблиці стилів CSSкорисні для стилізації різних елементів сторінки HTML. У разі коректного використання вони дозволяють створювати динамічні інтерфейси користувача шляхом зміни стилів елементів сторінок при настанні тих чи інших подій. Для даного проектуя вибрав фреймворк JQuery для обробки подій, Bootstrap CSS для розміщення кнопок у формі сітки та мову програмування JavaScript для реалізації механізмів обміну даними на основі API WebSocket.

Бібліотеки

Серверний додаток, який працює на рівні Raspberry Pi, повинен керувати станом висновків роз'єму GPIO плати Raspberry Pi. Воно також має надавати інтерфейс HTTP для передачі даних графічного інтерфейсу та інтерфейс WebSocket для передачі повідомлень з командами та даними стану. Готового до встановлення серверної програми з такими специфічними функціями просто не існує, тому я прийняв рішення про створення власної реалізації сервера з використанням мови програмування Python. Для спрощення розробки описаної серверної програми з використанням мови програмування Python доступні модулі з реалізаціями методів роботи з інтерфейсом GPIO Raspberry Pi, для створення сервера HTTPта для роботи з інтерфейсом WebSockets. Оскільки всі перераховані модулі призначені для виконання поставлених завдань, мені довелося розробити мінімальний обсяг коду.

Однак, згадані модулі не включені до комплекту постачання інтерпретатора Python і повинні встановлюватись окремо. Насамперед вам знадобиться модуль для керування станом висновків роз'єму GPIO Raspberry Pi. Найпростіший спосіб зміни стану висновків даного роз'єму полягає у використанні бібліотеки RPi.GPIO, яка доступна за адресою https://pypi.python.org/pypi/RPi.GPIO . Ви можете встановити відповідний модуль за допомогою наступної команди:

Sudo pip install RPi.GPIO

Робота з модулем RPi.GPIO не пов'язана з будь-якими складнощами. Ви можете знайти приклади використання цього модуля за адресою. На першому етапі роботи з модулем необхідно здійснити імпорт його коду в код проекту. Після цього вам доведеться вибрати режим роботи. Як ідентифікатор режиму роботи може використовуватися константа GPIO.BOARD, або константа GPIO.BCM. Вибір режиму роботи зумовлює використання чіпа BCM або висновків роз'єму вводу-виводу під час посилань на номери висновків у всіх наступних командах. Далі слід вказати, чи використовуються висновки з роз'єму для введення або виведення. Тепер можна використовувати висновки цього роз'єму за призначенням. Нарешті вам доведеться здійснити виклик методу cleanup() для скидання стану висновків роз'єму GPIO. У Лістингу 1 показано найпростіший прикладвикористання модуля RPI.GPIO.

Лістинг 1. Використання модуля RPi.GPIO

Import RPi.GPIO as GPIO # імпортування коду модуля в код проекту GPIO.setmode(GPIO.BOARD) # вказівка ​​на те, що нумерація використовується для позначення висновків роз'єму GPIO.setup(0, GPIO.IN) # вказівка ​​на те, що канал 0 використовуватиметься для введення GPIO.setup(1, GPIO.OUT) # вказівка ​​те що, що канал 1 використовуватиметься виведення var1=GPIO.input(0) # читання стану каналу 0 GPIO.output(1, GPIO.HIGH) # встановлення логічної одиниці на каналі 1 GPIO.cleanup() # скидання стану висновків роз'єму GPIO.

7. Знайомство із засобами програмування, встановленими на Raspberry Pi

Для вивчення програмування в Raspbian ОС встановлено пакети Python, Scratch, Node-RED, SonicPi і Wolfram Mathematica. Саме заради того, щоб зробити максимально доступним та зручним для всіх вивчення програмування та фізичного комп'ютера проект Raspberry Pi та створювався кілька років тому! Так що ж уявляють у трьох словах встановлені на RasPi засоби розробки?

Python представляти не треба - це найпопулярніша в університетському та науковому середовищі мова програмування. Для роботи з датчиками через GPIO для Python написано та встановлено бібліотеку. Взагалі кажучи, через інструмент pip можна доустановити тисячі бібліотек для Python буквально для вирішення всіх практичних завданьфізичного комп'ютингу та наукових обчислень.
Крім самої мови Python версій 2 і 3 з середовищем розробки IDLE, у Raspbian ОС встановлена ​​спеціальна версія популярної ігри Minecraft Pi та бібліотеки на Python для керування грою. (Вступ див. і )
Node-RED – візуальний редактор від IBM з відкритим вихідним кодомдля створення "інтернету речей", що дозволяє практично без програмування, з'єднанням готових модулів "збирати" досить складні програми для систем типу "розумний дім". (Вступ див. та ).
Мова Scratch - інструментарій візуального програмування, що дозволяє дітям створювати анімації та ігри методом Drag&Drop. (Вступ див. і )
Унікальна у своєму роді мова SonicPi дозволяє програмувати музику. (Вступ див.)
Пакети Wolfram та Mathematica – найбільш повна система для сучасних технічних обчислень у світі. Вона буде незамінним помічникомдля технічних обчислень як учнів шкіл, і студентів ВУЗів. Хоча продукт для Windows платний, на Raspbian ОС встановлена ​​повнофункціональна безкоштовна версія.
(Вступ див. і )
Крім того, у Raspbian ОС за замовчуванням встановлено Node.js, Perl і Ruby.
Для зручної роботи з кодом на Raspberry Pi встановлено один з найкращих редакторівз підсвічуванням синтаксису та середовище розробки Geany.

8. Відновлення роботи Raspberry Pi після збоїв


Може виникнути ситуація, коли несумісність знову встановленого апаратного або програмного забезпечення спричинить помилку під час запуску системи. Напірмер, хоча в налаштуваннях Raspberry Pi 3 є пункт Open GL, як показала практика, включення цієї опції викликає помилку завантаження системи.
Як показала практика, Raspberry Pi має кілька можливостей відновлення після збою завантаження.

1) Відкат до останньої резервної копії microSD-картки за допомогою Win32DiskImager.
Робіть частіше образи стабільної версії системи програмою Win32DiskImager і можете бути впевнені, що у разі збою система буде відновлена ​​за лічені хвилини.

2) Редагування конфігураційного файлу config.txt з microSD-карти на комп'ютері за допомогою кард-рідера.
Наприклад, у разі збою з Open GL треба закоментувати символом # останній рядок "dtoverlay=vc4-kms-v3d" у файлі config.txt і система запуститься нормально.

3) Віддалене підключення до Raspberry Pi через мережу через SSH-термінал.
У багатьох випадках, наприклад, у разі того ж збою завантаження при включенні Open GL, після завантаження ядра системи встигає запуститися SSH-сервер і продовжує роботу у фоновому режимі. Можна зайти в консоль Raspberry Pi через SSH-термінал, відредагувати файли конфігурації (boot/config.txt), або запустити raspi-config і відключити збійні опції.

4) Чищення системи.

Видаліть кеш пакетів:
sudo apt-get clean
Видаліть осиротілі пакети:
sudo apt-get autoremove
Оновіть список пакетів:
sudo apt-get update
Виправте залежності:
sudo apt-get -f install
Переустановіть пакет, якщо інсталяція пакета була перервана
sudo apt-get install --reinstall ім'я_пакету

9. Віддалене керування Raspberry Pi (SSH/VNC)



Як і будь-який Unix-системою, Raspberry Pi можна керувати віддалено кількома способами.
Найпростіший - управління в консолі по протоколу SSH. Щоб це стало можливим, необхідно зайти в налаштування Raspberry Pi (sudo raspi-config), вибрати пункт меню Interfacing options, у наступному вікні вибрати пункт SSH і підтвердити включення сервера SSH при запуску. Рекомендується відразу змінити пароль за умовчанням користувача "pi" з "raspberry" на якийсь інший, що містить не менше 8 символів в англійській розкладці.
Потім можна скачати на іншому комп'ютері безкоштовний SSH-клієнт PuTTY, запустити його і ввести в рядок "Host Name (or IP address)" локальна IP-адреса Raspberry Pi. У консолі з'явиться запит на логіна, а за ним – пароля. Якщо все введено правильно, з'явиться вітання Raspberry Pi та зелений курсор введення команд. Через SSH-термінал можна встановлювати та видаляти програми, копіювати, переміщати та видаляти файли, виконувати консольні команди системи та скрипти (BASH, Python, Perl...), працювати з конфігураційними файлами Raspberry Pi. Словом, робити все різноманіття операцій, доступних у консолі Unix-систем. Багато речей зручніше робити в консольних редакторах типу файл-менеджера MC, які також працюють через SSH-термінал.
Крім термінального доступу до консолі, Raspberry Pi вбудована можливість повноцінного управління в графічному інтерфейсі. Для цього на Raspberry Pi встановлена ​​безкоштовна версія VNC-сервера. Включити його автозапуск можна там-таки, де раніше ми включили SSH-сервер. Треба вибрати наступний пункт меню "Iinterfacing options" - "VNC" і підтвердити включення сервера. Для повноцінного доступу до Raspberry Pi необхідно буде завантажити безкоштовний VNC-viewer , запустити його, а також як у випадку з SSH ввести локальну IP-адресу Raspberry Pi. Пройшовши процедуру авторизації, ви потрапите на Raspberry Pi, ніби перебували перед підключеним до нього дисплеєм, натискали на клавіатуру і клацали мишею. Швидкість роботи у VNC-клієнті лише трохи повільніша, ніж на самому Raspberry Pi. Меню відкриваються майже з тією ж швидкістю, тільки графічні файли при відкритті промальовуються не миттєво, з невеликою затримкою в секунди.
При віддаленому підключеннідо Raspberry Pi за SSH та VNC необхідно тільки, щоб пристрій був підключений до локальної мережіта мережі живлення. Клавіатура, миша та монітор при цьому можуть бути і не підключені до Raspberry Pi. Це зручно у разі налаштування "малинки" як веб-сервер, або сервер IoT (сервер управління датчиками "розумного будинку").

До речі, за замовчуванням розміри віртуальний екрану VNC занадто малі – всього 640х480 пікселів. Наведу мій маленький "хак" з налаштування комфортної роздільної здатності екрану (1024х768) при віддаленому підключенні за VNC:

Відкриємо для редагування файл конфігурації Raspberry Pi:
sudo nano /boot/config.txt
Розкоментуємо (видалимо зліва символ #) і злегка підправимо наступні рядки:
hdmi_force_hotplug=1
hdmi_group=2
hdmi_mode=16

10. Встановлення комплекту ПЗ інтернет-розробника LAMP

Оскільки не тільки я вважаю, що за інтернетом - майбутнє, на комп'ютері юного програміста має бути встановлений пакет програм, які забезпечують можливість навчання основ інтернет-програмування, створення та адміністрування вебсайтів. Загальновизнаним стандартом середовища інтернет-розробника в ОС Linux є комплект програм, що стоятиме з вебсервера Apache, СУДБ MySQL та мови програмування PHP(LAMP). Для зручності адміністрування баз даних також рекомендують встановити програмне забезпечення PHPMyAdmin (всі програми поширюються безкоштовно). Дотримуючись покрокових інструкцій з офсайту Raspberry Pi, за півгодини LAMP та сама популярна системауправління сайтами (CMS) Wordpress були встановлені на "малинку" та налаштовані для роботи. Наводжу покрокову інструкцію з поясненнями, щоб цей процес не зайняв більше часу, ніж у мене.


1. Встановлення сервера Apache2 (<1 мин)
sudo apt-get install apache2 -y
Перевірка роботи Apache
links2 http://192.168.0.100
Перегляд папки сайту
cd /var/www/html
ls -al

2. Встановлення PHP 5 (1 хв)
sudo apt-get install php5 libapache2-mod-php5 -y
sudo service apache2 restart
Створення тестової сторінки
sudo rm index.html
sudo nano index.php

Перевірка роботи PHP
links2 http://192.168.0.100

3. Встановлення mysql 5 (3 хв)
sudo apt-get install mysql-server php5-mysql -y
sudo service apache2 restart

Надання прав користувачу Apache
sudo chown -R www-data: .

Створення бази MySQL
mysql -uroot -ppassword
mysql> create database wordpress;

Увімкнення Apache mod rewrite
sudo a2enmod rewrite

Увімкнення можливості вказувати налаштування в.htaccess
sudo nano /etc/apache2/sites-available/000-default.c onf

Додамо наступний код

< VirtualHost *:80 >
< Directory "/var/www/html" >
AllowOverride All
< /Directory >

4. Встановлення PHPMyAdmin (3 хв)
sudo apt-get install phpmyadmin

5. Встановлення Wordpress

Завантаження Wordpress

cd /var/www/html/

Розпакування Wordpress

sudo tar xzf wordpress-4.7.2-ua_UA.tar.gz

sudo mv wordpress/* .

sudo rm -rf wordpress-4.7.2-ua_UA.tar.gz

Встановлення та налаштування Wordpress
Заходимо в броузері на вашу поточну адресу, наприклад http://192.168.0.100 , або за адресою http://localhost .
У відповідних полях вказуємо ім'я, адресу (localhost), логін та пароль користувача створеної вами раніше бази даних, назву сайту, логін та пароль адміністратора сайту (не використовуйте прості іменатипу "root" і "admin", придумайте пароль не коротше 8 символів, що містить цифри та літери в різних регістрах), а також ваш e-mail.
Через кілька секунд після підведення введення даних Wordpressвстановиться та вже буде готовий до роботи! Комплекти необхідних плагінів, таких як cyr3lat, wp-edit, hyper-cache, wp-db-backup тощо можна встановити пізніше, просто ввівши їх назви у формі пошуку сторінки Plugins консолі Адміністратора Wordpress.
Тепер Raspberry Pi готовий стати домашнім веб-сервером розробника інтернету.

11. Ознайомлення з мовою Python

Об'єктно-орієнтована мова програмування Python, що інтерпретується, з'явилася наприкінці 80-початку 90-х років у центрі математики та інформатики в Нідерландах завдяки зусиллям Гвідо ван Россума.
Спочатку мова була орієнтована на підвищення продуктивності розробника та читання коду.
Python характеризується мінімалістичним синтаксисом при високій функціональності, підтримує всі основні парадигми програмування, підтримує динамічну типізацію, автоматичне керуванняпам'яттю, обробку винятків, багатопоточність обчислень, модульність.
В даний час Python активно використовується як універсальне середовище для наукових розрахунків. У багатьох популярних програмах тривимірної графіки, таких як Blender, мова Python використовується для розширення стандартних можливостейпрограм.
Python використовується в багатьох великих компаніях, таких як Dropbox, Google, Facebook, Instagram.
Особливістю синтаксису мови Python є виділення блоків коду за допомогою відступів, тому Python відсутні операторні дужки begin/end і фігурні дужки. Також у Python відсутні явні завершальні символи кінця рядків, такі «;» як у Perl.
Однією із привабливих сторін Python стала багата бібліотека стандартних модулів. Крім стандартної бібліотеки існує безліч прикладних бібліотек для Python в різних областях. Для Python створені програмні каркаси для розробки веб-застосунків, найпопулярнішим з яких є Django.
З Python поставляється бібліотека tkinter для створення кросплатформових програм з графічним інтерфейсом. Також для Python є розширення для всіх основних бібліотек графічних інтерфейсів.
Існують розширення Python для створення ігор (Pygame), роботи з мультимедіа, 3D-моделювання, обробки графіки, побудови графіків, астрономічних обчислень (Astropy).
Встановлення та оновлення пакетів Python здійснюється через інтерфейс PyPI (Python Package Index). Модулі задіяні на початку програм командою import.
Спочатку Python передбачався як основна мова програмування на Raspberry Pi. Невипадково devboard має символічне закінчення «Pi» у назві.
Для роботи із зовнішніми датчиками, що підключаються до Raspberry Pi для Python, написано та встановлено в Rasbian кілька бібліотек, таких як RPi.GPIO.
Разом з Python на Raspberry Pi встановлюються стандартний інтерфейсрозробки та тестування додатків IDLE та зручний редактор Geany.
В Інтернеті є безліч посібників зі знайомства з мовою Python і готових прикладів для створення IoT-додатків на Raspberry Pi, зрозумілих навіть школярам молодших класів.
Треба враховувати, що більшість прикладів в Інтернеті написані для версії Python 2.х, не сумісної з 3.Х. Тому, на Raspberry Pi встановлені обидві версії Python. Також разом з Python 3.Х поставляється програма (скрипт) "2to3", що конвертує код з версії 2.х в 3.Х.

У результаті, прочитавши за вихідні пару онлайн-посібників і одну розумну книжку в електронному вигляді англійською, я написав невелику програму, яка підраховує частоту найпопулярніших слів на сторінці сайту із зазначеним URL і пізніше "прикрутив" до неї візуальний інтерфейс на основі бібліотеки Tkinter. Так легко, швидко та приємно програми з графічним інтерфейсом я ще не створював...

(Введення в основи мови Python див. та )

12. Робота з Python і GPIO, блимання світлодіодом

Після знайомства з основами синтаксису та базового наборукоманд мови Python, вирішальним кроком на шляху фізичного комп'ютера є вирішення, начебто, простого завдання: «помигати світлодіодом».
Саме з цього кроку багато школярів, студентів та дорослих «гіків» всього світу починали свій шлях в IoT-програмуванні.
Для цього мені в першу чергу потрібно придбати кілька радіодеталей: кілька пар резисторів від 100 до 300Ом (як пропонується в посібниках) і кілька світлодіодів різного кольору (я взяв червоний, синій і білий). У ході пошуку відповідного радіоларька з'ясувалося, що радіодеталями в моєму місті торгує лише одна, конкретна точка. Вартість деталей виявилася невисокою (3-5 рублів за штуку).
При збиранні простенької схеми, що складається з світлодіода та резистора, я виявив, що 40-піновий кабель до моєї монтажної плати (breadboard) не маркований червоною смугою по краю, а складається з різнокольорових кабелів. В інтернеті схеми підключення для такого кабелю до breadboard і Raspberry Pi 3 відразу я не знайшов. Довелося відкрити схему GPIO і телефонувати кабелю цифровим тестером, щоб зрозуміти, як його під'єднувати.
Також виявилося, що «гребінка» для підключення кабелю до breadboard у мене не має відводів для виведення на лінії живлення breadboard, тому довелося підключити Ground на гребінці до мінуса на breadboard.
Зібравши схему таким чином, щоб довгий контакт (+) світлодіода був підключений до 21 порту GPIO, а короткий через резистор опором в 100 Ом до «землі» (-), запустив Raspberry Pi 3 і підключився до нього по VNC.
Створив в IDLE3 програму миготіння світлодіодами flashpi.py, описану на сайті http://edurobots.ru/, та зберіг її в папці /home/pi."
Запустив програму за допомогою F5 в IDLE3 (можна також запустити програму командою sudo python3 flashpi.py в LXTerminal) і... світлодіод не загорівся.
Перевіривши всі контакти та правильність складання схеми, зрозумів, що справа не в апаратній, а в програмній частині системи. З прикладу в одній з електронних книжок Raspberry Pi 3 з'ясувалося, що замість команди
GPIO.setmode(GPIO.BOARD) треба ініціалізувати порти командою GPIO.setmode(GPIO.BCM). Після правки коду та запуску програми, слідом за натисканням клавіші Enter світлодіод, нарешті, спалахнув яскравим світлом!
Повторне натискання клавіші Enter вимикало світлодіод. Натисканням будь-якої іншої клавіші здійснювався вихід із програми та коректне завершення роботи з портами GPIO.
Ось код робочої програми("__" замінюємо на прогалини - це необхідні відступи в Python):

З циклу закриття роботи з GPIO

Ніколи в житті я так не радів світлодіоду, що горить! Та й давно так не тішився взагалі! Як це, сподіваюся, рано чи пізно зробили 10 мільйонів покупців Raspberry Pi, я таки "помигав світлодіодом"! Причому, «поморгав» програмно!

Висновок - напуття молодим кібернетикам

Сподіваюся, що мій довгий, але захоплюючий шлях завдовжки 3 місяці, від рішення купити одноплатний комп'ютер Raspberry Pi 3 до програмного «блимання світлодіодом», був пройдений недаремно.
Він познайомив мене з новим світом Unix та фізичного комп'ютера, а заразом підготував покрокове керівництводля всіх, хто хоче увійти до нього (насамперед — для викладачів шкіл та старшокласників) та створив платформу для подальшого освоєння фізичного комп'ютера, веб-програмування та системного адміністрування. на базі Raspberry Pi 3 вартістю трохи більше 2 УРАХУВАННЯМ. стало можливим створеннядомашнього веб-сервера та мультимедіа-центру, цікавих рішеньз автоматизації виконання рутинних завдань та складніших IoT-систем, у тому числі, рішень для концепції «Розумний дім».
Особисто для мене в мої 43 роки було цікавою та корисною пригодою освоювати незнайому мені мову програмування Python і нову, не схожу на поширені у нас операційну систему.
Комп'ютер Raspberry Pi 3, налаштований та перевірений у роботі, разом з breadboard, радіодеталями та комплектом з 16 датчиків я спочатку планував подарувати дочці на День народження для використання як навчальний ПК та перспективний дослідницький інструмент у гуртку інформатики місцевої гімназії. Домовився з учителем інформатики про надання допомоги з придбання та впровадження Raspberry Pi у позаурочних заняттях з інформатики серед зацікавлених хлопців та олімпіадників. Сподіваюся, як і мені, Raspberry Pi дасть моїй дочці та хлопцям у гімназії потужний імпульс у навчанні та розвитку, розкриє нові можливості зміни себе та навколишнього світу на краще за допомогою сучасних технологій.

У цій статті ми розглянемо управління входами/виходами (GPIO) мікрокомп'ютера Raspberry Pi через Web-інтерфейс. Це дає можливість керувати різними пристроями через Інтернет.

Особливості цього проекту:
- серверна програма, запущена на Raspberry Pi для читання значень GPIO
- Використання MySQL базиданих для зберігання стану GPIO
- використання веб-сервера Apache2 для контролю GPIO через веб-браузер

Отже, перше, що вам необхідно встановити на Raspberry Pi, це:
- Apache веб-сервер
- PHP5
- MySQL сервер
- phpMyAdmin (є російська версія)

Т.к. мікрокомп'ютер Raspberry Pi працює на Linux-системах, то в інтернеті повно описів російською мовою, як встановлювати всі ці пакети. Тому зациклюватись на цьому ми не будемо. Є непогана інструкція стосовно Raspberry Pi, але на англійською: почитати

Повноцінний root-доступ
Для отримання повного rootдоступу необхідно в терміналі набрати команду sudo -iяка перекладає користувача в сесію під root-ом.

Якщо ви вже увімкнули root еккаунт, то далі можете пропустити, якщо ні, то після команди sudo -i необхідно задати пароль користувачеві root, робиться це командою passwd root.Після цього введіть 2 рази пароль. Тепер можна закрити SSH-сесію та увійти заново вже під root'ом.

Налаштування бази даних

Для спрощення роботи всі дії з MySQL будемо робити з оболонки phpMyAdmin.

Для початку скачайте даний SQL файл. Він містить команди для створення бази даних, таблиць та їхнього вмісту. Потім увійдіть у phpMyAdmin і у вкладках виберіть Import (Імпорт). виберіть файл gpio.sqlна диску і натисніть кнопку Go для імпортування. Після цього phpMyAdmin створить БД, таблиці та дані в них.

Вбиваємо User name (Ім'я користувача) gpio(бажано, щоб воно збігалося з ім'ям бази даних), Host - localhost, та 2 рази пароль.

Потім переходимо до списку користувачів, знаходимо нашого та натискаємо посилання Edit Privileges (Редагувати права). У вкладці Database-specific privileges у списку, що випадає, знаходимо і вибираємо нашу БД gpio. А потім натискаємо Go.

Натискаємо Check All (Вибрати все), щоб призначити користувачеві gpio усі права на БД gpio.

На цьому встановлення та налаштування БД завершено.

Шелл скрипт

Завантажте скрипт, ввівши такі команди:
sudo -i
wget http://raspberrypi-gpio.googlecode.com/files/GPIOServer.sh

Після того, як скрипт скачається, виконайте команди встановлення прав на файл та редагування скрипту в редакторі nano:
chmod +x GPIOServer.sh
nano GPIOServer.sh

У рядки mysqlusername="USERNAME HERE"і mysqlpassword="PASSWORD HERE"ви повинні вписати ім'я користувача (gpio) та пароль до нього.

Потім збережіть зміни у файлі, натиснувши ctrl+x, а потім y та введення.

Налаштування Web-сторінки

Тепер потрібно завантажити файли для роботи веб-інтерфейсу. Увійдіть під root і виконайте такі команди:
wget http://raspberrypi-gpio.googlecode.com/files/control.php
wget http://raspberrypi-gpio.googlecode.com/files/off.jpg
wget http://raspberrypi-gpio.googlecode.com/files/on.jpg

Після того, як ці файли завантажуються, наберіть:
mv control.php /var/www/control.php
chmod 755 /var/www/control.php
mv off.jpg /var/www/off.jpg
chmod 755 /var/www/off.jpg
mv on.jpg /var/www/on.jpg
chmod 755 /var/www/on.jpg

Цими командами ми перемістимо файли в папку www і встановимо відповідні права.

Знаходимо наступні рядки:
$MySQLUsername = "USERNAME HERE";
$MySQLPassword = "PASSWORD HERE";

та вписуємо ім'я користувача та пароль.

Відкриваємо у браузері файл control.php (у мене повний шлях виглядає як http://raspberryPi/control.php)
Якщо запитає авторизацію, то:
Username: admin
Password: gpio

Коли ви купуєте Raspberry Pi, то ви купуєте тільки друковану плату, яка приходить навіть без джерела живлення та операційної системи. Ця стаття призначена для того, щоб дати вам уявлення про налаштування Raspberry Pi, щоб можна було почати його використовувати.

Raspberry Pi є мінікомп'ютером, який має багато портів, які можуть бути використані для підключення різних периферійних пристроїв. Ви можете підключити окремий монітор через HDMI порті клавіатуру і мишу через USB роз'єми, також Raspberry Pi є Ethernet порт, тому ви можете використовувати інтернет у своїх проектах на Raspberry Pi.

У цьому посібнику ви пройдете через ряд кроків, які дозволять вам підключити Raspberry Pi до вашого ноутбука або настільного ПК, що унеможливлює використання окремих пристроїв для Raspberry Pi.

Обладнання та програмне забезпечення

  • 1 x;
  • 1 x кабель Ethernet;
  • 1 x ноутбук чи стаціонарний ПК;
  • 1 x SD картка ( мінімальний розмір 4 ГБ);
  • 1 x кабель Micro USB (щоб запитати Raspberry Pi).

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

  • Raspbian OS: коли ви купуєте Raspberry Pi, у вас є можливість (у деяких магазинах) купити встановлену на SD карту операційну систему, або просто завантажити zip-файл з https://www.raspberrypi.org/downloads/ , який містить образ Raspbian OS, щоб записати його на вашу карту SD;
  • SDFormatter: SD Card Association має дуже гарне ПЗ, яке може бути використане для форматування вашої SD карти. Відвідайте https://www.sdcard.org/downloads/formatter_4/index.html та завантажте SDFormatter для вашої операційної системи;
  • Win32DiskImager: щоб записати Raspbian OS на вашу SD карту, вам знадобиться корисна утиліта Win32DiskImager. Завантажити її можна тут;
  • : Вам буде необхідно визначити IP адресу Raspberry Pi, коли підключіть його комп'ютера. Просто скачайте цю програму http://www.advanced-ip-scanner.com/;
  • PuTTy: PuTTy - це SSH клієнт, який буде використовуватися для підключення до Raspberry Pi. Ви можете завантажити його тут http://www.putty.org/;
  • VNC: і останнє це сервер VNC. Завантажити його можна тут https://www.realvnc.com/download/.

Коли ви завантажуєте все це програмне забезпечення, розпакуйте та встановіть його.

Встановлення операційної системи

  1. Вставте картку SD в картридер і перевірте, яка літера була присвоєна диску.
  2. Відкрийте Win32DiskImager, можливо знадобиться запустити його від імені адміністратора.
  3. Виберіть образ розпакованого Raspbian OS.
  4. Виберіть літеру, присвоєну вашій SD карті, у списку пристроїв, що випадає. Переконайтеся, що вибрано правильну букву диска, щоб не пошкодити дані на іншому диску.
  5. Натисніть Записати(Write) і чекайте завершення.
  6. Закрийте Win32DiskImager, вийміть карту SD і вставте її в Raspberry Pi.

Примітка: після запису операційної системи ви помітите, що на карті SD залишилося лише кілька мегабайт. Це через створений розділ, решта вільного простору прихована. Ви зможете це виправити, як тільки ми підключимося до Raspberry Pi.

Загальний інтернет через Ethernet порт

Як тільки картка SD буде готова, вставте її в Raspberry Pi. Підключіть USB кабельживлення. А також з'єднайте Raspberry Pi та ноутбук кабелем Ethernet.

Якщо ви підключаєте Raspberry Pi до роутера з доступом до інтернету, цей крок можна пропустити.

Перевірка IP адреси, присвоєної вашому Raspberry Pi

Це просто, переконайтеся, що ваш Raspberry Pi підключений до Ethernet мережікомп'ютера (прямо або через роутер). Якщо все працює нормально, ви побачите, що світлодіоди на платі блимають.


Підключення до Raspberry Pi через PuTTy

Чудово! Перед тим, як продовжити, подивимося, що ми вже зробили до поточного моменту.

Гіпертекстовий протокол управління кавоваркою HTCPCP/1.0, що з'явився в 1998 році, нині незаслужено забутий. Щоб воскресити закладені в нього творцями ідеї, реалізуємо кавоварку з керуванням Raspberry Pi.

Багато любителів кави мріють, щоб до пробудження на них уже чекала гаряча кава. На мрії наклалися розмови про «розумний дім», контролери, сенсори, а тут ще я замовив плату Raspberry Pi (RPi) «на пограти» – загалом доля її була вирішена. Якщо 1998-го управління кавоваркою через веб справді виглядало забавним, то в наш час це цілком можна зробити своїми руками. З такою самою іграшкою, як RPi, радості буде подвійно. На її тлі 8-розрядних процесорів 80-90-х років, що пилиться в коробці Ардуїно Мега 2560 здається випадково потрапившим у майбутнє зі світу раритетом, до якого навіщось прикрутили Wi-Fi, шилди і сенсори.

Але повернемося на кухню по каву. Кавоварку включаємо за допомогою реле, реле керуємо з RPi, доступ до RPi з браузера Wi-Fi. Прокинувшись прямо з ліжка за допомогою браузера в телефоні. І дивимося, як воно заварюється через веб-камеру. Або детектуємо рух, і кава починає заварюватися в той момент, коли ми заходимо на кухню або вмикаємо світло. Справжній гік зможе включити кавоварку з ліжка через SSH, справжній ледар - просто зайшовши на кухню, простий користувач на кшталт мене - через браузер.

ВИБІР КАВАННЯ

Від кавоварки потрібно небагато. Тип - крапельний: і ціна значно менша, і кава, на мій смак, м'якша, ніж у еспресо. І головне – мінімум електроніки. Все керування має складатися з одного механічного вимикача, щоб можна було ввімкнути кавоварку, просто подавши на неї електроживлення. Вдома кавоварка великого об'єму ні до чого, велика потужність теж не потрібна: нижчий струм - менше вимоги до керуючих компонента. Хоча в кавоварках такого типу повністю автоматизувати процес приготування неможливо і потрібно буде щовечора заправляти її водою та меленою кавою.

Вибір кавоварок невеликого об'єму та потужності невеликий, більшість пропозицій – об'ємом більше літра, але майже відразу мені сподобалася Moulinex BCA 1.L1 Little Solea. Потужність 640 Вт, кавник 0,6л.

Скручуємо всі разом

У першій ревізії плат RPi стоять невдалі запобіжники (рис. 2), через які майже всю USB-периферію доводиться підключати через USB-хаб з додатковим харчуванням. У пізніших ревізіях ця проблема була виправлена, проте через те, що потужність джерела живлення невелика, USB-хаб все одно може знадобитися.

На двох моніторах, які я випробував, за замовчуванням була чорна облямівка по краях екрана. Це коригується налаштуваннями режиму overscan, у моєму випадку це вирішилося його вимкненням у конфігураційному меню.

Операційна система

Основний операційною системоюна Наразіє Raspbian, заснований на Debian, з підтримкою апаратного співпроцесора для операцій із плаваючою комою. На сторінці завантаження можна завантажити не тільки його (потрібний Raspbian "wheezy"), але й кілька інших, також заснованих на Linux, разом з необхідними утилітами.

Образ карти потрібно завантажити на диск, розархівувати, потім, якщо все робиться під Windows, залити за допомогою утиліти Win32DiskImager (посилання є на сторінці завантаження), на карту SD, розмір якої повинен бути від 2 Гб. Далеко не будь-яка SD-карта запрацює - є список сумісних карток та іншого обладнання, але навіть використання карток із цього списку не гарантує, що конкретна карта не є підробкою. Якщо RPi не вантажиться з образу, що тільки-но залитого на карту, перше, що варто спробувати, - змінити карту SD.

Після встановлення SD-карти в RPi, увімкнення та завантаження (ім'я користувача за умовчанням pi, пароль - raspberry) виводиться початкове конфігураційне меню, в якому потрібно обов'язково розширити файлову системуз 2 Гб образу на всю SD-карту та дозволити SSH. Крім того, варто встановити розкладку клавіатури, мови, тимчасову зону і змінити пароль за замовчуванням.

З оверклокінгом краще експериментувати окремо, відразу після його зміни перевіряючи стабільність RPi. Але спробувати його варто, оскільки збільшення швидкості роботи помітно зорово. У конфігураційне меню можна повернутися командою:

$ sudo raspi-config

Після завершення початкового налаштування перезавантажити:

$ sudo reboot

Наступним кроком варто оновити пакети - розробка під RPi йде дуже активно і великі оновлення виходять дуже часто.

$ sudo apt-get update $ sudo apt-get upgrade

Налаштування Ethernet та Wi-Fi

Wi-Fi-карта D-Link DWA-140 B2, що була у мене, значилася в списку сумісного обладнання. Підключив, перевірив, що успішно визначилась:

$lsusb<..>Bus 001 Device 006: ID 07d1:3c0a D-Link System DWA-140 RangeBooster N Adapter(rev.B2) $ iwconfig невелика широка extensions. eth0 no wireless extensions. wlan0 IEEE 802.11bgn ESSID:off/any Mode:Managed Access Point: Not-Associated Tx-Power=20 dBm Retry long limit:7 RTS thr:off Fragment thr:off Power Management:on

Wi-Fi можна налаштувати відповідно до документації.

SSH І VNC

Старт сервера SSH дозволяється у меню початкової конфігурації. Для доступу з Windows-машини можна використовувати Putty, з телефону під Андроїд – Irssi ConnectBot. Але тут уже на смак та колір.

Якщо недостатньо SSH і необхідний доступ до робочого столу RPi (наприклад, переглянути знімки, зроблені Motion, не копіюючи їх на локальну машину), можна отримати його через vncviewer з TightVNC, а для доступу з Android - за допомогою androidVNC. Для цього потрібно встановити VNC, використовуючи рекомендації bit.ly та bit.ly.

ВЕБ-КАМЕРА І MOTION

Як веб-камера в моєму варіанті використовується Logitech HD Webcam C525. При придбанні нової веб-камериварто звіритися зі списком обладнання, сумісного з RPI, деяким може знадобитися USB-хаб з додатковим живленням. Крім того, варто перевірити сумісність з Motion за посиланнями Working Devices і Non Working Devices. Якщо камери немає у списку Working Devices, це ще не означає, що вона не запрацює, але з другого списку камеру купувати точно не варто.

$lsusb<..>Bus 001 Device 007: ID 046d:0826 Logitech, Inc.

Перевірити камеру можна, спробувавши зробити скріншот із камери:

$ sudo apt-get install uvccapture $uvccapture -S80 -B80 -C80 -G80 -x800 -y600

У поточному каталозі має з'явитися файл snap.jpg (навіть якщо були повідомлення про помилки), який можна відкрити на RPi з допомогою Image Viewer. Motion – додаток для моніторингу сигналу з камери, що дозволяє встановити, що значна частина зображення змінилася (тобто визначити рух у кадрі), і в цьому випадку зберігати зображення та запускати зовнішні програми. Домашня сторінка проекту.

$ sudo apt-get install motion

Щоб дозволити автозапуск Motion:

$ sudo nano /etc/default/motion # set to "yes" to enable the motion daemon start_motion_daemon=yes

Дозволити доступ до веб-інтерфейсу Motion із зовнішніх хостів:

$ sudo nano /etc/motion/motion.conf webcam_localhost off control_localhost off

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

$ sudo nano /etc/motion/motion.conf # Command to be executed when a motion frame is detected (default: none) on_event_start sudo /home/pi/motion-det

/home/pi/motion-det - сценарій, який виконуватиметься під час детектування руху. Йому знадобляться права root для керування портами. Додати користувача Motion (motion) до списку sudoers:

$ sudo visudo

дописавши наступний рядок наприкінці файлу:

Motion ALL=(ALL) NOPASSWD: ALL

Запуск із виведенням інформації в консоль:

$ sudo motion -n

Коли Motion запущено, можна змінити налаштування з браузера за адресою: //:8080

Замість потрібно підставити фактичну IP-адресу RPi. Побачити зображення з камери можна за адресою //:8081

У Firefox оновлення зображення може бути неправильним. У Chrome все ОК. Попередньо встановлені на RPi браузери взагалі не можуть його відобразити. Для налаштування визначення руху передбачено конфігураційний режим

$ sudo motion -s

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

Зображення з камери зберігаються в каталозі /tmp/motion, формат окремих стандартних зображень jpg, роликів - swf. Формат можна змінити в конфігураційному файлі. А вимкнути збереження файлів можна так:

Output_normal off ffmpeg_cap_new off

ПОРТИ GPIO - ОСОБЛИВОСТІ І УПРАВЛІННЯ

RPi має вбудовані порти вводу-виводу. Називаються вони GPIO, General Purpose Input/Output, тобто порти введення-виведення загального призначення. Строго говорячи, підключити виконавчий пристрій можна без особливих проблем і до простого ПК, але не тримати ж ПК на кухні? Тим і хороша недорога та мініатюрна RPi – її спокійно можна розмістити поруч із виконавчим пристроєм.

GPIO-порти працюють на рівнях 3,3 В. При цьому на платі RPi не передбачено захисту портів, і випадкове замикання 5 на них може виявитися смертельним.

Розпаювання портів та приклади доступу до них з різних мов програмування наведено тут: bit.ly/StAJXA .

Є дві основні версії плат, Revision 1 і 2, у яких трохи різниться розпаювання і призначення портів. Щоб визначити, яка версія, потрібно ввести команду cat /proc/cpuinfo та знайти hardware revision code у таблиці: додаткова інформаціяпро відмінності Revision 1 і 2 є.

Живлення +5 В і 3,3 В, земля (GND) і порт GPIO 4, який ми далі використовуватимемо, в обох версіях розміщуються на тих же контактах. Розробники RPi неодноразово наголошують на небезпеці спалити порт або всю RPi при неправильне підключенняпорту. Щоб цього не сталося, порт рекомендується захистити від помилкових дій. Схеми захисту портів (а також приклади підключення різної периферії) можна подивитися .

Доступ до портів

Найпростіший спосіб управління портом – з командного рядка. Стан порту можна проконтролювати вольтметром. Усі дії роблять під рутом.

$ sudo -i

Початок роботи з портом:

$ echo "4" > /sys/class/gpio/export

Режим роботи - висновок:

$ echo "out" >

Висновок значень:

$ echo "1" > /sys/class/gpio/gpio4/value $ echo "0" > /sys/class/gpio/gpio4/value

Режим роботи - введення:

$ echo "in" > /sys/class/gpio/gpio4/direction

$cat /sys/class/gpio/gpio4/value

Завершити роботу з портом:

$ echo "4" > /sys/class/gpio/unexport

Підготуємо скрипт для керування заданим портом, який використовуватимемо пізніше:

$ sudo nano switch_gpio

#! /bin/bash PORT_NUM=$1 if [ $2. == "on." ]; then NEW_VALUE=1 else if [ $2. == "off." ]; then NEW_VALUE=0 else echo "Usage: $0 PORT_NUM on|off" exit fi fi # Налаштовуємо порт GPIO для виведення if [ ! -e /sys/class/gpio/gpio$PORT_NUM ] then echo $PORT_NUM > /sys/class/gpio/export fi # Читаємо старий стан OLD_VALUE=$(cat /sys/class/gpio/gpio$PORT_NUM/value) if [$ OLD_VALUE == 1]; then OLD_VALUE_TEXT="on" else OLD_VALUE_TEXT="off" fi echo "out" > /sys/class/gpio/gpio$PORT_NUM/direction echo -ne "Switching GPIO "$PORT_NUM" з "$OLD_VALUE_TEXT" до "$2. .." echo $NEW_VALUE > /sys/class/gpio/gpio$PORT_NUM/value echo " done."

Права на виконання:

$chmod +x switch_gpio

І перевіримо:

$ switch_gpio 4 on $ switch_gpio 4 off

Модуль реле

Підключення реле реалізовано за схемою цієї статті . У нормальному положенні, коли на виході порту GPIO є логічний нуль і нульовий потенціал, транзистор закритий і напруга на навантаження не подається. Якщо на GPIO подати логічну одиницю, 3,3 через резистор відкриють транзистор, через нього потече струм і реле спрацює. Діод призначений зі зняттям негативних кидків при відключенні реле.

Задіяні інше реле (за ним трохи пізніше) та транзистор з діодом – ті, що опинилися під рукою, близькі за характеристиками. Резистор R1 (1 кОм), діод типу КД522 (1N4148), транзистор H547. У статті є рекомендації щодо вибору аналогів. Додатково варто перевірити вихідний струм порту при увімкненому реле.

Навантаження, що підключається до схеми, становить 640 Вт. Це означає, що при напрузі 220 В струм складе 640 Вт / 220 В = 2,9 А. Ще одна вимога до реле - щоб замикалися і розмикалися відразу два дроти і навантаження повністю знеструмлювалося. Один з варіантів, що підходить під такі вимоги, - реле TRIL-5VDC-SD-2CM-R, кероване від 5 В і здатне комутувати до 8 А змінного струму 250 Ст.

Почати монтаж можна на контактній макетної плати. Звичайно, для серйозних завдань вона не підходить, але такі невеликі схеми на ній можна швидко зібрати і налагодити. Спочатку запитуємо від окремого джерела +5, все перевіряємо без підключення до RPi, замінивши підключення до порту резистором і кнопкою до +5, промірюємо всі струми і ставимо роз'єм для підключення до основної плати RPi. Підключати 220 В до такої плати категорично не можна, тому все одно доведеться брати паяльник у руки та переносити це на друковану плату.

Для підключення до основної плати RPi можна зібрати шлейф з пари роз'ємів і плоского кабелю, підключити до нього проміжну плату, на якій вже розводяться потрібні порти та живлення на шлейфи до периферійних пристроїв, поки всього на один, вже не 26-, а 4-провідний шлейф. Він підключається до монтажної плати, на якій збирається в точності те ж, що і в першому варіанті, додаванням клемників для 220 В. Клемники розпаюємо на реле дротом проводом 0,75, акуратно перевіряємо тестером працездатність схеми, клацаючи реле. Додатково можна розвести землю. Потім підключаємо дроти до клем, також перетином 0,75, на одній з яких ставиться вилка, на іншій - розетка на провід.


Далі обережно і акуратно: 220 В частотою 50 Гц - напруга, при неакуратній роботі з якою наслідки можуть бути набагато трагічнішими, ніж згоріла RPi. Візуально перевіряємо пайку на платі реле, перевіряємо надійність закріплення проводів 220 В клемники. Фіксуємо плату, а краще встановлюємо її в закритий корпус, щоб не випадково не зачепити відкриті контакти під напругою. Не поспішаємо і послідовно щокроку перевіряємо тестером. Відключаємо плату реле від основної плати RPi, встромляємо вилку в 220. Диму немає. Відключаємо від мережі, підключаємо основну плату RPi, знову вмикаємо в 220. Диму знову немає, RPi жива. Клацаємо реле, бачимо 220 на розетці. Відключаємо реле та 220, підключаємо до розетки настільну лампу, подаємо 220, клацаємо реле. Ура!


Мал. 5. Другий варіант модуля реле, розпаяний на друкованій макетній платі
із проміжною комутаційною платою

Переводимо дух і, встановивши плату реле в корпус на постійній основі, Пробуємо вже в остаточному варіанті, з кавоваркою як навантаження.

УПРАВЛІННЯ ПОРТАМИ ЗА ДОПОМОГОЮ WEBIOPI

Найпростіший спосіб достукатися до портів GPIO через веб - встановити WebIOPi. Ця програма, що дозволяє візуально задавати напрямок роботи порту (введення/виведення), бачити його стан при введенні та задавати значення на виведенні.

Установка докладно описана.

$ sudo apt-get install apache2 php5

Для роботи WebIOPi використовує модуль rewrite та перевизначення конфігурації (.htaccess):

$ sudo a2enmod rewrite $ sudo nano /etc/apache2/sites-enabled/000-default

В розділі змінити рядок "AllowOverride None" на "AllowOverride All":

Опції Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all

Додати користувача Apache (www-data) до списку sudoers:

$ sudo visudo

Дописавши наступний рядок наприкінці файлу:

Www-data ALL=(ALL) NOPASSWD: ALL

Рестартувати Apache:

$ sudo /etc/init.d/apache2 restart

$wget //webiopi.googlecode.com/files/WebIOPi-0.3.tar.gz $tar xvzf WebIOPi-0.3.tar.gz

Перемістити файли у відповідний каталог:

$ sudo mv webiopi /var/www

Основний інтерфейс доступний за адресою: // localhost / webiopi.

Якщо відкривати сторінку безпосередньо з RPi, то потрібно це робити в Chromium або Midori, ні в NetSurf, ні в Dillo вона не працює через відсутність підтримки JavaScript.

ЗВ'ЯЗУЄМО ВСЕ РАЗОМ

Для керування портом із браузера через веб цілком достатньо веб-інтерфейсу WebIOPi, за бажання його можна налаштувати під свої потреби. Для включення реле при детектуванні руху додамо старт Motion у заданий час вранці, наприклад о 8:00, /etc/crontab:

0 8* * * echo $(date)": "$(service motion start) >> /var/log/motion_start.log

Crontab /etc/crontab

Створимо скрипт, який запускатиметься з Motion:

$ nano /home/pi/motion_det

#!/bin/bash /home/pi/switch_gpio 4 on service motion stop sleep 1800 /home/pi/switch_gpio 4 off

Права на виконання:

Chmod +x /home/pi/motion_det

Тепер о восьмій ранку буде запущено Motion, який почне детектувати рух. Коли рух буде виявлено, запуститься скрипт motion_det, який видасть логічну одиницю на порт GPIO 4, подавши напругу на реле і увімкнувши кавоварку, зупинить Motion, зачекає 30 хвилин і видасть на той самий порт логічний нуль, відключивши навантаження.

ВИСНОВОК

Більшість компонентів придбано в «Чип і дип» (включаючи корпуси, кабельні вводи, плати, перехідник тощо). Це магазин з гарним вибором, в який можна зайти, подивитися і доторкнутися, але недешевий, є відчутно бюджетнішим. Ті, хто не хоче довго чекати на доставки RPi, вже можуть її придбати, наприклад у «Тераелектроніці», хоча й зовсім не за 25 доларів.

Щоб не завадила темрява зимовими ранками, замість камери (або на додаток до неї) можна підключити ІЧ датчик руху. Можна розібратися в кавоварці еспресо з автоматичним приготуванням і не замислюватись увечері про те, що потрібно засипати каву наступного ранку. Можна підключити реле через ZygBee, додати інші виконавчі пристрої, наприклад світильник у спальні. Можна реалізувати керування через SMS, підключивши 3G-модем або зі звичайного телефону через DTMF, піднявши Asterisk або Freeswitch. А можна написати додаток для Андроїда та iPhone/iPad.

Варіантів дуже багато, і з появою RPI можливості експериментувати на кордоні між програмуванням та фізичним світом різко розширилися. Так, і, звичайно, найближчого першого квітня потрібно буде замислитися про повної підтримкистандарту RFC 2324