首页 文章

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

提问于
浏览
0

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

这个网站是在一个覆盆子pi b上启动的,它连接到热敏打印机(通过串口),我使用python脚本来测试打印机 .

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

谢谢你的帮助

2 回答

  • 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";  
    ?>
    

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

    Chrome应用程序可以使用Chrome Serial API . Video Example

  • 0

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

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

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

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

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

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

相关问题