Как запустить питона код с Params с использованием Java, ./AdafruitDHT.py 22 4

голоса
1

Здравствуйте. Я пытаюсь установить raspbian работать с датчиками (например , DHT22 температуры и влажности) из них. Найдено библиотека с драйверами писала в Python https://github.com/adafruit/Adafruit_Python_DHT и установлено в моей малине 3 B + с необходимым librares для работы. Для запуска этого датчика с помощью LXTerminal должны ввести

cd /home/pi/Adafruit_Python_DHT/examples
./AdafruitDHT.py 22 4

эти цифры PARAMS должно работать: 22 указать, какой контроллер им с помощью теперь, как 22 - DHT22, 4 указать, какой GPIO цапфу raspberrypi им использует в настоящее время

Все его прекрасно, пока им с помощью так, возвращает «Temp = 20,1 ° Влажность = 59,8%». Но нужно поместить эти строки в консоли простой программы Java для работы. Найдено что-то близкое к нему, как этот сценарий

Test.java

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class Test {

    public static void main(final String[] args) throws IOException, InterruptedException {
        //Build command
        List<String> commands = new ArrayList<String>();
        commands.add(./Adafruit.py);
        //Add arguments
        commands.add(22 4);
        System.out.println(commands);

        //Run macro on target
        ProcessBuilder pb = new ProcessBuilder(commands);
        pb.directory(new File(/home/pi/Adafruit_Python_DHT/examples));
        pb.redirectErrorStream(true);
        Process process = pb.start();

        //Read output
        StringBuilder out = new StringBuilder();
        BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
        String line = null, previous = null;
        while ((line = br.readLine()) != null)
            if (!line.equals(previous)) {
                previous = line;
                out.append(line).append('\n');
                System.out.println(line);
            }

        //Check result
        if (process.waitFor() == 0) {
            System.out.println(Success!);
            System.exit(0);
        }

        //Abnormal termination: Log command parameters and output and throw ExecutionException
        System.err.println(commands);
        System.err.println(out.toString());
        System.exit(1);
    }
}

На этом пути я знаю, что это на самом деле работает часть пути и частично AdafruitDHT.py (она возвращает строку использовать соответствующую команду, как

./AdafruitDHT.py 22 4

я не могу сделать что-то вроде

commands.add(./Adafruit.py 22 4);

потому что он вернется, что Тереза ​​нет программки, как этот.

Короче говоря - нужно Пересоздать этот код propertly работать с PARAMS им добавлять, но ... ... есть на самом деле второй способ исправить это, но нужно Пересоздать этот AdafruitDHT.py файл, чтобы получить постоянную Params (22 4), но не знаю, как это сделать. Скрипт содержит код:

AdafruitDHT.py

import sys

import Adafruit_DHT


# Parse command line parameters. sensor_args = { 
                '11': Adafruit_DHT.DHT11,
                '22': Adafruit_DHT.DHT22,
                '2302': Adafruit_DHT.AM2302 } if len(sys.argv) == 3 and sys.argv[1] in sensor_args:
    sensor = sensor_args[sys.argv[1]]
    pin = sys.argv[2] else:
    print('usage: sudo ./Adafruit_DHT.py [11|22|2302] GPIOpin#')
    print('example: sudo ./Adafruit_DHT.py 2302 4 - Read from an AM2302 connected to GPIO #4')
    sys.exit(1)

# Try to grab a sensor reading.  Use the read_retry method which will retry up
# to 15 times to get a sensor reading (waiting 2 seconds between each retry). humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)

# Un-comment the line below to convert the temperature to Fahrenheit.
# temperature = temperature * 9/5.0 + 32

# Note that sometimes you won't get a reading and
# the results will be null (because Linux can't
# guarantee the timing of calls to read the sensor).
# If this happens try again! if humidity is not None and temperature is not None:
    print('Temp={0:0.1f}*  Humidity={1:0.1f}%'.format(temperature, humidity)) else:
    print('Failed to get reading. Try again!')
    sys.exit(1)
Задан 08/04/2018 в 19:30
источник пользователем
На других языках...                            


1 ответов

голоса
0

Хорошо, это один скрипт работает;)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        String[] command = new String[]{"/home/pi/Desktop/dht22/examples/AdafruitDHT.py","22","4"};

        Process proc = new ProcessBuilder(command).start();
        try {
            proc = Runtime.getRuntime().exec(command);
        } catch (IOException e) {
            e.printStackTrace();
        }

        BufferedReader reader =
                new BufferedReader(new InputStreamReader(proc.getInputStream()));

        String line = "";
        while ((line = reader.readLine()) != null) {
            System.out.print(line + "\n");
        }

        try {
            proc.waitFor();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
Ответил 15/04/2018 в 12:55
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more