/ / Посилання для порту Roomba послідовного порту - php, serial-port, virtual-serial-port

PHP Roomba Communication Serial Port - php, serial-port, virtual-serial-port

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

Додаткова інформація (я не знаю, чи це актуально)

За допомогою RealTerm я можу спілкуватися з Roombaбезпосередньо використовуючи функцію "Надсилати номери" (якщо я намагаюся спілкуватися будь-яким іншим способом, він надсилає кожну клавішу). Використовуючи PuTTY, Roomba не приймає мої команди, навіть якщо я можу змусити локальне редагування лінії echo +. Він отримує команди, але не робить нічого з ними, навіть якщо швидкість передачі даних налаштована правильно.

Код

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();

Відповіді:

1 для відповіді № 1

Результат - (pow (2, 8) - N) є цілим числом. PHP внутрішньо зберігає цілі значення як підписано довго.

Використовуйте pack()!


0 для відповіді № 2

Переконайтеся, що CR і / або LF правильно використовуються після будь-яких команд. Деякі програми автоматично надсилають 1, обидва або ніхто ...


0 для відповіді № 3

Під час використання 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