/ / PHP Roomba Сериен порт - php, сериен порт, виртуален сериен порт

PHP Roomba Serial Port Communication - php, сериен порт, виртуален сериен порт

Опитвам се да комуникирам с iRobot Roomba през серийния порт, използвайки PHP клас, разработен от Реми Санчес, Сигурен съм, че изпраща данните, тъй като iRobot USB кабелът получава данни и светва, но Roomba не изглежда да признава командите, дефинирани в Ръководство за спецификация на Roomba Serial Command Interface (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?) Е в групата "набиране".

Но първо трябва да го направите от командния ред (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