我想這個C腳本改寫成PHP。(樣品)無法使用的fopen寫入到/ dev/ttyUSB0或php_serial.class.php
// send packet to network
tty_fd=open(buf50, O_RDWR | O_NOCTTY | O_SYNC);
write(tty_fd,&packet2send,34);
close(tty_fd);
這個C腳本也從/ dev讀取數據/ ttyUSB0十六進制,但我有麻煩寫(在PHP中)。
我已經能夠成功閱讀,但我害怕寫作不起作用 - 或者我一直無法看到我寫的內容。
我用的fopen:
define('PACKET_SIZE_LIMIT',70);
$serial = new phpSerial;
$serial->deviceSet('/dev/ttyUSB0');
$serial->confBaudRate(19200);
$serial->confParity("none");
$serial->confCharacterLength(8);
$serial->confStopBits(1);
$serial->confFlowControl("rts/cts");
$serial->deviceOpen();
$starttime = microtime(true);
$sof='~';
$packet = '';
$output = '';
while (true) {
$read = $serial->readPort();
if ($read) {
while (strlen($output) < PACKET_SIZE_LIMIT){
for($i = 0; $i <strlen($read);$i++){
$each_char = substr($read,$i,$i+1);
if (strlen(dechex(ord($each_char))) != 2){
$output.= sprintf('%02d',dechex(ord($each_char)));
}else{
$output.= dechex(ord($each_char));
}
}
$read = $serial->readPort();
}
echo $output;
}
}
$serial->deviceClose();
目的是使用PHP,而不是將郵件發送到一個恆溫器:
$request_packet_ok = dechex(ord("~")). " 02 ff ff 07 ff ab 2c 4d 65 73 73 61 67 65 20 43 43 20 23 31 2f 34 20 20 20 20 ff ff d2 d7 00 00 b5 7a\r"; //Means "Message CC#1/4" on the thermostat
$device = "/dev/ttyUSB0";
if (is_writable($device)) {
echo "\n".'The file is writable'."\n";
$fp =fopen($device, "w+");
if(!$fp) {
echo "Error";die();
}
while(true){
echo "\n".'writing: '.$request_packet_ok;
fwrite($fp, $request_packet_ok);
$packet='';
$var = fread($fp, 35);
for ($i=0; $i < strlen($var);$i++){
$packet .= dechex(ord(substr($var,$i,1)));
}
var_dump($packet);
}
fclose($fp);
我也使用php_serial.class.php嘗試使用C代碼。
因爲我能夠讀取使用php天線發送的數據包,我假設我可以訪問/ dev/ttyUSB0來寫入,但由於某種原因,我永遠無法看到我發送/寫入的內容天線(將文本消息發送到恆溫器顯示屏 - 不會發生)。我也沒有得到任何錯誤..在所有!
我正在尋找寫入/ dev/ttyUSB0,然後閱讀我從它寫的(檢查它的工作原理 - 作爲一個測試)。
我沒有得到許可被拒絕,並且天線看起來像附着在圖像(它插入到窗口來告訴你,它需要在Ubuntu上運行)
我曾嘗試使用下面的嘗試命令來查看在無果的內容(當我運行上,使用機器root權限的PHP代碼):
screen /dev/ttyUSB0 19200
od -x < /dev/ttyUSB0
如何通過的/ dev/ttyUSB0發送使用PHP的消息和接收消息很?或者至少有一些簡單的測試來確認發送的內容是否可以真正閱讀。
您確定您的設備使用rts/cts進行流量控制而不是「無」嗎? –
是的,或者這就是軟件工程師所說的。有沒有辦法檢查? – Drace