Проблемы с управлением Picamera с помощью сообщений MQTT - PullRequest
0 голосов
/ 05 марта 2020

Я пытаюсь начать запись камеры, используя Pi Zero W (который действует как клиент MQTT) при получении сообщения, и остановить запись при получении сообщения остановки. Ниже приведен мой код:

continueRecording = 1

Broker = "192.168.0.105"

pub_topic = "picamera1"

sub_topics = ["Rpi_Master", 0]

def on_connect(client, userdata, flags, rc):
    if rc == 0:
        pass
    else:
        print("Bad Connection with result code: " + str(rc))
    for topic in sub_topics:
        client.subscribe(topic)

def on_message(client, userdata, msg):
    global message_topic, message
    global continueRecording
    message = str(msg.payload.decode("utf-8"))
    print("Received message is" + message)
    message_start = str(message[:4])
    print("Command to start recording is " + message_start)
    if message_start == "shop":
        print("Enter shop")
        with picamera.PiCamera as camera:
            camera.resolution = (640, 480)
            camera.framerate=20
            camera.start_recording("/home/pi/camera-recording/shop/shoprecording.h264")
            time.sleep(0.5)
            while continueRecording == 1:
                camera.wait_recording(.01)
                if message == "OK":
                    print("Stopping to record")
                    camera.stop_recording()
                    continueRecording = 0

def on_publish(mosq, obj, mid):
    pass

# on mqtt disconnection#
def on_disconnect(client, userdata, rc):
    if rc == 0:
        pass
    elif rc != 0:
        print("Unexpected MQTT disconnection. Will try to reconnect")
        try:
            client.username_pw_set(username="ab", password="abcdef")
            client.connect(Broker, 1883, 60)
        except:
            print("Error in trying to reconnect with the Broker")

# mqtt client broker Connection
def clientBrokerConnection():
    print("Client Broker Function Running")
    global client
    client = mqtt.Client("piCamera1")  # creating a new instance
    ##Defining the callback functions
    client.username_pw_set(username="pi", password="lotus56789")
    client.on_connect = on_connect
    client.on_message = on_message
    client.on_publish = on_publish
    client.on_disconnect = on_disconnect
    ##End of callback functions
    client.connect(Broker, 1883, 60)  # Connecting to Broker
    client.loop_start()


clientBrokerConnection()

Проблема, с которой я сталкиваюсь, заключается в том, что Pi получает правильное сообщение для начала записи, но не может ввести with picamera.PiCamera as camera: l oop, а запись не Начните. Компилятор не показывает никаких ошибок в коде. Я не могу понять, почему запись не начинается. Я проверил камеру, и она отлично работает. Спасибо за вашу помощь и время заранее.

...