DÜZENLEME arabelleğe alma ile ilgili bir sorun yaşıyorum: Aşağıdaki komut dosyasıyla bazı testler yaptım (burada bulunan: PHP serial port data return from Arduino)./Dev/ttyUSB0 için fwrite kullanmanın bile, yeni komutumu ve aygıttan gönderilen son komutu çıkardığını görüyoruz. Bu, belki de seri portun doğru şekilde ayarlanmadığını (örneğin arabelleği temizlemek için ayarları değiştirmek için stty'yi kullanmanız gerekebilir) veya arabelleği temizlemek için başka bir şey (php ile) olduğunu düşünmemi sağlar. Yeni bir komut göndermeden önce ttyUSB0. Herhangi bir yardım takdir edilecektir, teşekkürler.PHP kullanarak seri bağlantı noktasına nasıl yazılır?
$fp =fopen("/dev/ttyUSB0", "w+");
if(!$fp) {
echo "Error";die();
}
fwrite($fp, $_SERVER['argv'][1] . 0x00);
echo fread($fp, 10) . "\n";
fclose($fp);
Orijinal soru: Ben seri port üzerinden bir cihazla iletişim kurmak için php-seri kullanıyorum
. Cihaz, bir girişteki tüm giriş ve çıkışı seri bağlantı noktasına gösterecek bir fonksiyona sahiptir. Aşağıdaki komut dosyasını çalıştırdığımda, aygıtta komut dosyasının aygıt tarafından her komut çıktısını alıp cihaza tekrarladığını görebiliyorum. Bunun bir soruna neden olduğuna inanıyorum, sadece 'Tamam' cihazına geri vermek istiyorum, çıkışı tekrar etmeyin ve sonra 'Tamam' deyin. Aynı komutu tekrar tekrar denemek, onu karıştırıyor gibi görünüyor ve sonra 'Tamam' komutuna uymayacak. Bir döngüde her bir 0.1 saniyede bir 'OK' çıktısını alıyorum ancak cihazın çıkışını okumayı tercih ediyorum. Komutumda, komutları tekrar etmesini söyleyen bir şey olduğuna inanmıyorum. Herkesin deneyimlediği php-seri sınıfı ile ilgili bir sorun mu var? $ Autoflush = false ayarlamayı denedim; farketmez.
Benim komut dosyası: cihaz ekranında
Tx: AT
Tx: AT&F
Tx: ATE0
Tx: AT+IPR=9600
Tx: AT
Tx: AT
Tx: AT
Tx: ATH0
Tx: AT+CMGF=1
Örnek çıkışı benim komut çalışırken: my komut dosyası çalıştırılmadan cihaz ekranında
require_once('php_serial.class.php');
$serial = new phpSerial;
$serial->deviceSet('/dev/ttyUSB0');
$serial->confBaudRate(9600);
$serial->confParity("none");
$serial->confCharacterLength(8);
$serial->confStopBits(1);
$serial->confFlowControl("none");
$serial->deviceOpen();
while (true) {
$read = $serial->readPort();
if ($read) {
echo date("r") . ' ' . $read;
// $serial->sendMessage("\r\nOK\r\n");
}
}
$serial->deviceClose();
Örnek çıktı
Tx: AT
Rx: AT
Tx: AT&F
Rx: AT&F
Tx: ATE0
Rx: ATE0
Tx: AT+IPR=9600
Rx: AT+IPR=9600
Tx: AT
Rx: AT
Tx: AT
Rx: AT
Tx: AT
Rx: AT
Tx: ATH0
Rx: ATH0
Tx: AT+CMGF=1
Rx: ^[AT+CMGF=1