Python для мікроконтролерів. Вчимося програмувати одноплатні комп'ютери на мові високого рівня

  1. Зміст статті Жартівники кажуть, що після трудового дня за комп'ютером типовий програміст їде додому,...
  2. А чим ця плата краще?
  3. І що, тільки офіційна плата?
  4. Підготовка до роботи
  5. INFO
  6. прошивка контролера
  7. Взаємодія з платою
  8. INFO
  9. починаємо розробку
  10. Hello world
  11. Продовження доступно тільки учасникам
  12. Варіант 2. Відкрий один матеріал

Зміст статті

Жартівники кажуть, що після трудового дня за комп'ютером типовий програміст їде додому, сідає за ПК і таким чином відпочиває. Але ж істина насправді куди гірше цього жарту: багато хто з нас, приходячи з роботи, присвячують час, що залишився до сну час ... програмування мікроконтролерів. 🙂 Обивателям не зрозуміти, але Arduino, Teensy або ESP - дійсно дуже непогане хобі. Їх єдиний недолік - необхідність програмувати на досить низькому рівні, якщо не на Assembler, то на Arduino C або Lua. Але тепер в списку ЯП для мікроконтролерів з'явився Python. Точніше, MicroPython. У цій статті я постараюся максимально продемонструвати його можливості.

З чого все почалося?

Все почалося з кампанії на Kickstarter. Дем'єн Джордж (Damien George), розробник з Англії, спроектував Мікроконтроллерні плату, призначену спеціально для Python. І кампанія «вистрілила». Спочатку була заявлена ​​сума в 15 тисяч фунтів стерлінгів, але в результаті було зібрано в шість з половиною разів більше - 97 803 фунта стерлінгів.

А чим ця плата краще?

Автор проекту приводив цілий ряд переваг своєї платформи в порівнянні з Raspberry Pi і Arduino:

  • Потужність - MP могутніше в порівнянні з мікро контролером Arduino, тут використовуються 32-розрядні ARM-процесори типу STM32F405 (168 МГц Cortex-M4, 1 Мбайт флеш-пам'яті, 192 Кбайт ОЗУ).

  • Простота у використанні - мова MicroPython заснований на Python, але трохи спрощений, для того щоб команди з управління датчиками і моторами можна було писати буквально в кілька рядків.

  • Відсутність компілятора - щоб запустити програму на платформі MicroPython, немає необхідності встановлювати на комп'ютер додаткове ПЗ. Плата визначається ПК як звичайний USB-накопичувач - варто закинути на нього текстовий файл з кодом і перезавантажити, програма тут же почне виконуватися. Для зручності все-таки можна встановити на ПК емулятор терміналу, який дає можливість вписувати елементи коду з комп'ютера безпосередньо на платформу. Якщо використовувати його, тобі навіть не доведеться перезавантажувати плату для перевірки програми, кожен рядок буде тут же виконуватися мікро контролером.

  • Низька вартість - в порівнянні з Raspberry Pi платформа PyBoard трохи дешевше і, як наслідок, доступніше.

  • Відкрита платформа - так само як і Arduino, PyBoard - відкрита платформа, всі схеми будуть перебувати у відкритому доступі, що має на увазі можливість спроектувати і створити подібну плату самому залежно від потреб.

І що, тільки офіційна плата?

Ні. При всіх своїх перевагах PyBoard (так називається плата від розробника MicroPython) - досить дороге задоволення. Але завдяки відкритій платформі на багатьох популярних платах вже можна запустити MicroPython, зібраний спеціально для неї. В даний момент існують версії:

  • для BBC micro: bit - британська розробка, позиціонується як офіційне навчальний посібник для уроків інформатики;
  • Circuit Playground Express - розробка відомої компанії Adafruit. Це плата, що включає в себе світлодіоди, датчики, Піни і кнопки. За замовчуванням програмується за допомогою Microsoft MakeCode for Adafruit. Це блоковий (схожий на Scratch) редактор «коду»;
  • ESP8266 / ESP32 - одна з найпопулярніших плат для IoT-розробки. Її можна було програмувати на Arduino C і Lua. А сьогодні ми спробуємо встановити на неї MicroPython.

плата ESP8266

Підготовка до роботи

Перед тим як писати програми, потрібно налаштувати плату, встановити на неї прошивку, а також встановити на комп'ютер необхідні програми.

Перед тим як писати програми, потрібно налаштувати плату, встановити на неї прошивку, а також встановити на комп'ютер необхідні програми

INFO

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

  • плата NodeMCU ESP8266-12E;
  • драйвер моторів L293D;
  • I2C-дисплей 0,96 "128 × 64;
  • Adafruit NeoPixel Ring 16.

прошивка контролера

Для прошивки плати нам знадобиться Python. Точніше, навіть не він сам, а утиліта esptool, поширювана за допомогою pip. Якщо у тебе встановлений Python (неважливо, якої версії), відкрий термінал (командний рядок) і набери:

pip install esptool

Після установки esptool треба зробити дві речі. Перше - завантажити з офіційного сайту версію прошивки для ESP8266. І друге - визначити адресу плати при підключенні до комп'ютера. Найпростіший спосіб - підключитися до комп'ютера, відкрити Arduino IDE і подивитися адресу в списку портів.

Для полегшення сприйняття адреса плати в прикладі буде / dev / ttyUSB0, а файл прошивки перейменований в esp8266.bin і лежить на робочому столі.

Відкриваємо термінал (командний рядок) і переходимо на робочий стіл:

cd Desktop

Форматуємо флеш-пам'ять плати:

esptool.py --port / dev / ttyUSB0 erase_flash

Якщо при форматуванні виникли помилки, значить, потрібно включити режим прошивки вручну. Затискаємо на платі кнопки reset і flash. Потім відпускаємо reset і, не відпускаючи flash, намагаємося відформатувати ще раз.

І завантажуємо прошивку на плату:

esptool.py --port / dev / ttyUSB0 --baud 460800 write_flash --flash_size = detect 0 esp8266.bin

Взаємодія з платою

Всі взаємодія з платою може відбуватися кількома способами:

  • через Serial-порт;
  • через web-інтерпретатор.

При підключенні через Serial-порт користувач в своєму терміналі (в своїй командному рядку) бачить практично звичайний інтерпретатор Python.

При підключенні через Serial-порт користувач в своєму терміналі (в своїй командному рядку) бачить практично звичайний інтерпретатор Python

Підключення через SerialPort

Для підключення по Serial є різні програми. Для Windows можна використовувати PuTTY або TeraTerm. Для Linux - picocom або minicom. Як крос-платформного рішення можна використовувати монітор порту Arduino IDE. Головне - правильно визначити порт і вказати швидкість передачі даних 115200.

picocom / dev / ttyUSB0 -b115200

Крім цього, вже створено і викладено на GitHub кілька програм, що полегшують розробку, наприклад EsPy. Крім Serial-порту, він включає в себе редактор Python-файлів з підсвічуванням синтаксису, а також файловий менеджер, що дозволяє завантажувати і завантажувати файли на ESP.

EsPy IDE

Але всі перераховані способи хороші лише тоді, коли у нас є можливість безпосередньо підключити пристрій за допомогою кабелю. Але плата може бути інтегрована в будь-який пристрій, і розбирати його тільки для того, щоб оновити програму, як-то не оптимально. Напевно, саме для таких випадків і був створений WebREPL. Це спосіб взаємодії з платою через браузер з будь-якого пристрою, що знаходиться в тій же локальній мережі, якщо у плати немає статичного IP, і з будь-якого комп'ютера, якщо такий IP присутній. Давай налаштуємо WebREPL. Для цього необхідно, підключившись до плати, набрати

import webrepl_setup

З'явиться повідомлення про статус автозапуску WebREPL і питання, включити або вимкнути його автозапуск.

WebREPL daemon auto-start status: enabled Would you like to (E) nable or (D) isable it running on boot? (Empty line to quit)>

Після введення q з'являється повідомлення про виставлення пароля доступу:

To enable WebREPL, you must set password for it New password (4-9 chars):

Вводимо його, а потім підтверджуємо. Тепер після перезавантаження ми зможемо підключитися до плати за Wi-Fi.

Так як ми не налаштували підключення плати до Wi-Fi-мережі, вона працює в якості точки доступу. Ім'я Wi-Fi-сeті - MicroPython - ******, де зірочками я замінив частину MAC-адреси. Підключаємося до неї (пароль - micropythoN).

відкриваємо WebREPL і натискаємо на Connect. Після введення пароля ми потрапляємо в той же інтерфейс, що і при прямому підключенні. Крім цього, в WebREPL є інтерфейс для завантаження файлів на плату і скачування файлів на комп'ютер.

WebRERL
WebRERL

INFO

Серед файлів, завантажених на плату, є стандартні:

  • boot.py - скрипт, який завантажується першим при включенні плати. Зазвичай в нього вставляють функції для ініціалізації модулів, підключення до Wi-Fi і запуску WebREPL;
  • main.py - основний скрипт, який запускається відразу після виконання boot.py, в нього записується основна програма.

починаємо розробку

Hello world

Прийнято, що першою написаної на новому мовою програмування повинна бути програма, що виводить Hello world. Не будемо відходити від традиції і виведемо це повідомлення за допомогою азбуки Морзе.

import machine import time pin = machine.Pin (2, machine.Pin.OUT) def dot_show (): pin.off () time.sleep (1) pin.on () def dash_show (): pin.off () time .sleep (2) pin.on () Hello_world = '**** * * - ** * - ** --- * - --- ** * - ****' for i in Hello_world : if i == "*": dot_show () elif i == '-': dash_show () else: time.sleep (3) time.sleep (0.5)

Отже, що ж відбувається? Спочатку підключаються бібліотеки: стандартна Python-бібліотека time і спеціалізована machine. Ця бібліотека відповідає за взаємодію з GPIO. Стандартний вбудований світлодіод розташовується на другому піне. Підключаємо його і вказуємо, що він працює на вихід. Якби у нас був підключений якийсь датчик, то ми б вказали режим роботи IN.

Наступні дві функції відповідають за включення і виключення світлодіода на певний інтервал часу. Напевно, цікаво, чому я спочатку вимикаю світлодіод, а потім включаю? Мені теж дуже цікаво, чому сигнал для даного світлодіода инвертирован ... Залишимо це на совісті китайських збирачів. Насправді команда pin.off () включає світлодіод, а pin.on () - відключає.

Ну а далі все просто: заносимо в змінну Hello_world нашу рядок, записану кодом Морзе, і, пробіг по ній, викликаємо ту чи іншу функцію.

Продовження доступно тільки учасникам

Варіант 1. Приєднайся до товариства «Xakep.ru», щоб читати всі матеріали на сайті

Членство в співтоваристві протягом зазначеного терміну відкриє тобі доступ до ВСІХ матеріалами «Хакера», збільшить особисту накопичувальну знижку і дозволить накопичувати професійний рейтинг Xakep Score! Детальніше

Варіант 2. Відкрий один матеріал

Зацікавила стаття, але немає можливості стати членом клубу «Xakep.ru»? Тоді цей варіант для тебе! Зверни увагу: цей спосіб підходить тільки для статей, опублікованих більше двох місяців тому.


А чим ця плата краще?
І що, тільки офіційна плата?
З чого все почалося?
А чим ця плата краще?
І що, тільки офіційна плата?
WebREPL daemon auto-start status: enabled Would you like to (E) nable or (D) isable it running on boot?
Напевно, цікаво, чому я спочатку вимикаю світлодіод, а потім включаю?
Ru»?

Дополнительная информация

rss
Карта