среда, 5 марта 2014 г.

Управление arduino с компьютера

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


Программа будет писаться на python. Этот язык является open source проектом. Есть версии интерпретатора python для различных платформ. Если в программе написанной на python не используются специфические возможности конкретной платформы, то эта программа будет работать везде, где установлен интерпретатор python.

Начать нужно с установки интерпретатора. Для windows его можно найти перейдя по ссылке http://python.org/downloads/windows/ Я использую python 2.7 Вот только для работы с ардуино этого недостаточно. Еще необходимо установить модуль http://pyserial.sourceforge.net/ Есть несколько версий под разные платформы. Тут главное не перепутать :-)

Привожу текст программы

#!/usr/bin/env python
# -*- coding: cp1251 -*-

import serial

# COM14, 9600 bps, 8 data bits, no parity bit, 1 stop bit
ser = serial.Serial(13,
                    9600,
                    bytesize = serial.EIGHTBITS,
                    parity = serial.PARITY_NONE,
                    stopbits = serial.STOPBITS_ONE,
                    timeout = 1)

print ser, '\n' # print port information

while 1 :

    try :

        data = raw_input('--> ')

    except KeyboardInterrupt :

        break

    ser.write(data)

    data = ser.read()

    print '<-- ' + data

ser.close() # close port

Откройте "блокнот" (notepad), вставте текст программы, сохраните документ с расширением .py Всё. Но работать в специализированном редакторе намного приятнее.

Чтобы запустить программу, нужно кликнуть правой кнопкой мышки на файле. В открывшемся меню следует навести курсор мышки на пункт "открыть с помощью". И там уже кликнуть левой кнопкой мышки на "python".

Есть еще один вариант. Запускаете программу "командная строка" (cmd). И там пишите, что то вроде

C:\Python27\python.exe C:\justforduino\usb.py

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

Теперь нажимаете enter и наслаждаетесь результатом.

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

А так выглядит работа программы


Завершается работа программы нажатием Ctrl + C

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

Сразу скажу о том, что отступы в python делают не для красоты. Это необходимые элементы языка. В python они выполняют ту же функцию, что и фигурные скобки в C/C++. Правда есть некоторые нюансы.

#!/usr/bin/env python

Эта строка кода нужна для того, чтобы программа выполнялась, например, в linux. В windows она не нужна, но она и не мешает.

# -*- coding: cp1251 -*-

Эта строка сообщает компилятору о том, в какой кодировке записана программа. У меня это windows1251.

import serial

Этой строчкой выполняется подключение к проекту модуля serial. Он необходим для работы с COM портами.

ser = serial.Serial(13,
                    9600,
                    bytesize = serial.EIGHTBITS,
                    parity = serial.PARITY_NONE,
                    stopbits = serial.STOPBITS_ONE,
                    timeout = 1)

Здесь производится открытие порта COM14. Именно этот порт моя windows предоставила Arduino Uno. Номер порта можно узнать в Arduino IDE. Для обмена данными используется тот же порт, что и для загрузки скетча в ардуино. Только в программе на питоне используется один номер. Без COM. И нумерация начинается с ноля. Таким образом, COM1 соответствует номер 0. И так далее. Скорость обмена данными составляет 9600 bps. Данные передаются по восемь бит (один байт). Бит паритета не используется. Завершается передача данных одним стоп битом. Всё как в программе для ардуино. В противном случае компьютер и ардуино не поймут друг друга. Последний параметр определяет время в течении которого программа будет ждать поступления данных от ардуино. Я установил время ожидания в одну секунду.

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

print ser, '\n'

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

while 1 :

Бесконечный цикл.

try :

Элемент обработки исключений в python.

data = raw_input('--> ')

Этим кодом формируется строка запроса. Данные введенные пользователем помещаются в переменную data.

except KeyboardInterrupt :

Здесь предусматривается обработка исключения возникающего при нажатии Ctrl + C

break

Выход из бесконечного цикла.

ser.write(data)

Этой строкой выполняется передача данных через COM порт.

data = ser.read()

Полученные от ардуино данные записываются в переменную data.

print '<-- ' + data

Переменная data выводится на монитор.

ser.close()

Здесь порт закрывается.

Еще нужно сказать, что комментарии в python начинаются с символа '#' Это то же самое, что '//' в C/C++.

Вообще у python не плохая документация. На английском языке её можно найти на http://python.org/