Управлявайте лесно своя Arduino чрез мрежата

За работа имаме нужда от: - HTTP сървър - интерпретатор на python - Arduino

Сега по ред. Като HTTP сървър използвам Apache. Инсталирането му не е трудно. Ако сте съвсем нов и използвате windows, тогава можете да вземете пакета Denwer от официалния сайт, той съдържа Apache. Python (използвах версия 3.3) също може да бъде изтеглен от официалния сайт и инсталиран. Сега трябва да направим нашите Apache и python приятели. Най-лесният начин е да стартирате python като cgi. За да направите това, отворете файла httpd.conf в папката conf на мястото, където сте инсталирали вашия apache (ако сте инсталирали denwer, пътят ще бъде нещо като това: [буква на виртуално устройство]:\usr\local\bin\apache)

AddHandler cgi-скрипт .cgi

Добавяме .py в края с интервал и се уверяваме, че няма знак # в началото на реда. Запазете, рестартирайте сървъра. Сега, за да тествате близкото приятелство между pythone и apache, можете да създадете тестов файл и да го поставите в домашната си папка.

Единственото нещо, което трябва да се промени тук, познахте, е портът, към който сте свързали arduino. Винаги може да се види в Windows с помощта на диспечера на устройствата. Ще го предадем на нашия скрипт на Python, за да знае към кой сериен порт да изпрати получените данни. Сега, ако извикаме нашата функция, например: Arduino(123), тогава скриптът ще създаде ajax заявка като c.py?c=123&p=COM5 и ще я изпрати на нашия Python скрипт c.py. Нека да разгледаме какво представлява:

Всъщност той просто взема стойността на параметъра "c", предава я на серийния порт "p" и пише "ok". Евтино и весело.

Нека подобрим малко нашата клиентска страна.

След като превърнахме Arduino в клас, най-простото извикване би било нещо подобно:

И, разбира се, имате нужда от малкопромяна на страната на сървъра:

Тук почти нищо не се е променило, освен че когато сървърът получи параметъра r=1 в заявката, той очаква отговор от Arduino. И добавихме проверка, за да видим дали нашият скрипт е успял да отвори серийния порт. Ако не, ще върне ключовата дума "грешка"

Сега нека да разгледаме скица на arduino, която приема и обработва всичко това:

На серийния порт ще изпратим команди във формата: 1234567, където: [1] е номерът на командата [23] е номерът на ПИН [4567] са данните за ПИН, ако е необходимо. Например: 113 - ще настрои пин 13 към изхода и ще предаде на него състояние HIGH (т.е. ще го включи). 013 - задава пин 13 на изхода и му предава LOW състояние (т.е. изключва го). 209100 - Задайте пин 9 като серво контрол и му дайте стойност 100 чрез PWM модулация. 310 - задава пин 10 за въвеждане и чете HIGH / LOW данни от него и връща като 1 или 0 съответно. Можете лесно да добавите свои собствени команди към блока за превключване на регистъра. Сега нека добавим малко красота към нашата предна част и да получим нещо подобно

След това добавих малко магия на потребителския интерфейс. Но няма да го описвам, всеки който се интересува може да си го вземе от архива с проекта. За уеб частта използвах Bootstrap (единствено поради удобството и неговата „плавност“) и jQuery (за ajax). Сега да видим как работи. Първо трябва да посочите на кой порт е вашето устройство и колко пина има. След това изберете на кой щифт имате това, което се намира, и продължете към управлението.

Архив с проекта За да стартирам на iPad на цял екран, използвах безплатната програма oneUrl

UPD: По искане на работниците тествах този метод и на MacOS. Нямаше особени проблеми. На poppy обикновено вече има python по подразбиране, единственото нещо, от което се нуждаететрябва да се сприятелиш с apache. Първият ред в c.py ще бъде #!/usr/bin/python Също така може да нямате инсталирано разширение pyserial python, то се инсталира с проста команда в конзолата:

Замених го с

Всичко работеше. Не забравяйте да погледнете към кой порт ще се свърже вашето устройство. Удобно е да видите това чрез самата програма Arduino, например. Меню Инструменти->Сериен порт. Например, за мен изглеждаше така: /dev/cu.usbmodemfd141 Желая ви успешни експерименти.

И тук можете да получите грант за тестов период на Yandex.Cloud. Необходимо е само да въведете "Habr" в полето "секретна парола".