向嵌入式3G设备发起通信

时间:2014-09-06 12:09:45

标签: sockets tcp arduino gsm 3g

我有一个基于Arduino的设备连接到3G调制解调器,我用它来记录远程环境中几个传感器的数据。我希望能够发送命令并从设备中流式传输一些数据,然后再返回到我的标准网络连接PC。如果远程设备连接到WIFI或其他局域网,这将是相对简单的,但是当设备通过3G连接时,这意味着它在3G载波NAT之后,因此建立与设备的连接变得困难。 当然,设备可以随时打开到我的主机PC的TCP连接,问题是告诉设备我希望它什么时候这样做。我需要一些方法来获取某种消息给设备通知它我希望它能够启动与我的PC的连接。

我一直在阅读NAT遍历技术,应用程序开发人员使用这些技术在两个设备之间启动P2P通信,这些设备都在NAT之后,例如UDP和TCP'打孔',但这种方法对于我的arduino系统来说似乎相当复杂。另一个一般的想法是让设备定期轮询Web服务器以寻找发起连接的信号,但我不确定这将产生多少流量(和数据使用成本),因为设备必须每10秒轮询一次左右,以确保它在其轮询的Web服务器上设置的请求的合理时间范围内启动它的连接。

是否有任何常用的方法来实现这样的目标?任何一般的想法或见解将不胜感激

谢谢,      詹姆斯

1 个答案:

答案 0 :(得分:2)

我认为解决方案在很大程度上取决于您的特定应用和要求。

有几种方法可以实现这种功能,看起来你已经覆盖了其中一些功能。最常见的是:

  • 让设备轮询服务器。这可能没问题,具体取决于您需要的响应时间。如果您需要按照上面的建议定期进行轮询,那么我认为功率可能比数据速率更重要,特别是如果您连接电池。对于典型的3G数据计划,我认为轮询本身的数据开销可以忽略不计。
  • 让服务器发送短信,然后触发设备联系服务器。您需要确保SMS变量交付时间对您来说是正确的,并且您还必须注意不能保证SMS传送,因此您必须在更高层(或应用程序中)进行某种检查以进行交付。
  • 使用一些基于Android的低成本设备进行3G连接,并利用Google推送通知机制

值得注意的是,服务器轮询通常会非常糟糕,因为让客户端和服务器不断检查消息似乎直觉上很浪费,特别是当实际消息很少发生时。然而,在大多数推送解决方案的背后,在后台仍然存在拉动机制,虽然通常是非常有效的,例如,可以捎带在网络和移动设备之间的其他消息上,因此具有最小的功率和数据开销。就个人而言,我会说,如果您对电池/电源没有重大顾虑,或者您的服务器可能会产生负载轮询,那么如果轮询解决方案的简单优势超过其他缺点,则值得探讨。