Я работаю над проектом, который включает в себя чтение и запись на последовательную плату, используя контакты UART на моей малиновой пи. Тем не менее, я уже ударил кирпичную стену. Каждый раз, когда я пытаюсь использовать PhpSerial
я всегда получаю ошибку:
Неустранимая ошибка: нет доступной stty, не может работать. в /var/www/PHP-Serial/examples/PhpSerial.php в строке 56
Я пробовал множество конфигураций с помощью ввода:
// First we must specify the device. This works on both linux and windows (if // your linux serial device is /dev/ttyS0 for COM1, etc) $serial->deviceSet("/dev/ttyAMA0"); // We can change the baud rate, parity, length, stop bits, flow control $serial->confBaudRate(38400); $serial->confParity("none"); $serial->confCharacterLength(8); $serial->confStopBits(1); $serial->confFlowControl("none");
-// First we must specify the device. This works on both linux and windows (if // your linux serial device is /dev/ttyS0 for COM1, etc) $serial->deviceSet("/dev/ttyAMA0"); // We can change the baud rate, parity, length, stop bits, flow control $serial->confBaudRate(38400); $serial->confParity("none"); $serial->confCharacterLength(8); $serial->confStopBits(1); $serial->confFlowControl("none");
-// First we must specify the device. This works on both linux and windows (if // your linux serial device is /dev/ttyS0 for COM1, etc) $serial->deviceSet("/dev/ttyAMA0"); // We can change the baud rate, parity, length, stop bits, flow control $serial->confBaudRate(38400); $serial->confParity("none"); $serial->confCharacterLength(8); $serial->confStopBits(1); $serial->confFlowControl("none");
-// First we must specify the device. This works on both linux and windows (if // your linux serial device is /dev/ttyS0 for COM1, etc) $serial->deviceSet("/dev/ttyAMA0"); // We can change the baud rate, parity, length, stop bits, flow control $serial->confBaudRate(38400); $serial->confParity("none"); $serial->confCharacterLength(8); $serial->confStopBits(1); $serial->confFlowControl("none");
-// First we must specify the device. This works on both linux and windows (if // your linux serial device is /dev/ttyS0 for COM1, etc) $serial->deviceSet("/dev/ttyAMA0"); // We can change the baud rate, parity, length, stop bits, flow control $serial->confBaudRate(38400); $serial->confParity("none"); $serial->confCharacterLength(8); $serial->confStopBits(1); $serial->confFlowControl("none");
для// First we must specify the device. This works on both linux and windows (if // your linux serial device is /dev/ttyS0 for COM1, etc) $serial->deviceSet("/dev/ttyAMA0"); // We can change the baud rate, parity, length, stop bits, flow control $serial->confBaudRate(38400); $serial->confParity("none"); $serial->confCharacterLength(8); $serial->confStopBits(1); $serial->confFlowControl("none");
php/lighthttpd
работает как www-data, Ive пробовал использовать /dev/ttyAMA0
для этого пользователя, и я добавил группу dialout к указанному пользователю. Я не вижу никаких отключенных функций или чего-либо в моем php.ini. У меня также нет стандартной установки для использования последовательных устройств на пи в соответствии с вики, и я могу читать / записывать данные в и из схемы, используя
sudo minicom -b 38400 -o -D / dev / ttyAMA0
Вот строка (строки), на которую ссылается ошибка:
if (substr($sysName, 0, 5) === "Linux") { $this->_os = "linux"; if ($this->_exec("stty") === 0) { register_shutdown_function(array($this, "deviceClose")); } else { trigger_error( "No stty availible, unable to run.", E_USER_ERROR ); }
Я не могу понять это, но кто-то другой. Заранее спасибо.
Вы должны изменить следующую строку кода в классе PhpSerial.php
ИЗ:
if ($this->_exec("stty") === 0) {
TO:
if ($this->_exec("stty --version") === 0) {
=> Следовательно, это устраняет ошибку «Нет stty availible, failed to run …». См. Эту тему: https://www.raspberrypi.org/forums/viewtopic.php?f=91&t=100481
Я также должен добавить, что мне пришлось отложить задержку до того, как я напишу серийные данные, например
<?php
error_reporting (E_ALL); ini_set ('display_errors', '1');
include "PhpSerial.php";//serial class: https://github.com/Xowap/PHP-Serial/blob/develop/examples/VS421CPNTA.php $serial = new phpSerial; //$serial->deviceSet("/dev/ttyAMA0"); $serial->deviceSet("/dev/ttyACM0"); $serial->confBaudRate(9600); $serial->confParity("none"); $serial->confCharacterLength(8); $serial->confStopBits(1); $serial->deviceOpen(); sleep(3);//delay $serial->sendMessage("1"); $serial->deviceClose(); echo "Serial message sent! \n";
-include "PhpSerial.php";//serial class: https://github.com/Xowap/PHP-Serial/blob/develop/examples/VS421CPNTA.php $serial = new phpSerial; //$serial->deviceSet("/dev/ttyAMA0"); $serial->deviceSet("/dev/ttyACM0"); $serial->confBaudRate(9600); $serial->confParity("none"); $serial->confCharacterLength(8); $serial->confStopBits(1); $serial->deviceOpen(); sleep(3);//delay $serial->sendMessage("1"); $serial->deviceClose(); echo "Serial message sent! \n";
-include "PhpSerial.php";//serial class: https://github.com/Xowap/PHP-Serial/blob/develop/examples/VS421CPNTA.php $serial = new phpSerial; //$serial->deviceSet("/dev/ttyAMA0"); $serial->deviceSet("/dev/ttyACM0"); $serial->confBaudRate(9600); $serial->confParity("none"); $serial->confCharacterLength(8); $serial->confStopBits(1); $serial->deviceOpen(); sleep(3);//delay $serial->sendMessage("1"); $serial->deviceClose(); echo "Serial message sent! \n";
-include "PhpSerial.php";//serial class: https://github.com/Xowap/PHP-Serial/blob/develop/examples/VS421CPNTA.php $serial = new phpSerial; //$serial->deviceSet("/dev/ttyAMA0"); $serial->deviceSet("/dev/ttyACM0"); $serial->confBaudRate(9600); $serial->confParity("none"); $serial->confCharacterLength(8); $serial->confStopBits(1); $serial->deviceOpen(); sleep(3);//delay $serial->sendMessage("1"); $serial->deviceClose(); echo "Serial message sent! \n";
-include "PhpSerial.php";//serial class: https://github.com/Xowap/PHP-Serial/blob/develop/examples/VS421CPNTA.php $serial = new phpSerial; //$serial->deviceSet("/dev/ttyAMA0"); $serial->deviceSet("/dev/ttyACM0"); $serial->confBaudRate(9600); $serial->confParity("none"); $serial->confCharacterLength(8); $serial->confStopBits(1); $serial->deviceOpen(); sleep(3);//delay $serial->sendMessage("1"); $serial->deviceClose(); echo "Serial message sent! \n";
-include "PhpSerial.php";//serial class: https://github.com/Xowap/PHP-Serial/blob/develop/examples/VS421CPNTA.php $serial = new phpSerial; //$serial->deviceSet("/dev/ttyAMA0"); $serial->deviceSet("/dev/ttyACM0"); $serial->confBaudRate(9600); $serial->confParity("none"); $serial->confCharacterLength(8); $serial->confStopBits(1); $serial->deviceOpen(); sleep(3);//delay $serial->sendMessage("1"); $serial->deviceClose(); echo "Serial message sent! \n";
дляinclude "PhpSerial.php";//serial class: https://github.com/Xowap/PHP-Serial/blob/develop/examples/VS421CPNTA.php $serial = new phpSerial; //$serial->deviceSet("/dev/ttyAMA0"); $serial->deviceSet("/dev/ttyACM0"); $serial->confBaudRate(9600); $serial->confParity("none"); $serial->confCharacterLength(8); $serial->confStopBits(1); $serial->deviceOpen(); sleep(3);//delay $serial->sendMessage("1"); $serial->deviceClose(); echo "Serial message sent! \n";
-include "PhpSerial.php";//serial class: https://github.com/Xowap/PHP-Serial/blob/develop/examples/VS421CPNTA.php $serial = new phpSerial; //$serial->deviceSet("/dev/ttyAMA0"); $serial->deviceSet("/dev/ttyACM0"); $serial->confBaudRate(9600); $serial->confParity("none"); $serial->confCharacterLength(8); $serial->confStopBits(1); $serial->deviceOpen(); sleep(3);//delay $serial->sendMessage("1"); $serial->deviceClose(); echo "Serial message sent! \n";
-include "PhpSerial.php";//serial class: https://github.com/Xowap/PHP-Serial/blob/develop/examples/VS421CPNTA.php $serial = new phpSerial; //$serial->deviceSet("/dev/ttyAMA0"); $serial->deviceSet("/dev/ttyACM0"); $serial->confBaudRate(9600); $serial->confParity("none"); $serial->confCharacterLength(8); $serial->confStopBits(1); $serial->deviceOpen(); sleep(3);//delay $serial->sendMessage("1"); $serial->deviceClose(); echo "Serial message sent! \n";
-include "PhpSerial.php";//serial class: https://github.com/Xowap/PHP-Serial/blob/develop/examples/VS421CPNTA.php $serial = new phpSerial; //$serial->deviceSet("/dev/ttyAMA0"); $serial->deviceSet("/dev/ttyACM0"); $serial->confBaudRate(9600); $serial->confParity("none"); $serial->confCharacterLength(8); $serial->confStopBits(1); $serial->deviceOpen(); sleep(3);//delay $serial->sendMessage("1"); $serial->deviceClose(); echo "Serial message sent! \n";
Поскольку вы можете видеть, что PhpSerial нуждается в утилите stty для получения / установки последовательных параметров, таких как скорость передачи, четность и т. Д. Решение заключается в установке stty
с помощью вашего дистрибутива Linux
STTY на Rasbian возвращает 1 на exec, а не 0
К сожалению, если вы просто обойдете этот код, он зависает на register_shutdown_function.
В настоящее время я пишу файлы на диск и пытаюсь отправить их в порт (борется, потому что они двоичный текст, а не ascii). Если у вас есть информация о ascii для отправки, тогда
stty -F /dev/ttyAMA0 38400
А также
exec("cat filename.txt > //dev//ttyAMA0");