PHP Roomba Последовательный порт связи - PullRequest
5 голосов
/ 15 февраля 2011

Я пытаюсь связаться с iRobot Roomba через последовательный порт, используя PHP-класс, разработанный Реми Санчесом . Я уверен, что он отправляет данные, поскольку USB-кабель iRobot получает данные и загорается, однако Roomba, похоже, не подтверждает команды, определенные в руководстве по спецификации Serial Command Interface (SCI) Roomba . Есть ли возможная причина для этого? Класс каким-то образом искажает данные или Roomba требует отправки ему определенного типа данных, который не поддерживается PHP?

Дополнительная информация (я не уверен, что это актуально)

Используя RealTerm, я могу общаться с Roomba напрямую, используя функцию отправки номеров (если я пытаюсь связаться любым другим способом, он отправляет каждое нажатие клавиши). Используя PuTTY, Roomba не принимает мои команды, хотя я могу включить локальное редактирование эхо + строки. Он получает команды, но ничего с ними не делает, хотя скорость передачи настроена правильно.

Код

require("php_serial.class.php");
$serial = new phpSerial();
$serial->deviceSet("COM1");

$serial->confBaudRate(115200); //Baud rate: 115200
$serial->confParity("none");  //Parity (this is the "N" in "8-N-1")
$serial->confCharacterLength(8); //Character length (this is the "8" in "8-N-1")
$serial->confStopBits(1);  //Stop bits (this is the "1" in "8-N-1")
$serial->confFlowControl("none"); //Device does not support flow control

$serial->deviceOpen();

$start = sprintf("%c",128);
$power = sprintf("%c",133);

$serial->sendMessage("$start");

$time_start = microtime(true);
// Sleep for a while
usleep(1000000);
$time_end = microtime(true);
$time = $time_end - $time_start;
echo "Did nothing in $time seconds <br>";

$serial->sendMessage("$power");
$serial->deviceClose();

Ответы [ 3 ]

1 голос
/ 15 февраля 2011

Результат - (pow (2, 8) - N) является целым числом.PHP внутренне хранит целочисленные значения как длинные со знаком.

Использование pack()!

0 голосов
/ 04 июля 2017

При использовании Putty ваша ОС является Linux, верно?Так что COM1 может быть не прав.Попробуйте что-то вроде $serial->deviceSet("/dev/ttyAMA0"); и убедитесь, что ваш веб-пользователь (www-data?) Находится в группе dialout.

Но, прежде всего, запустите его из командной строки (Bash):

Правильная конфигурация последовательного порта: sudo stty 115200 -F /dev/ttyAMA0 cs8 cread clocal

Отправка некоторых тестовых данных из bash (запуск пассивного режима): sudo echo -n -e "\x80" > /dev/ttyAMA0

Дайте комнате убрать: sudo echo -n -e "\x87" > /dev/ttyAMA0

0 голосов
/ 10 марта 2011

Убедитесь, что CR и / или LF правильно используются после любых команд. Некоторые программы автоматически отправляют 1, обе или ни одной ....

...