[Из песочницы] Как я наступил на грабли и разобрался с NanoPi2

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

Аналог микрогонки и гонки тарантасов. Оба этих проекта заглохли, по тем или иным причинам.

Начал я подбирать одноплатник, который бы наиболее подошел для данного проекта. Можно было бы использовать virt2real или Raspberry PI, ну или на крайний случай tp-link tl-mr3020 c CyberWRT на борту.

Но мне на глаза попалась плата NanoPi2, которая, как я подумал тогда, является полным клоном Raspberry PI, только по размерам по меньше, ну и с WI-FI на борту.

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

Но худо-бедно через 1,5 месяца платы пришли ко мне. Хочу отдать должное китайцам, когда я заказывал у них дополнительно камеры к данной плате, они пришли за 1,5 недели.

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

Первое глубокое разочарование меня постигло, когда я не смог подключить камеру Logitech c270. Я пробовал различные программы под Debian, который у меня установлен в качестве операционной системы. В конце концов, я добился трансляции видеопотока в сетку, оказалось что в программе Motion изменился конфигурационный файл, и те переменные которые надо было изменять назывались уже по другому. Рабочий конфигурационный файл для Motion выкладываю тут

Установка motion проста до безобразия.

----------- Обновляемся ----------- # apt-get update # apt-get upgrade ----------- Устанавливаем Motion ----------- # apt-get install motion ----------- Проверяем, подключена ли камера (рекомендую самую простую Logitech c270). ----------- #lsusb ----------- 

Консоль выдает нам что-то типа этого.

Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 001 Device 002: ID 046d:0825 Logitech, Inc. Webcam C270 Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub 

Где 2-я строка показывает нам, что камера подключена к нашему компьютеру.

Дальше нам следует исправить конфигурационный файл.

Проходим в папку /etc/motion и заменяем файл motion.conf (тем, который я выложил выше по ссылке). Для этого я использую WinSCP.

Ну а дальше началось самое интересное, нужно было как-то управлять выходами GPIO. Как я и написал раньше, плата оказалась неполным клоном Raspberry Pi. Так что все библиотеки для работы с GPIO, от малинки оказались за бортом.

Я нашел 2 библиотеки matrix-python и matrix. Но к сожалению обе библиотеки мне не очень подошли.

В первой был функционал для работы с GPIO, но не было функционала работы с PWM для подключения сервопривода. Вторая же вовсе оказалась на Си, а я с сями не очень дружу.

В общем начал разбираться с ctypes, сразу скажу копий было переломано не мало, подключится к библиотеке получилось, но вызовы функций, возвращали различные ошибки типа контакт не может быть использован. Я даже начал искать фрилансера, который бы мне помог сделать обертку для библиотеки matrix, пару человек нашел но они были заняты и у меня ни как не было времени конкретно переговорить с человеком по скайпу. И тут меня осенило, надо полностью повторить код, который приводился в качестве примера на С.

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

Программа работы с PWM на Python.

import os import time from ctypes import * lib = cdll.LoadLibrary('/root/matrix-master/lib/libfahw.so') lib.boardInit() os.system("modprobe matrix_pwm") lib.PWMPlay(0, 1000, 1) time.sleep(5) i = 1 while i < 1000:     print(i)     i = i + 10     time.sleep(1)     lib.PWMPlay(0, 1000, i) lib.PWMStop(0) 

Программа работы с GPIO на Python.

import os import time from ctypes import * lib = cdll.LoadLibrary('/root/matrix-master/lib/libfahw.so') lib.boardInit() os.system("modprobe matrix_gpio_int") lib.exportGPIOPin(22) lib.setGPIODirection(22, 2) lib.setGPIOValue(22, 1) time.sleep(5) lib.setGPIOValue(22, 0) lib.unexportGPIOPin(22) print 222 

Соответственно, чтобы начать работать с библиотекой, надо её скачать с сайта и инсталлировать.

На данный момент уже развернул сервер на Flask, на NanoPi2 и уже приступаю к подключению сервопривода и двигателя сломанной машинки сына.

Источник

NanoPi2, клон Raspberry Pi

Читайте также