Отправка сигнала из сериала Arduino в программу Python - PullRequest
0 голосов
/ 13 февраля 2019

Я новичок в Python и Raspberry Pi и надеялся использовать их для проекта с Arduino.По сути, я хочу нажать кнопку, подключенную к Arduino, и затем на этом входе воспроизвести видеофайл на Raspberry Pi.

У меня возникли некоторые трудности при использовании последовательных данных.Я могу связать последовательные сообщения между Arduino и Pi, например: «Hello World», но не могу понять, как открыть видеофайл.Прямо сейчас, когда я запускаю код Python, ничего не появляется, и нажатия кнопок не реагируют.У меня есть правильный порт USB, так как он работает с другими программами, которые печатают только последовательные данные.Как именно я могу решить эту проблему?

Короче говоря, конечная цель - «Нажать кнопку -> воспроизвести видео».

Код Arduino:

int pushButton=2;
int buttonState=0;

void setup()
{
    serial.Begin(9600);
    pinMode(pushButton, INPUT);
}

void loop()
{
    int buttonState=digitalRead(pushButton);
    if (buttonState==HIGH)
    {
        Serial.println("a");
        delay(100);
    }
    if (buttonState==LOW)
    {
        //do nothing
    }
}

Код Python:

import sys
import os
from subprocess import Popen
import serial

movie1=("/home/pi/Videos/test.mp4")

ser = serial.Serial('/dev/ttyUSB0',9600)

while True:
    data = ser.read()

    if data=="a":
        os.system('killall omxplayer.bin')
        print("a")
        omxc = Popen(['omxplayer','-b', movie1])

1 Ответ

0 голосов
/ 13 февраля 2019

Сначала я думаю, что нет необходимости посылать строки для связи в последовательном режиме, вы можете просто отправить байты.Проблема в том, что когда вы используете Serial.println("Something"), вы отправляете Something\r\n, поэтому на другом устройстве вы должны проверить его с помощью Something\r\n, и, как сказано в комментариях, вы можете поставить отладочную распечатку, чтобы убедиться, что ваши данные живы исвязь в порядке.Вы также можете добавить подтверждение в свой код Python, чтобы ответить на команду, чтобы убедиться, что данные были отправлены и не отправлять другие.Код Arduino:

int pushButton=2;
int buttonState=0;

void setup()
{
    serial.Begin(9600);
    pinMode(pushButton, INPUT);
}

void loop()
{
    int buttonState=digitalRead(pushButton);
    if (buttonState==HIGH)
    {
        Serial.print('1');
        delay(100);
    }
    if (buttonState==LOW)
    {
        //do nothing
    }
}

Код Python:

from subprocess import Popen
import serial

movie1 = "/home/pi/Videos/test.mp4"

ser = serial.Serial('/dev/ttyUSB0',9600)

while True:
    command = ser.read()
    if command:
        # flush serial for unprocessed data
        ser.flushInput()
        print("new command:", command)
        if str(command) == '1':
            print("Playing movie")
            Popen('killall omxplayer.bin')
            Popen(['omxplayer','-b', movie1])
        else:
            print("Not a valid command")
...