【问题标题】:Php Serial to Arduino on linux openwrtlinux openwrt上的php串口到Arduino
【发布时间】:2013-10-21 16:40:44
【问题描述】:

我正在尝试让基于网页的串行通信与连接到运行 Openwrt 的路由器的 Arduino 一起工作,它确实有效,但仅当屏幕正在运行或通过 putty 远程连接时,由于某种原因,php 到串行没有正确启动会话?我使用 ser2net 通过以下设置管理串行

1000:raw:0:/dev/ttyACM0:9600

我还尝试了 stty 与此论坛上建议的各种设置

更新 1

还尝试将80:raw:0:/dev/ttyACM0:9600 设置为 ser2net 假设端口 80 是 web/http 端口

我的php代码是

 if (isset($_GET['action'])) 
 {
     $serial = new phpSerial();
     $serial->deviceSet('/dev/ttyACM0');
     $serial->confBaudRate(9600);
     $serial->confParity('none');
     $serial->confCharacterLength(8);
     $serial->confStopBits(1);
     $serial->confFlowControl('none');
     $serial->deviceOpen();

     if ($_GET['action'] == "PIN_12_HIGH") 
     {
         $serial->sendMessage("A");
     }
     if ($_GET['action'] == "PIN_12_LOW") 
     {
         $serial->sendMessage("B");
     }
     if ($_GET['action'] == "PIN_11_HIGH") 
     {
         $serial->sendMessage("C");
     }
     if ($_GET['action'] == "PIN_11_LOW") 
     {
         $serial->sendMessage("D");
     }

     $serial->deviceClose();
 }

更新 2

如果我将sleep(1); 添加到我的 php 代码中,它似乎可以解决一些问题

几点

  1. 在 php 代码中添加睡眠允许命令在由串行连接引起的重置后到达 arduino,但是如果我在打开 led 2 时打开 led 1,led 1 会重置为关闭。所以这意味着一个更复杂的代码,以记录一系列选择并将整个更新的数组发送到 arduino 的形式,我想避免这种情况,一次只发送 1 个命令。
  2. 再次激活屏幕或腻子时,arduino 没有此重置问题?所以问题是 screen 和 putty 做了什么来保持连接,而 stty 和 php serial 没有?

更新 3

在找到这个有用的post 之后,我似乎发现了一个可能的解决方案,而无需对 Arduino 进行重置黑客攻击。 在 Openwrt 路由器的启动配置中添加 cat /dev/ttyACM0 & 可以与 Arduino 进行串行通信,而无需在每次传输数据时重置它。

遗留问题:

  1. 我认为这段代码将 arduino 绑定到与路由器的会话?但我不确定。
  2. 似乎是在吃 Arduino 的返回值,阻止我的 php 页面获取数据返回?
  3. 我的系统日志文件包含 Arduino 丢失的返回数据?

更新 4

  1. 因为我需要让它工作,我使用了一个电容器来阻止 arduino 上串行通信的自动重置。
  2. 正如所述 screen 和 putty 在与 arduino 通信时不会产生此重置问题,我尝试了许多不同的 STTY 设置但找不到解决方案,但我仍在尝试并热衷于发现 screen/putty 是如何做到这一点的。

【问题讨论】:

    标签: php serial-port arduino openwrt


    【解决方案1】:

    看起来您的 PHP 正在尝试直接连接到 tty。 ser2net 可能已经连接到 tty。一次只能将一个应用程序连接到 tty。要么停止 ser2net,要么你的 PHP 应该根据你的 ser2net.conf 连接到所需 tty 的 tcp 监听器

    【讨论】:

    • 感谢您输入 mpflaga,我禁用了 ser2net 但没有任何改进。我只是无法理解屏幕或腻子如何启动我不使用 php 到串行的连接?
    • 不是 PHP 专家。听起来像一个phpSerial问题。使用 ser2net,无论您的 ser2net 正在监听什么,您都可以从 openwrt 框的 bash telnet 或 netcat 到 localhost 1000 或 80,以验证 tty 是否正常工作。
    • 是的,从我的 windows pc 使用 putty 我可以连接到端口 1000 并命令 arduino 并在本地使用屏幕我也可以命令 arduino 一切正常。奇怪的想法是,当我登录我的网站时,我只能从远程网络/位置控制 arduino,如果连接已经从屏幕或腻子处于活动状态,希望这是有意义的
    • 看起来腻子和屏幕启动 ttyacm0 而 php 没有
    • 当您的 PHP 尝试访问 tty 时,您确定 ser2net 已停止。
    猜你喜欢
    • 1970-01-01
    • 2012-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多