В цій статті, як вже звично для мого блогу, ми з вами поговоримо про мову програмування Python. Але не про її застосування у світі вебу, а при програмуванні Embedded Systems. Програмуванні мікроконтролерів.
Цей пост є гостьовим постом Василя Йосипенка. У ній він поділиться з нами основами Embedded Програмування. Розкаже що це таке і з чим його їдять 😉 Ну і звичайно буде невеликий приклад з використанням програми написаної на мові Пітон.
Коли готував дану статтю для блогу самому було дуже цікаво. Дійшло аж до того, що просидів 2 години, серфив за робототехнікою і останніми чудесами ембедид систем. Надіюсь вам також буде цікаво починати.
Всі приклади та детальні описи наведено для операційної системи Windows. Проте повторити дані приклади також можна без проблем на Лінуксі та Макінтоші. Система на самій платі – Лінукс.
Отже,
***
Вступ
Є дуже цікавий напрям програмування, який зараз активно розвивається. Це програмування вбудованих систем (Embedded Systems).
В цій статті постараюсь коротко пояснити що це таке і де воно застосовується. Навиків написання не маю, тому не судіть строго 🙂
Embedded Systems – це система, завданням якої є виконання конкретних вузькоспеціалізованих завдань. Такі системи, як правило, складаються з пристроїв вводу та сенсорів (освітленості, температури, тиску та ін.), мікроконтролерної чи мікропроцесорної системи, яка обробляє прийняту інформацію, та пристроїв виводу інформації (дисплеї) чи виконавчих механізмів (різноманітні реле, клапани, драйвери двигунів, і т.д.).
Приклади таких систем: бортові комп’ютери автомобілів, медичні пристрої, банкомати, периферійні пристрої до PC.
Основу системи складає мікроконтроллер. Він являє собою мікрокомп’ютер з процесором, ROM, RAM та периферією. Для того, щоб така система могла працювати для неї потрібно написати програмне забезпечення, яке називають “firmware”.
Для цього можуть використовуватись мови програмування С, С++, і навіть Java та Python. Дві останні вимагають інтерпретатора для їх виконання, тому як правило використовуються в потужніших системах з великим об’ємом RAM і відносно потужним мікропроцесором. Найбільше використовується мова С, тому що в багатьох системах програмування вона виконується без жодних операційних систем. Тобто пряма робота з пам’ятю та периферією.
Для прикладу наведу інформацію про ресурси одного мікроконтроллера:
Як правило цих ресурсів може бути досить, щоб зробити керування холодильником чи мікрохвильовкою 🙂
В залежності від функціоналу проектованої системи вибирають мікроконтролер.
Для кожної серії мікроконтролера є свої середовища розробки. Вони бувають безплатні та платні. Деякі виробники випускають своє середовище розробки. Наприклад фірма Atmel має безплатне IDE Atmel Studio.
Якщо проект дорогий, то, як правило, використовують платні середовища IAR, Keil, тому що їхні продукти сертифіковані. А це теоретично означає, що вони мають менше помилок.
Використання потужніших систем дозволяє використовувати високорівневі мови програмування. Це дозволяє скоротити час розробки, полегшує підтримку коду і зміну чи додавання нового функціоналу.
Практичний Приклад
Як програмувати одну з таких систем покажу на практиці. Основа проекту – це одноплатний комп’ютер Beaglebobe Black, який всі бажаючі можуть купити на офіційному сайті або в Україні. До цієї плати можна підключити монітор, клавіатуру та використовувати як звичайний комп’ютер. Також можна підключити відеоплеєр або web – камеру і транслювати відео чи зображення в інтернтет.
Застосування обмежується тільки власною фантазією. Основні характеристики:
Тажож приємна новина для веб дизайнерів є те, що одна з бібліотек для роботи з периферією написана на JavaScript. Для програмування використовується он-лайн середовище Cloud9. Оскільки це повноцінний Linux комп’ютер, тільки малих розмірів, то на ньому можна робити все що і на звичайному.
Покажу один з варіантів застосування в цій статті.
Підключаємо модель машинки до плати. Ця модель складається з 4 редукторів з колесами, 2 драйверів керування двигунами, 2 перетворювачів живлення 5V та 8V (8V для живлення двигунів, 5V для живлення електроніки керування двигунами), та Li-Ion батареї (хоча може бути замінена на будь-яку іншу).
Інформацію про номери пінів берем тут. Підключаємо плату BeagleBone Black до драйвера двигуна L298 відповідно до таблиці:
L298 | BeagleBone Black | |
---|---|---|
EN | 14 (GPIO_40) | Вкл/виключення двигуна |
IN1 | 12 (GPIO_60) | Зміна напряму обертання |
IN2 | 11 (GPIO_11) | Зміна напряму обертання |
Більш детально прочитати як саме відбувається керування двигуном можна в документації.
Нам необхідно підключитись до плати щоб мати можливість писати програми для неї. Є два варіанти:
- Підключити монітор через mini hdmi та клавіатуру, і після запуску Linux можна програмувати.
- Підключитись до плати через USB, Ethernet Wi-Fi використовуючи програмy Putty.
Тепер детальніше по кожному з типів з’єднань:
- USB з’єднання. Для роботи через USB необхідно встановити драйвер з офіційного сайту. Оскільки плата живиться від USB, додаткового блоку живлення не потрібно.
- Ethernet з’єднання. Для роботи через Ethernet потрібно підключитись до роутера. Він присвоїть IP адресу і вже по ній можна буде конектитись до плати. Також можна в настройках роутера прописати DNS адресу (якщо є статична адреса, тоді можна використовувати її) і конектитись до плати через інтернет з будь якої точки світу. Недоліком такого типу з’єднання є те, що потрібно додаткове живлення плати. А також знаходитись близько біля роутера, для контролю результату роботи.
- Wi-Fi з’єднання. Потребує додаткового живлення, а також Wi-Fi модуля. Але натомість дає свободу пересування, ніяких зайвих дротів (крім живлення, хоча можна живити плату від батареї).
Я буду працювати з USB з’єднанням.
Завантажуємо програму Putty і налаштовуємо її як показано на малюнку нижче:
Відкриється вікно з пропозицією ввести ім’я користувача:
Вводимо “root” тому, що пароль по замовчуванню не встановлений. Просто натискаємо “Enter”.
Все. Можна працювати – в нас повноцінна Linux консоль. Можна створювати, редагувати файли та виконувати команди чи скрипти.
Для невеликих програм можна прямо із консолі створювати файли, командою nano <ім’я файлу>.<розширення>. Відкриється новий файл, який можна редагувати. Після чого потрібно натиснути «Ctrl+X» для збереження і виходу з редактора.
Для більших текстів програм зручніше використовувати текстові редактори з підсвіткою синтаксису. Наприклад «Notepad++» чи IDE. Після створення файлу потрібно його завантажити в файлову директорію на BeagleBone Black. Найпростіше це зробити через програму “FileZilla”. Налаштування і вигляд на малюнках:
Після налаштувань можна розпочинати програмування.
Для того, щоб ми могли писати на Python нам потрібно встановити Adafruit_BBIO бібліотеку.
Напишемо програму керування двигунами машинки на Python. Ця програма поступово збільшує швидкість обертання колеса, зупиняє колесо, і починає крутити його в зворотньому напрямку. А також виводить швидкість і напрям в консоль.
Якщо бракує базових знань мови програмування Python, тоді отут можна пройти базовий курс по даній мові.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
import Adafruit_BBIO.GPIO as GPIO import Adafruit_BBIO.PWM as PWM import time speed = 30 #початкова швидкість двигуна direction = forward forward = 1 back = 0 GPIO.setup("P9_12", GPIO.OUT) # ініціалізація,керування напрямом руху GPIO.setup("P9_11", GPIO.OUT) # ініціалізація,керування напрямом руху PWM.start("P9_14",50,1000,0) # включення PWM PWM.set_duty_cycle("P9_14",20) # встановлюємо початковий коефіцієнт # заповнення PWM, 20% ( мінімум 0, максимум 100%) PWM.set_frequency("P9_14", 50) # встановлюємо частоту роботи PWM, while True: # повторюємо операції поки працює програма,тому робимо вічний цикл speed = speed + 10 # збільшуємо швидкість обертання. Це значення збільшує # duty cycle, отже збільшує напругу на двигуні,що збільшує # його оберти if speed >=100 : # якщо швидкість максимальна, speed = 30 # встановлюємо мінімальну print "speed: 0" # виводимо значення швидкості в консоль if direction == forward: # якщо напрям був вперед direction = back # міняємо на протилежний else: direction = forward GPIO.output("P9_12", GPIO.LOW) # виключаємо GPIO.output("P9_11", GPIO.LOW) # двигун на time.sleep(2.0) # 2 cекунди if direction == forward: # якщо вибраний напрям "прямо" PWM.set_duty_cycle("P9_14",speed) # встановлюємо швидкість GPIO.output("P9_12", GPIO.HIGH) # міняємо напрям GPIO.output("P9_11", GPIO.LOW) print "go forward, speed:", speed # виводимо на консоль значення швидкості time.sleep(1.0) # робимо паузу 1 секунду else: PWM.set_duty_cycle("P9_14",speed) GPIO.output("P9_12", GPIO.LOW) GPIO.output("P9_11", GPIO.HIGH) print "go back, speed:",speed time.sleep(1.0) |
Зберігаємо програму в файлі з назвою car.py. Для запуску потрібно набрати:
1 |
$ python car.py |
Для зупинки програми і повернення в консоль натискаємо комбінацію «Ctrl+C». Під час виконання скрипта відбувається керування двигуном і програма виводить в консоль наступну інформацію:
На відео ви можете побачити як це все працює:
Ось і ще одне застосування мови Python 🙂
***
Якщо вам цікава дана тема, тоді рекомендую відвідати сайт Василя, де він більше і детальніше висвітлює тематику Embedded Systems програмування.
Думаю кожен програміст в своєму житті мріяв хоча б спробувати написати гру та робота 🙂 Я наприклад так. Гру вже пробував, а от до роботів ще не добрався. Тепер маючи можливість писати логіку на рідній мові Пітон, шанси спробувати себе у цьому цікавому напрямку значно зросли!
І ще на завтравку кілька лінків:
- адаптована мова Python для мікроконтролерів: http://micropython.org/
- розробка павука-робота: https://www.youtube.com/watch?v=-vVblGlIMgw
Друзі, а хто знає на скільки зараз популярне програмування Ембедид Систем саме на мові Пітон? Цікаво чи перспективний напрям…
Хочете регулярно дізнаватися про новинки та події у світі програмування, зокрема в мові Python та у вебі загалом? Тоді підписуйтесь на мою емейл розсилки:
Вроде и очевидная вещь – микроконтроллеры,
Но вот спасибо что показал применительно к Питону.
На фирме где я работал, заказывали программирование (для автоматики промышленных газоочисток) на микропроцессорах от Сименс, потому как лицензированные. И вроде там пишут все еще на Асамблере.
Ще раз дякую за статтю!) Збираєшся купляти собі якийсь одноплатний компютер?
Чесно кажучи захотілось )