首页 > 解决方案 > Wifi 直接连接在 Raspberry Pi 中几秒钟后自动断开连接

问题描述

我在 Raspberry PI 2 B+ 中使用此配置进行 wifi 直接连接

ctrl_interface=DIR=/var/run/wpa_supplicant
driver_param=use_p2p_group_interface=1
update_config=1
device_name=Raspberry_pi
device_type=1-0050F204-1
p2p_go_intent=1
p2p_go_ht40=1
country=IN

然后使用启动 wpa 请求者

sudo wpa_supplicant -Dnl80211 -iwlan0 -c/etc/wpa_supplicant/p2p.conf -B

然后使用添加新组

sudo wpa_cli -iwlan0 p2p_group_add

然后使用设置IP

ifconfig p2p-wlan0-0 192.168.1.20

然后使用

sudo wpa_cli -ip2p-wlan0-0 wps_pin any 0000

到目前为止,一切正常,我可以直接从 Android 设备通过 wifi 连接到 Raspberry Pi。现在我面临两个问题,

  1. 几秒钟后连接会自动断开
  2. 当我尝试重新连接 Android 设备时,它显示永远受邀(但在 2 个 Android 设备之间断开和连接 n 次工作正常,并且连接没有断开)。只有在终止 wpa supplicant 并再次启动该过程后,我才能连接到 Raspberry Pi。这个配置有什么问题?应该进行哪些更改以使连接持久?

编辑1:

当我重新启动 wpa 请求者并第一次连接时,这就是我在日志中得到的

CTRL-EVENT-EAP-STARTED 2a:3f:69:1d:ed:c5
<3>CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=1
<3>CTRL-EVENT-EAP-PROPOSED-METHOD vendor=14122 method=254
<3>WPS-REG-SUCCESS 2a:3f:69:1d:ed:c5 884efa75-0a98-52c6-85aa-07527f4a9c35
<3>WPS-SUCCESS 
<3>CTRL-EVENT-EAP-FAILURE 2a:3f:69:1d:ed:c5
<3>AP-STA-CONNECTED 2a:3f:69:1d:ed:c5 p2p_dev_addr=2a:3f:69:1d:ed:c5

并在自动断开连接后

AP-STA-DISCONNECTED 2a:3f:69:1d:ed:c5 p2p_dev_addr=2a:3f:69:1d:ed:c5

如果我尝试重新连接而不重新启动,则会在控制台中打印

CTRL-EVENT-EAP-STARTED 2a:3f:69:1d:ed:c5
<3>CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=1
<3>CTRL-EVENT-EAP-PROPOSED-METHOD vendor=14122 method=254
<3>WPS-PIN-NEEDED 884efa75-0a98-52c6-85aa-07527f4a9c35 2a:3f:69:1d:ed:c5 [Xperia XA |MediaTek Inc.|MTK Wireless Model|1.0|2.0|10-0050F204-5]
<3>CTRL-EVENT-EAP-FAILURE 2a:3f:69:1d:ed:c5

标签: androidraspberry-pi3wifi-directraspbian-stretch

解决方案


您的 Raspberry Pi 可能处于 P2P 组所有者 (GO) 角色,因为您使用命令(自主 GO)手动创建组,p2p_group_add而不是让设备根据其 GO 意图值进行协商。p2p_go_intent=1在这种情况下,您的配置中可能没有效果。

GO 角色的设备应运行 DHCP 服务器,以便为连接的 P2P 客户端分配 IP 地址。相应地,每个客户端都应该运行一个 DHCP 客户端以接收 IP 地址。

摘自 Wi-Fi P2P 技术规范第 3.2.6.1 节:

更高层的数据服务可以使用 IP。P2P 组所有者应充当 DHCP 服务器,为连接的使用 IP 的 P2P 客户端提供 IP 地址。DHCP 服务器至少应支持 Internet 协议版本 4 (IPv4) 和分配 IP 地址、子网掩码...

...使用 IP 的 P2P 客户端应能够充当 DHCP 客户端。

注意 — 虽然 P2P 设备可以为其作为 P2P 组所有者的每个 P2P 组选择不同的 IP 子网,但连接到多个 P2P 组的 P2P 设备可能最终会出现子网冲突。在选择 IP 子网时使用随机组件可能会降低(但不能消除)这种情况发生的概率

我想您会发现 Android 设备在进入连接状态之前正在等待通过 DHCP 接收 IP 配置,如果没有发生则超时。

要使连接持久,需要将组创建为持久组。您应该能够在自治 GO 场景中使用p2p_group_add persistent. 在协商的 GO 场景中,您应该能够执行类似p2p_connect <peer device address> <pbc|pin|PIN#|p2ps> [display|keypad|p2ps] persistent go_intent=15. 有关详细信息,请参阅 wpa_supplicant README-P2P:https ://w1.fi/cgit/hostap/plain/wpa_supplicant/README-P2P 。

最后,该命令wps_pin any <PIN>允许任何设备使用提供的 PIN 进行连接,但将 PIN 限制为一次性使用。使用表单或通过再次wps_pin <address> <PIN>运行设置新的 PIN 。wps_pin any <PIN>


推荐阅读