Как программировать arduino на python

Arduino + Python: программирование платы на «питоне»

Материал по основам взаимодействия плат Arduino и языка программирования Python.

Вступление

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

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

В начале у вас может возникнуть ряд сложностей по взаимодействию Arduino и Python, но надеюсь, что этот материал объяснит основы всем, кто хочет начать использовать последовательные функции, которые предоставляет Arduino.

Также я предполагаю, что раз вы читаете эту публикацию, то у вас есть некоторые знания о том, как работает Arduino, как загружать скетчи и тому подобное. Если нет, то вы можете пройти мой курс "Ардуино для начинающих". Но в любом случае я объясню ниже код Arduino и Python, который довольно простой. Сама программа не так сложна для понимания, как понимание работы последовательной связи.

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

Установка Python и библиотек

Очевидно, что нам на нашем компьютере понадобится Python, если мы хотим что-то сделать. Если у вас не установлен Python, то вам нужно зайти на официальный сайт python и скачать: python.org (ссылка). Вы скорее всего скачаете файл с расширением .exe. Запустите файл и пройдите все необходимые шаги установки. Она очень простая.

Как только у нас будет установлен Python, вам понадобится новая дополнительная библиотека под названием PySerial. Данная библиотека обеспечит все функции и методы, которые нам понадобятся для общения с нашим Arduino.

Также вы можете посмотреть на GitHub:

  • библиотека: https://github.com/pyserial/pyserial
  • документация: https://pyserial.readthedocs.org/en/latest/

Для установки используем встроенный менеджер пакетов pip:

Еще вариант для более ранней версии — после того, как вы загрузите Питон, откройте Терминал и введите:

Чтобы убедиться, что все установлено правильно, откройте Idle и введите: Import Serial. Если ошибок нет, значит, все хорошо.

Вы можете проверить доступные порты таким образом:

По ссылкам выше можно найти документацию по работе с библиотекой в Windows, macOS, Linux. Если вы используете Eclipse, то вам может пригодиться дополнение Python для Eclipse, если вы хотите программировать в среде Eclipse. Теперь, когда всё установлено, мы можем начать писать нашу программу на Python.

Код Python

Теперь мы можем начать программирование. Также ниже разберем код программы более детально.

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

Далее я объявляю переменную, которая будет действовать как флаг, когда последовательное соединение Arduino открывается. Мы не будем пытаться отправлять что-либо в Arduino, пока плата не отправит что-нибудь нам.

Затем мы инициализируем последовательную переменную ser, которая будет связываться с Arduino. Два параметра отправляются при инициализации последовательной переменной.

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

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

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

Далее мы ждем пока Arduino скажет нам, что она мигнула дважды. Цикл while будет работать пока не получит сообщение. Когда мы получаем сообщение от Arduino, мы можем закрыть последовательный порт и завершить программу. Так что это все, что нам нужно для программы на Python, всего 10 строк кода.

Есть еще один пример кода Python. Посмотрите на него самостоятельно и попробуйте разобраться в нем:

Для второго примера кода Питона ниже я приведу соответствующий код программы Ардуино.

Во втором примере вам также нужно иметь в виду два основных момента. Нужно определить к какому последовательному порту подключена ваша Arduino. Что бы это ни было, это должно быть в кавычках в строке 3 программы Python.

Вы также можете изменить скорость передачи данных в строке 3 программы Python и строке 2 программы Arduino, если они не изменяются.

После запуска программы она выведет большинство символов ASCII, сначала отправив их в Arduino, который, в свою очередь, отправит их обратно на компьютер, который затем выведет Python.

Скетч Ардуино

Скетч Ардуино для первого примера со светодиодом ниже:

Я изначально предполагаю, что у вас установлено и работает программное обеспечение Arduino. Так как мы просто хотим мигнуть светодиодом, то мы можем просто использовать светодиод платы Arduino или подключить светодиод к контакту 13 и заземлению.

В void setup() мы запускаем последовательный монитор со скоростью 9600 бод. Скорость не имеет значения, просто убедитесь, что она соответствует скорости в бодах в программе Python.

Затем мы создаем выходной контакт, к которому подключен светодиод. Наконец, мы пишем в последовательный порт, чтобы программа на Python знала, что мы готовы.

В void loop() у нас есть одно большое выражение в виде условного if. Суть в ожидании момента, когда программа python отправит что-то через последовательный порт. Когда Arduino что-то получит, светодиод мигнет дважды.

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

Для второго варианта наш скетч Ардуино будет выглядеть так:

Загрузите скетч на свою плату и запустите программу Python. Если все сделано правильно, вы должны увидеть мигание светодиода из первого примера. Далее, для эксперимента вы можете попробовать добавить еще один светодиод и сделать их чередующимися. На этом всё. Хороших вам проектов.

Python & Arduino. Просто, быстро и красиво

Недавно я заполучил очень интересную плату: Arduino SS Micro. Эта плата, внешне напоминающая Digispark Attiny 85, тем не менее является китайской версией Arduino Micro, с выведенным выходом USB.

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

Как мне кажется — это довольно крутое и удобное устройство для небольших домашних проектов, ведь у проводов есть супер-свойство: теряться в самый неподходящий момент.

В качестве управляющего компьютера был использован MacBook Pro с операционной системой macOS Mojave, но не надо закрывать статью, если вы используете Windows или Linux — всё описанное в статье будет работать без изменений на любой операционной системе.

Скетч для Arduino

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

Светодиод в Arduino SS Micro висит на порте SS, и поэтому он автоматически выключается. Не смотря на это, стандартный пример Blink — мигающий светодиод работает.

Если вы будете использовать другую Arduino — не забудьте сменить пин светодиода.

Код для компьютера

Одним из достоинств Python, кроме его кроссплатформенности — наличие гигантского числа библиотек. Нам понадобятся:

  • PySerial — библиотека для работы с Serial-портом
  • PyQT5 — библиотека для создания графического интерфейса
Установка

Для установки, воспользуемся встроенным менеджером пакетов — pip.

Для удобства создания GUI можно установить программу QTDesigner.

Интерфейс

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

Исходный код

Вся работа с устройством происходит благодаря библиотеке PySerial. Но есть несколько нюансов. Например, как узнать, в какой из портов подключено устройство?

На всем прекрасно известном сайте stackoverflow, пользователь с ником Thomas предложил уже готовое решение, которое я и использовал.

Кроме этого необходимо хранить список доступных скоростей:

А теперь соберём вместе дизайн(созданный в QtDesigner и сконвертированный с помощью утилиты pyuic5 в .py файл), функции для сканирования портов и основной код программы.

Основной класс, содержащий в себе всю логику программы

Переменные self.Port и self.Speed — это выпадающие списки, содержащие в себе значения доступных портов и скоростей.

При нажатии на кнопку self.ConnectButton вызывается функция connect, в которой производится попытка подключения к заданному порту с заданной скоростью. Если подключение успешно, то кнопка окрашивается в зелёный цвет, и меняется надпись.

Функция send отправляет в наш порт байтовую строку — заставляющую включить режим мигания.

Таким образом можно управлять различными устройствами, подключёнными к USB.

Данная статья является вводной и обзорной, более полную информацию можно найти например тут:

Как программировать и управлять Arduino с помощью Python

Python штурмом покорил мир программирования. Наряду с появлением этого нового языка процветала и сфера DIY-электроники. Платы для разработки и одноплатные компьютеры таких компаний, как Arduino и Raspberry Pi, изменили способ создания домашней электроники. Разве не было бы замечательно, если бы вы могли запрограммировать Arduino с помощью Python?

Нет ничего лучше, чем комбинировать две крутые вещи. К сожалению, невозможно напрямую запрограммировать Arduino с Python, поскольку платы не имеют возможности для бортовой интерпретации языка. Однако возможно прямое управление через USB с помощью программы Python.

Эта статья покажет вам, как настроить Arduino UNO (хотя здесь может работать любая совместимая с Arduino плата) для программирования и управления из командной строки с помощью программ Python. Это руководство написано для Windows 10, но также работает для Mac и Linux. Вы даже можете использовать этот рабочий процесс для управления Arduino непосредственно с Raspberry Pi, чтобы получить незабываемые впечатления от самостоятельной работы.

Настройка Arduino для Python

Для сегодняшнего проекта мы будем использовать Arduino Uno вместе с интерфейсом pyFirmata для Python. Для этого вы можете использовать практически любую Arduino-совместимую плату, хотя на момент написания только Arduino Uno, Mega, Due и Nano поддерживаются интерфейсом pyFfirmata. Если вы уже являетесь гуру Python, вы можете добавить поддержку собственных плат в pyFirmata — обязательно обновите их GitHub, если вы это сделаете!

Установите Arduino IDE, если вы еще этого не сделали. Если вы новичок в мире микроконтроллеров, наше руководство по Arduino для начинающих поможет вам разобраться во всем.

Подключите плату Arduino и откройте IDE. Убедитесь, что в меню Инструменты выбраны правильная плата и порт. Загрузите пример скетча StandardFirmata и загрузите его на доску. Это позволит вам управлять Arduino напрямую, если он подключен к компьютеру через USB. Если эскиз загружен на вашу доску без ошибок, вы готовы двигаться дальше.

Python и управление командной строкой

Мы будем использовать Python 3.4 для управления нашим Arduino, поскольку модуль, который вы будете устанавливать, указывает его как последнюю совместимую версию.. Любая предыдущая версия должна работать нормально, а более поздние версии, как сообщается, работают. Вы можете загрузить Python 3.4 для Windows 10 с сайта Python Software Foundation. Если вы хотите запустить несколько версий Python, наше руководство по виртуальным средам Python сможет вам помочь.

После того, как вы установили Python, мы хотим добавить его в переменную PATH вашей системы. Это позволит нам запускать код Python непосредственно из командной строки без необходимости находиться в каталоге, в котором он был установлен. Вы можете сделать это, открыв Панель управления и выполнив поиск по запросу Среда и нажмите Изменить системные переменные среды . Внизу окна выберите Переменные среды . Откроется следующее окно:

Если вы уже видите ПУТЬ в списке, нажмите «Изменить» и добавьте каталог Python и Python/Scripts . Если у вас нет переменной PATH, нажмите «Создать» и добавьте ее. Обратите внимание, что Python был установлен прямо здесь в C: . Если вы установили его в другом месте, вам необходимо изменить его, чтобы отразить это. Нажмите OK, вернувшись вниз по цепочке окон, и вы почти готовы управлять своим Arduino с помощью Python!

The Magic Grease

Вам понадобится еще один последний кусочек головоломки, чтобы Python хорошо разговаривал с нашим Arduino. Он представлен в виде интерфейса Python под названием pyFirmata . Этот интерфейс, созданный Тино де Брюйном, доступен для загрузки с github, хотя вы можете установить его прямо из командной строки, набрав:

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

Если это не удается, добавьте Python в раздел Environment Variable и убедитесь, что вы указали правильный путь к своему каталогу Python.

Making It Happen

Теперь все настроен, и вы можете создать программу Python для своего Arduino, чтобы протестировать ее. Откройте IDE по вашему выбору. Сегодня мы будем использовать Eclipse, но вы можете так же легко использовать любой текстовый редактор или даже IDE в облаке.

Создайте новый скрипт и сохраните его как blink.py . Нарушая традицию со стандартной программой мигания светодиода, вы собираетесь создать программу, которая запрашивает у пользователя количество миганий светодиода перед ее выполнением. Это небольшая программа, которую вы можете скачать здесь, если хотите сразу перейти к ней, но давайте разберемся с ней..

Во-первых, вы захотите импортировать то, что вам нужно, из pyFirmata модуль вместе со стандартным модулем Python Time .

Теперь вы захотите настроить Arduino доска. В этой статье предполагается, что вы используете плату Arduino Uno , хотя поддерживаются несколько других плат Arduino. Обратитесь к pyFirmata github для получения подробной информации о поддержке платы.

Проверьте, какой COM-порт вы используете в IDE Arduino, и введите его в свой код как переменную board .

Теперь вы настроите приглашение пользователя. Те, кто знаком с Python, узнают здесь все. Вы выводите вопрос на экран с помощью функции input и сохраняете ответ как переменную. После того, как пользователь ввел номер, программа сообщает, сколько раз мигнет светодиод.

Чтобы светодиодный индикатор мигал соответствующее количество раз, используйте для цикла . Если вы новичок в Python, позаботьтесь об отступах, так как в отличие от других языков пробелы являются частью синтаксиса. Обратите внимание, что вывод 13 — это встроенный светодиод для Arduino Uno, вам нужно будет изменить его, если ваша плата отличается.

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

Сохраните сценарий и откройте Командную строку .

Мигающие огни и другие откровения

Все готово к работе, все, что вам нужно сделать, это перейти туда, где находится скрипт, и запустить его. Сделайте это, набрав cd [путь к каталогу скрипта] , а затем набрав python blink.py .

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

Вывод программы должен выглядеть следующим образом:

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

Маленькие начинания

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

Если вы используете дома Linux-сервер, этот метод связи с платами Arduino может превратить этот сервер в полноценную систему домашней автоматизации DIY. Комбинируя сценарии Python, управляющие микроконтроллером, со схемой автоматизации DIY, ваш ящик для хранения NAS может взять на себя совершенно новый набор полезных функций.

Чтобы сделать его идеальным для самостоятельной работы, почему бы не создать свой собственный NAS-блок и использовать его для управления своими приборами. ? Представьте, как круто было бы нажать кнопку воспроизведения на вашем сервере Plex, и свет погаснет автоматически!

Вы уже управляете Arduino с помощью Python? Есть ли удивительные обходные пути, о которых мы еще не знаем? Дайте нам знать в разделе комментариев ниже!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *