Arduino Yun - 来自.ino脚本崩溃的进程

时间:2016-02-24 18:22:04

标签: python arduino-yun

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

基本上,我在串口监视器中看到我的relayValue打印,然后我再次看到" Starting .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'))

Arduino脚本:( media()函数只写入LED屏幕)

#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);
  }        
}

0 个答案:

没有答案
相关问题