2017-01-14 10 views
2

Я использую малиновый PI (Jessi) для отправки строки шестнадцатеричных символов на устройство с использованием последовательного порта (от USB к последовательному порту). Я успешно использовать следующую команду из командной строки:Запись шестнадцатеричного в последовательный порт из PHP

echo -en "\x63\x69\x72\x62\x0d" > /dev/ttyUSB0 

Я хочу сделать то же самое с помощью PHP на том же Raspberry Pi, но когда я пытаюсь послать ту же команду из PHP-файла я не получаю желаемый результат. Пример PHP код:

var_dump(shell_exec('echo -en "\x63\x69\x72\x62\x0d" > /dev/ttyUSB0')); 

Я пробовал много вещей, чтобы получить эту работу:

  • я добавил WWW-данных (PHP пользователей) для группы исходящих звонков (группа для/DEV/ttyUSB0)
  • Я поставил CHMOD 777 для/DEV/ttyUSB0
  • Я проверил, что PHP можно написать/DEV/ttyUSB0 (is_writable())
  • Я пробовал много различных настроек Stty (например: Запущенная -F/de v/ttyUSB0 -isig -icanon)
  • Я пробовал разные способы в PHP писать на последовательный порт (PhpSerial library, pack() и fwrite(), printf() и т. д.) Между прочим.

Я не нашел способ, чтобы увидеть именно то, что PHP пишет в/DEV/ttyUSB0 (экран, Миником), но я знаю, что это что-то делает, так как после того, как я попробовал PHP-скрипт в следующий раз, когда я пытаюсь от командной строки это не сработает. Во второй раз, после попытки PHP, попытка из командной строки прошла успешно.

Я попытался запустить файл PHP из командной строки (CLI, PHP5 и PHP7) и использовать веб-сервер, но ничего не работает.

Я пробовал все, что мог придумать, и нашел его в Интернете, но я все еще не могу заставить его работать.

Что может вызвать эту проблему? Команда работает, я просто хочу запустить ее с помощью PHP, но это не удается. Другая команда, которую я пытаюсь, используя PHP, работает - например:

var_dump(shell_exec('whoami')); 

Update # 1 Я создал файл Баш скрипт с рабочей командой, а также добавил эхо «ОК», чтобы получить выход обратно. Файл работает при запуске из командной строки, но когда я пытаюсь запустить его с PHP, я получаю «ok», но он все еще не работает с подключенным устройством. Я попытался запустить скрипт Баш из командной строки, как пользователь WWW-данных и что работает, но до сих пор ничего я с помощью PHP не работает:

sudo -u www-data bash -c '/home/test/cmd' 

Update # 2 Пробовал то же самое на другой компьютер, управляющий Kodi, с тем же отрицательным результатом. Команда работает, но не при запуске с использованием PHP.

ответ

0

У меня возникла аналогичная проблема. В конце концов, я понял, что пользователь httpd (я запускаю CentOS - пользователь Apache может отличаться от вашего вкуса Linux) не имеет прав на запись в/dev/ttyS0.

// Гранты разрешения на запись на/DEV/ttyS0 всех пользователь

Суды CHMOD A + W/DEV/ttyS0

Было бы немного более элегантным, чтобы выяснить, как предоставить разрешение на запись только пользователю httpd, а не всем пользователям на машине.

Надеюсь, это поможет вам!

+0

Как вы можете видеть выше, я даже попробовал chmod 777 для/dev/ttyUSB0, поэтому разрешения на запись не были моей проблемой. – AxAn