0

作为代码和 python 的新手,我很难在 Motioneye 监控软件中集成按钮来控制 Pimoroni 平移倾斜帽。我找到了 adafruit PCA9685 伺服控制器的代码,当按下按钮时会调用一个 bash 脚本。然后,bash 脚本将调用一个 python 脚本,只要按下按钮,它就会连续平移或倾斜伺服,这是我想做的事情。不幸的是,我不知道要改变什么才能使它与 Pimoroni 伺服系统一起工作。

Motioneye https://github.com/ccrisan/motioneye/wiki

吊带帽 https://shop.pimoroni.com/products/pan-tilt-hat

使用 adafruit PCA9685 伺服控制器控制运动眼中的平移倾斜的脚本 https://github.com/luetzel/motion_eye_servo_action

我试图更改代码中的 GPIO 引脚,并将 pantilthat 导入代码中。但是,这似乎不起作用。那会让我

Remote I/O error

下面是一个向下倾斜的示例代码。这同样适用于 Adafruit PCA9685 驱动程序。

如果有人可以帮助我使用 pimoroni 进行这项工作,或者为我指明正确的方向,我将不胜感激!

亲切的问候基尔斯特

#!/usr/bin/env python
from __future__ import division
import time

# Import the PCA9685 module.
import Adafruit_PCA9685
import RPi.GPIO as GPIO
import pantilthat
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)

# power-up servo controller
GPIO.setup(18, GPIO.OUT)
GPIO.output(18, 0)
time.sleep(.5)

# Initialise the PCA9685 using the default address (0x40).
pwm = Adafruit_PCA9685.PCA9685()

# Configure min and max servo pulse lengths (450 total, 25 corresponds to 10 degrees)
servo_min = 225  # Min pulse length out of 4096
servo_max = 725  # Max pulse length out of 4096

with open('/etc/motioneye/vert_pos', 'r') as f:
    vert_pos = int(f.readline())
    print vert_pos
    f.close()

# Set frequency to 60hz, good for servos.
pwm.set_pwm_freq(60)

if ( vert_pos != servo_max ):
        vert_pos += 25
        pwm.set_pwm(0, 0, vert_pos)
        with open('/etc/motioneye/vert_pos', 'w') as f:
            f.write(str(vert_pos))
            f.close()

# power-up servo controller
time.sleep(.5)`
GPIO.output(18, 1)

raise SystemExit```


4

1 回答 1

0

我不确定是否可以完全按照您的要求进行操作。motioneye 中的操作按钮只需运行一个脚本,如果您想进一步移动相机,您必须再次按下按钮而不是按住它。然而,让动作按钮与 pantilt hat 一起使用非常简单。首先,我假设您已经启动并运行了 raspberry pi 运行拉伸。如果是这样,那么在“/etc/motioneye”目录中创建一个名为“left_1”的文件接下来编辑它并添加以下内容:

#!/bin/bash
/usr/bin/python3 /etc/motioneye/left.py

现在使该文件可执行: sudo chmod 777 left_1

现在使用以下代码创建 left.py:

#!/usr/bin/python

import time
import pantilthat

currentPos = pantilthat.get_servo_one()
newPos = currentPos +20
if newPos >= 80: newPos = 80
pantilthat.servo_one(newPos)
time.sleep(1)

这里要注意的一件事,80 是我可以向左移动的最大值,测试你的对于正确的做同样的事情,但要适当地命名文件,right.py 的代码是:

#!/usr/bin/python

import time
import pantilthat

currentPos = pantilthat.get_servo_one()
#print (currentPos)
newPos = currentPos - 20
if newPos <= -80: newPos = -80
pantilthat.servo_one(newPos)
time.sleep (1)

up 和 down 相同,只是将 'servo_one' 更改为 'servo_two'</p>

最后,有一个按钮可以将相机移回“0”是很有用的。为此,请使用以下内容创建一个名为“preset1_1”的文件:

#!/bin/bash
/usr/bin/python3 /etc/motioneye/reset.py

和一个名为 'reset.py' 的 py 文件:

#!/usr/bin/python

import time
import pantilthat

pantilthat.servo_one(0)
pantilthat.servo_two(0)
time.sleep(1)

祝你好运!

于 2019-05-15T22:14:41.037 回答