创建与嵌入式设备通信的网站

时间:2010-09-27 23:17:38

标签: python apache embedded beagleboard

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

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

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

有没有人对如何开始进行这种沟通有任何想法/资源?

谢谢!

4 个答案:

答案 0 :(得分:3)

您可以使用DynDNS等提供商注册动态主机名,让设备在该网站上更新IP,这样动态主机名始终指向设备IP - 有大量客户端,脚本等。适用于Linux的那种。

答案 1 :(得分:3)

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

您可以为设备编写a simple UDP server以侦听传入的通信,然后为您的网络服务器write a client in python编写呼叫。

答案 2 :(得分:2)

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

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

答案 3 :(得分:0)

  

该设备将是移动设备,并且每隔几天就会移动一次。因此,我无法保证设备的静态IP地址。

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

您的网站有两个界面。

  1. HTML界面给人们。

  2. 设备的非HTML界面。作为网站的客户端,设备将需要HTTP客户端库来向网站发送请求。此请求将包括设备的IP地址,以及掩埋在HTTP请求中的所有常用malarky。 (在请求中发送了一堆标准头文件)

  3. 一旦设备发出了初始请求,那么您的网站可以保存设备的当前状态,并通过其他协议与其进行通信(如果您想这样做)。 (我猜测“我在服务器和设备端编写了所有功能部件”意味着你有一些其他协议来控制设备,而且这个协议不是基于HTTP。)

    从长远来看,让设备在网站上查询命令或更新或事物可能是最简单的。这样,设备是仅使用HTTP的纯Web客户端,并且您的网站是纯Web服务器,仅使用HTTP。那么你不需要更专业的第二个协议。仅使用HTTP意味着您可以使用SSL来确保安全通信。

    如果您的设备使用HTTP来获取命令和更新,则需要为可以轻松编码为HTTP请求和响应的数据计算出可用的表示形式。选择包括XML,JSON和YAML。您始终可以创建自己的数据格式;但是,你可能会更乐意调试像JSON这样的标准化格式。

    在Django中构建这两个接口非常简单。你只需要一些适用于人的URL和一些适合你设备的URL。您将拥有返回HTML页面的人员的视图函数,以及查看返回JSON或XML消息的设备的函数。