Python Arduino Yun-从.ino脚本调用的进程崩溃

Python Arduino Yun-从.ino脚本调用的进程崩溃,python,arduino-yun,Python,Arduino Yun,我有一个python脚本在循环中运行。每当它通过桥接器传递值2、3或4时(从.ino脚本触发中继),python脚本就会崩溃 基本上,我看到我的relayValue在串行监视器中打印,然后我多次看到“再次启动.py脚本”,我的继电器从未触发 奇怪的是,我可以使用PuTTY通过SSH连接到Yun中,并手动调用我的python脚本,这样就可以了。当我尝试从arduino自动启动python脚本时,python脚本不起作用 Python脚本: from ftplib import FTP import

我有一个python脚本在循环中运行。每当它通过桥接器传递值2、3或4时(从.ino脚本触发中继),python脚本就会崩溃

基本上,我看到我的relayValue在串行监视器中打印,然后我多次看到“再次启动.py脚本”,我的继电器从未触发

奇怪的是,我可以使用PuTTY通过SSH连接到Yun中,并手动调用我的python脚本,这样就可以了。当我尝试从arduino自动启动python脚本时,python脚本不起作用

Python脚本:

from ftplib import FTP
import datetime
import sys

sys.path.insert(0, '/usr/lib/python2.7/bridge')
from bridgeclient import BridgeClient as bridgeclient
from time import sleep

# Initialize vars
ftpIP = 'XXXXXXXXXXXXXX'  # Internal IP
# ftpIP = 'XXXXXXXXXXXXXXXXX'   #External IP
ftpDirectory = '3990548'
value = bridgeclient()
value.put('relay', '0')
status = 'Disarmed'



# Initialize FTP
ftp = FTP(ftpIP)
ftp.login(XXXXXXXXXXXXXXXXXXX)
ftp.cwd(ftpDirectory)




# Loop
while (1):

    #Don't eat all CPU cycles
    sleep(0.01)

    # Define minute and second, each loop iteration
    rawTime =   datetime.datetime.now()
    fmtTime =   rawTime.strftime("%m/%d/%Y %H:%M:%S")
    date =      datetime.date.today()
    hour =      rawTime.hour
    minute =    rawTime.minute
    second =    rawTime.second
    month =     date.month
    day =       date.day
    year =      date.year

    fileDate =  rawTime.strftime("%m%d%y")
    fileName =  '{}.txt'.format(fileDate)
    filePath =  'tadtest/{}'.format(fileName)


    # Keep FTP alive
    if (second == 30):
        ftp.voidcmd('NOOP')

        value.put('relay', '9')
        print value.get('relay')
        sleep(1)
        value.put('relay', '0')

    ### Alarm System ###
    if (second <= 5 and (minute == 0 or minute == 20 or minute == 40)):

        # Write to file
        with open(filePath, "a+") as myFile:
            myFile.write('SensorAlarm, {}\n'.format(fmtTime))

        if (status == 'Disarmed'):
            # Trigger Keyfob Relay Arm (3)
            value.put('relay', '3')
            print value.get('relay')
            sleep(5)
            value.put('relay', '0')

            print "Arm"
            status = 'Armed'

        elif (status == 'Armed'):
            # Trigger Contact Sensor Relay
            value.put('relay', '2')
            print value.get('relay')
            sleep(5)
            value.put('relay', '0')

            print "Alarm"
            status = 'Armed'

        else:
            print "Error in Alarm (Arm) 'if' statement"

        # Write to FTP
        ftp.storbinary('STOR {}'.format(fileName), open('/mnt/sda1/{}'.format(filePath), 'rb'))




    ### Disarm System ###
    if (second <= 5 and (minute == 5 or minute == 25 or minute == 45)):

        # Write to file
        with open(filePath, "a+") as myFile:
            myFile.write('OpeningReport, {}\n'.format(fmtTime))

        # Trigger Keyfob Relay Disarm (4)
        value.put('relay', '4')
        print value.get('relay')
        sleep(5)
        value.put('relay', '0')

        print "Disarm"
        status = 'Disarmed'

        # Write to FTP
        ftp.storbinary('STOR {}'.format(fileName), open('/mnt/sda1/{}'.format(filePath), 'rb'))




    ### Arm System ###
    if (second <= 5 and (minute == 8 or minute == 30 or minute == 50)):

        # Write to file
        with open(filePath, "a+") as myFile:
            myFile.write('ClosingReport, {}\n'.format(fmtTime))

        # Trigger Keyfob Relay Arm (3)
        value.put('relay', '3')
        print value.get('relay')
        sleep(5)
        value.put('relay', '0')

        print "Arm"
        status = 'Armed'

        # Write to FTP
        ftp.storbinary('STOR {}'.format(fileName), open('/mnt/sda1/{}'.format(filePath), 'rb'))
从ftplib导入FTP
导入日期时间
导入系统
sys.path.insert(0,“/usr/lib/python2.7/bridge”)
从bridgeclient将bridgeclient导入为bridgeclient
从时间上导入睡眠
#初始化变量
ftpIP='XXXXXXXXXXXXX'#内部IP
#ftpIP='XXXXXXXXXXXXXXXXXX'#外部IP
FTP目录='3990548'
value=bridgeclient()
value.put('relay','0')
状态=‘解除防护’
#初始化FTP
ftp=ftp(ftpIP)
ftp.login(xxxxxxxxxxxxxxxx)
ftp.cwd(ftp目录)
#环路
而(一):
#不要吃掉所有的CPU周期
睡眠(0.01)
#定义每一次循环迭代的分钟和秒数
rawTime=datetime.datetime.now()
fmtTime=rawTime.strftime(“%m/%d/%Y%H:%m:%S”)
date=datetime.date.today()
小时=rawTime.hour
分钟=rawTime.minute
秒=rawTime.second
月=date.month
day=日期.day
年份=日期。年份
fileDate=rawTime.strftime(“%m%d%y”)
fileName='{}.txt'。格式(fileDate)
文件路径='tadtest/{}'。格式(文件名)
#保持FTP活动
如果(秒=30):
ftp.voidcmd('NOOP')
value.put('relay','9')
打印值。获取('relay')
睡眠(1)
value.put('relay','0')
###报警系统###

如果(秒),另一件奇怪的事情是,串行监视器打印“0”表示0,而打印“99T”表示99。好的,我发现一个问题是我试图发送“99”-2个字节-从python脚本到arduino脚本中的1个字节字符。但是仍然不起作用。好的,还有更多的信息。这里真正的问题是当调用任何中继时,.py脚本崩溃-但是只有在从arduino端调用脚本时才会发生崩溃。
#include <Bridge.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>

//Define LCD variables
#define TFT_CS    7
#define TFT_RST   8
#define TFT_DC    9
#define TFT_SCLK 10
#define TFT_MOSI 11
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
int crsr=0;
uint16_t mcolor=ST7735_RED;

Process p;

//Here we hold values coming from the bridge
char relayValue[2] = {0};

int previousRelayInt = 100;


void setup() {
  Bridge.begin();
  Serial.begin(9600);

  //Relay pins
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(13, OUTPUT);

  //Zero out memory used for relay value
  memset(relayValue, 0, 2);

  //Initialize pins 
  digitalWrite(2, HIGH);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(13, LOW);

  //Initialize screen to be black
  tft.initR(INITR_BLACKTAB);
  tft.fillScreen(ST7735_BLACK); 
}




void loop() {

  if (p.running()==0)
  {
  p.runShellCommandAsynchronously("python /mnt/sda1/ftp_test.py");
  Serial.println("Started .py script again");
  }

  Bridge.get("relay", relayValue, 2);
  int relayInt = atoi(relayValue);


  if (relayInt==previousRelayInt)
  {
  }
  else if (relayInt!=previousRelayInt)
  {
    printTFT(relayValue);
    Serial.println(relayValue);
    previousRelayInt = relayInt;
  }






  if (relayInt == 0) 
  // Do nothing
  { 
  }

  else if (relayInt == 2) 
  //Trigger Contact Sensor - Alarm
  {
    digitalWrite(2, LOW);
    printTFT(relayValue);
    delay(4000);
    digitalWrite(2, HIGH);
    delay(4000);

    mediaAlarm();    
  }

  else if (relayInt == 3) 
  //Trigger Keyfob - Arm
  {
    digitalWrite(3, HIGH);
    printTFT(relayValue);
    delay(4000);
    digitalWrite(3, LOW);
    delay(4000);

    mediaArm();
  }

  else if (relayInt == 4) 
  //Trigger Keyfob - Disarm
  {
    digitalWrite(4, HIGH);
    printTFT(relayValue);
    delay(4000);
    digitalWrite(4, LOW);
    delay(4000);

    mediaDisarm;
  }

  else if (relayInt == 9) 
  //Blink LED
  {
    digitalWrite(13, HIGH);
    printTFT(relayValue);
    delay(4000);
    digitalWrite(13, LOW);
    delay(4000);
  }        
}