Как я наступил на грабли и разобрался с NanoPi2

в 18:31, , рубрики: diy или сделай сам, NanoPi2, Raspberry Pi, клон Raspberry Pi, робототехника, метки: ,

Примерно 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 и уже приступаю к подключению сервопривода и двигателя сломанной машинки сына.

Автор: DEM_dwg

Источник

Поделиться новостью

* - обязательные к заполнению поля