【问题标题】:Configure Wifly module to receive UDP packets配置 Wifly 模块接收 UDP 数据包
【发布时间】:2014-04-18 05:41:35
【问题描述】:

我有一个与微控制器连接的 RN-171 wifly 模块。

我正在使用 UDP 协议与模块进行通信。另外,我正在使用固件的 UDP 自动配对功能来设置主机 IP。一旦模块接收到 UDP 数据包,它就会将主机 IP 地址设置为它接收数据的 ip。现在,不进入命令模式就无法更改此主机ip。

我希望模块以下列方式运行: 每次收到 UDP 数据包时,它都会将主机 ip 更新为该信号来自的 ip 地址。

另外,我可以使用 TCP 协议,但它一次只允许一个连接。我在使用 TCP 协议时遇到的另一个问题是,如果我尝试与模块启动第二个 TCP 连接,它不仅会拒绝第二个连接,还会挂起第一个稳定的连接。即使第二次连接启动没有挂起模块并且它只是被拒绝,我也会准备好使用 TCP。

我在网上就这个问题进行了很多研究,但是由于这些模块没有被广泛使用,它们的支持非常有限。

【问题讨论】:

    标签: tcp network-programming udp wifi microchip


    【解决方案1】:

    我已广泛使用 RN-171,并且在他们的支持系统中有许多已解决的票证。

    根据WiFly Command Reference, Advanced Features and Applications User’s Guide,您不能使用该模块打开多个 TCP 端口。 (默认数字为 2000)

    不幸的是,对于 UDP 功能,您无能为力。如果您有一个希望通过 UDP 通信的新主机,请通过 TCP 连接到模块,进入命令模式并使用“$$$”、“set ip host 0.0.0.0”、“save”、“exit”设置地址“命令。或者,您可以输入新主机自己的 IP 地址,而不是 0.0.0.0:“$$$”、“set ip host ###.###.###.###”、“exit”。将“###.###.###.###”替换为设备的IP地址。

    这样,万一有多个设备同时通过 UDP 通信,您就不会得到错误的主机 IP。此外,通过不使用“save”,自动配对仍将保存到 EEPROM 内存中。此外,您可以在“exit”之前发送“ip flags 0x##”,这样您也可以使用将此位设置为零的十六进制值临时将位[6]设置为0(禁用UDP自动配对)。

    Microchip 技术支持在 2013 年夏天左右测试的一个问题是,您不能将 RN-171 用作其他 RN-171 的接入点,因为它们的固件错误阻止了这样做,并且从固件开始v4.41,2014 年 1 月发布,目前还没有修复,也没有计划。

    我本人不推荐最新的固件版本 v4.41,因为它似乎不适用于大多数路由器;但是,此功能的软 AP 模式可以正常工作。另一方面,v4.00.1 更兼容,但是在切断电源时要小心,因为如果在闪存写入过程中切断电源,它可能会出现灾难性的砖块问题 - 模块可能会永远锁定其内存.

    我建议注册并打开Microchip ticket,通常会在两个工作日内得到答复,他们非常支持。但是他们的固件更新周期很长,通常需要一年左右的时间才能更新一次。

    【讨论】:

    • 但是,我找到了将多个客户端与模块连接的更好方法。现在,我使用的是 TCP 协议,但采用了不同的方法。基本上,我想在我的项目中从智能手机发送数据。因此,当应用程序需要对模块进行操作时,它会发起 TCP 连接,使用模块中配置的密码验证连接,发送和接收数据,然后立即关闭连接。由于用户输入是在创建连接之前进行的,因此所有这些过程大约需要 50-60 毫秒。你觉得它是解决这个问题的稳定方案吗?
    • 如果您不必同时从您的设备发送和接收数据,这确实是一个可行的解决方案。如果您的应用程序可以处理管道中的数据延迟,那么其他设备进行连接重试(以防发生连接请求冲突)是完全合理的,直到所有设备都发送了所需的数据。我还没有遇到过很多非同时连续连接的问题。
    猜你喜欢
    • 2010-12-09
    • 2013-11-08
    • 2014-12-14
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    • 2012-05-20
    相关资源
    最近更新 更多