【问题标题】:Ethernet begin blocks for 60 seconds if there's no Ethernet cable如果没有以太网电缆,以太网开始阻塞 60 秒
【发布时间】:2011-12-16 05:17:14
【问题描述】:

我正在制作一个时钟。我想通过将以太网电缆插入时钟来设置时钟。大多数情况下,时钟不会插入互联网。

我有一个 Arduino 板和一个以太网 shield,可以成功连接到时间服务器并读取时间(请参阅示例 > 以太网下的 UdpNtpClient 示例文件)。

问题在于,要配置以太网屏蔽,如果屏蔽未连接到 Internet,Ethernet.begin() 调用会阻塞 60 秒。我希望时钟能够显示时间并定期检查是否插入了以太网电缆,如果有,请对时间进行任何更正。但是,大多数情况下,此检查的结果都是否定的,因此我不能每次都将时钟冻结 60 秒。

是否可以比Ethernet.begin()功能更快地检测电缆连接?是否可以编写“多线程”解决方案,其中Ethernet.begin() 是非阻塞的?

【问题讨论】:

    标签: arduino ethernet


    【解决方案1】:

    查看现有的以太网库,无法阻止它。

    我猜你是using DHCP?这似乎是阻塞的来源。使用静态 IP 地址时,您是否遇到同样的问题?

    Google 上有许多博客文章涵盖了这个确切的问题,包括以太网库的一些分支,它们允许您以非阻塞方式执行此操作。

    【讨论】:

    • 谢谢!我认为这会奏效。也有人说我可以通过 GPS 获取时间,所以我也可以试试。
    • GPS 对我来说听起来像是一个伟大的想法,我们用我们的硬件在开始时同步时钟。请记住,GPS 时间比正常的 UTC 时间多几秒钟……此外,无需插入以太网电缆。祝你的时钟项目好运=D
    • 我在哪里可以找到“Google 上涵盖这个确切问题的博文”?
    • @powtac 检查链接“使用 DHCP”:gkaindl.com/software/arduino-ethernet/dhcp
    【解决方案2】:

    在 DHCP.h 头文件中,您可以找到新 DHCP 连接的类定义。 然后可以看到有一个默认的超时值60000ms。

    (有用的提示:如果您完成了最初的工作,并开始使用 eclipse 来管理您的 adruino 项目,那真的很棒,因为您可以在 Ethernet.begin 之类的功能上按 F3 并浏览一下库来查找这些类型的设置)

    很难知道超时应该多长时间。但一分钟似乎真的很长。当然你不想做空。 我不会少于15秒。

    /大卫考克斯

    【讨论】:

      猜你喜欢
      • 2020-10-13
      • 2015-12-29
      • 1970-01-01
      • 2017-08-26
      • 1970-01-01
      • 1970-01-01
      • 2016-02-02
      • 2020-05-17
      • 2019-08-05
      相关资源
      最近更新 更多