通过Web与客户端串行端口进行通信

时间:2015-02-24 09:38:42

标签: php serial-port raspberry-pi

我的PHP网站存在问题(使用API​​,这就是为什么它必须是PHP)。

本网站是在raspberry pi b +上启动的,它连接到热敏打印机(通过串口),我使用python脚本来测试打印机。

现在我的问题是:是否可以通过网络发送数据以使树莓打印一些数据?所以发送一个像写入端口的指令' / dev / ttyxxx'客户支持?

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

如果您的意思是:“我有一个需要访问服务器串口的PHP应用程序”: PHP可以访问服务器上的串行端口(在本例中,是您的覆盆子pi)。 PHP将其视为普通文件。

来自PHP Fopen page

<?php
// Set timeout to 500 ms
$timeout=microtime(true)+0.5;

// Set device controle options (See man page for stty)
exec("/bin/stty -F /dev/ttyS0 19200 sane raw cs8 hupcl cread clocal -echo -onlcr ");

// Open serial port
$fp=fopen("/dev/ttyS0","c+");
if(!$fp) die("Can't open device");

// Set blocking mode for writing
stream_set_blocking($fp,1);
fwrite($fp,"foo\n");

// Set non blocking mode for reading
stream_set_blocking($fp,0);
do{
  // Try to read one character from the device
  $c=fgetc($fp);

  // Wait for data to arive 
  if($c === false){
      usleep(50000);
      continue;
  }  

  $line.=$c;

}while($c!="\n" && microtime(true)<$timeout); 

echo "Responce: $line";  
?>

如果你的意思是:“我有一个网站,不知何故需要发送一些东西到客户端的串口” 然后唯一的解决方案是浏览器App。

Chrome应用可以使用Chrome Serial APIVideo Example

答案 1 :(得分:0)

我想到了几个解决方案;基本上你会希望你的php页面解析数据并创建一个可以打印的可信输出(即PDF文件,如果你的打印机支持这个)。

您的下一个任务是如何将此可信输出发送到打印机。同样,存在几种解决方案。

  1. 让您的php脚本执行系统可执行文件,例如cat output.pdf > /dev/ttyxxx(这里很明显,我不知道如何从unix打印)。请注意,可执行文件不依赖于输入,即您希望降低注入攻击等风险。这一点要求您创建的output.pdf值得信赖。

  2. 让cron-job查找输出文件并将其发送到打印机。与上述相同的考虑适用。这可能会更好,因为如果多个php会话试图打印文档,它可以避免瓶颈。

  3. 围绕上面构建一个较小的框架,可以报告错误是否发生等等。但是,基本上选项1 +魔术。

  4. 总而言之,将流程分为两个步骤。接受输入,解析和检查错误/恶意输入,并为打印机创建所需输出的人。这可以在受保护的环境中完成,如果被黑客入侵,则不会暴露系统(至少不会超过通常的php)。 然后,步骤2负责将输出发送到硬件,bash-script,executable或python。