【问题标题】:UDP broadcast for IoT discovery using Raspberry PI and public wifi使用 Raspberry PI 和公共 wifi 进行物联网发现的 UDP 广播
【发布时间】:2021-11-19 04:30:15
【问题描述】:

几个问题。

  1. TLDR 正在 Wifi 网络上发送 UDP 广播数据包,以允许发现 IoT 设备 (Raspberry PI),这是一种传统做法吗?

长版:我正在为一个班级开展 IoT 项目。基于我使用过的其他物联网设备(圣诞颂歌照明系统和音乐播放器),我们决定使用一个已经工作的应用程序 (https://github.com/balena-os/wifi-connect)。它的工作方式是在 Raspberry PI 上运行,并通过用户可以连接的 RPI 网卡托管一个 wifi 端点。一旦用户在他/她的 Iphone 上连接到这个 Wifi 端点,一个 Wifi 选择和密码输入页面就会出现在他/她的 Iphone 上。用户输入物联网设备 (Raspberry PI) 应连接的 Wifi/密码。然后,Raspberry PI 将连接输入的 Wifi。然后用户也可以连接到输入的 Wifi,现在用户的 Iphone 和 Raspberry PI 都将连接到同一个 Wifi 网络。

我们决定从物联网设备向 Wifi 网络的广播地址发送 UDP 数据包,以便连接到 Wifi 的用户(通过他们的 Iphone)可以通过侦听 UDP 数据包“发现”物联网设备的 IP 地址。一旦用户发现物联网设备的 IP 地址,他们就可以向物联网设备发送 HTTP RESTful API 调用。我想知道是否通常使用所描述的过程。

# script we are using to send UDP broadcast packets
import socket
import time

server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)

server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
server.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)

server.settimeout(0.2)
message = b"message"
while True:
    server.sendto(message, ('<broadcast>', 16123))
    time.sleep(1)
  1. 我们在公共图书馆尝试了这种设置,使用他们的免费公共 wifi。但是,UDP 广播数据包发现过程失败。 UDP 广播数据包由 IoT 设备发出,但没有被 Iphone 接收。我们想知道这是否与防火墙有关。我们可以成功地将 UDP 广播数据包从 Macbook(通过 python 脚本)发送到驻留在同一 Macbook 上的 IOS 模拟器,这样数据包的源 IP 地址与接收者相同。是否有防火墙规则使得从 IP 地址 [A] 发送的广播数据包可以传送回 IP 地址 [A] 但不能传送回 IP 地址 [B]。

另外,我没有弄乱端口号,如果某些端口被防火墙禁用,这可能会有所帮助。我不知道。帮助表示赞赏。我们都比较陌生。

【问题讨论】:

    标签: raspberry-pi udp wifi iot broadcast


    【解决方案1】:

    DNS-SD (RFC6763) 是一种相当常见且标准化的网络发现方式。它实际上同时支持 TCP 和 UDP 服务。它最初是由 Apple 以“Bonjour”品牌发明的,用于发现打印机。

    所以是的,通常使用 UDP 广播数据包(通过 DNS-SD)在 Wifi 网络上发现 IoT 设备。

    【讨论】:

      猜你喜欢
      • 2014-05-16
      • 1970-01-01
      • 1970-01-01
      • 2015-06-24
      • 2015-11-16
      • 1970-01-01
      • 2016-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多