【问题标题】:Creating a website to communicate with an embedded device创建网站以与嵌入式设备进行通信
【发布时间】:2010-09-27 23:17:37
【问题描述】:

我目前正在从事一个项目,我试图通过面向 Internet 的网站控制嵌入式设备。这个想法是用户可以访问网站并告诉该设备执行某种操作。网站上的操作将被转换为一系列 CLI 命令,然后发送到设备。未来通信可能会双向进行,但现在我专注于服务器到设备。

Web 服务器是使用 Python (Django) 的 LAMP 堆栈,而我尝试与之通信的设备是运行 eLinux 的 Beagle Board。任何时候都只有一台设备与服务器通信。

我已经在服务器端和设备端编写了所有功能部分,但是我在弄清楚如何编写通信层时遇到了一些麻烦。我的一个大问题是该设备将是移动的,并且每隔几天就会移动一次位置。所以,我不能保证设备的静态 IP 地址。我的网络编程知识非常少,所以我不知道从哪里开始。

有人对我如何开始发展这种交流有任何想法/资源吗?

谢谢!

【问题讨论】:

    标签: python apache embedded beagleboard


    【解决方案1】:

    您可以使用DynDNS 之类的提供商简单地注册一个动态主机名,然后让设备在该网站上更新它的 IP,这样动态主机名总是指向设备 IP - 有很多客户端、脚本等可用于Linux 就是这样做的。

    【讨论】:

    • +1:可能比为连接设备编写一些东西更简单。为什么要发明轮子呢? :)
    【解决方案2】:

    如果服务器是静态的,您总是可以让设备与服务器建立连接以报告其 IP 地址。

    您可以写a simple UDP server 让设备监听传入的通信,然后写write a client in python 让您的网络服务器调用。

    【讨论】:

      【解决方案3】:

      我的正常行为模式(当然因为它可能必须通过 NAT 等)是让设备设置一个反向 SSH 隧道,它只是“回家”:http://www.howtoforge.com/reverse-ssh-tunneling

      请注意,SSH 连接有时会中断,所以我会在服务器上设置心跳方法,如果客户端(Beagle Board)错过了一定数量的心跳,让它破坏隧道并创建一个新的一个。

      【讨论】:

      • 我会选择这个选项,因为您的客户端设备在某些电话网络上可能没有公共 IP 地址。
      • 实际上,操作人员说它将是移动的(因为不是静态的),而不是连接到调制解调器或手机。 Wrikken 的回答是一个很好的建议 :)
      【解决方案4】:

      该设备将是移动设备,并且每隔几天就会移动一次位置。所以,我不能保证设备的静态 IP 地址。

      您的设备可以是网站的客户端。

      您的网站有两个界面。

      1. 人的 HTML 界面。

      2. 设备的非 HTML 界面。作为网站的客户端,设备将需要一个 HTTP 客户端库来向网站发送请求。此请求将包括设备的 IP 地址,以及隐藏在 HTTP 请求中的所有常见问题。 (有一堆标准头在请求中发送)

      设备发出初始请求后,您的网站可以保存设备的当前状态并通过其他协议与其通信(如果您愿意)。 (我猜“我把所有的功能部分都写在服务器端和设备端”意味着你有一些其他的协议来控制设备,而且这个协议不是基于 HTTP 的。)

      从长远来看,让设备轮询网站以获取命令或更新或其他内容可能是最简单的。这样,该设备就是一个仅使用 HTTP 的纯 Web 客户端,而您的网站是一个纯 Web 服务器,仅使用 HTTP。那么你就不需要更专业的第二个协议了。仅使用 HTTP 意味着您可以使用 SSL 来确保安全通信。

      如果您的设备使用 HTTP 来获取命令和更新,您需要为可以轻松编码为 HTTP 请求和响应的数据制定一个可用的表示。选项包括 XML、JSON 和 YAML。您总是可以发明自己的数据格式;但是,您可能会更乐意调试像 JSON 这样的标准化格式。

      在 Django 中构建这两个接口非常简单。您将只拥有一些用于人员的 URL,以及一些用于您的设备的 URL。您将为返回 HTML 页面的人员提供查看功能,并为您的设备提供返回 JSON 或 XML 消息的查看功能。

      【讨论】:

        猜你喜欢
        • 2015-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-27
        相关资源
        最近更新 更多