P2P
WiFi P2P — WiFi Direct — WiFi P2P API
前置阅读:STA 模式 — 连接路由器、SoftAP 模式 — 创建热点
学习目标
- 理解 WiFi P2P 工作原理——无需路由器,设备直连
- 理解 P2P 角色协商(GO / GC)机制
- 掌握 P2P 发现 → 协商 → 连接 → 通信的完整流程
基本概念
WiFi P2P vs SoftAP vs STA
| 对比项 |
P2P |
SoftAP |
STA |
| 需要路由器 |
不需要 |
不需要 |
需要 |
| 角色 |
自动协商(GO/GC) |
手动指定(AP) |
固定(STA) |
| 适用 |
设备直连 |
手机连设备 |
连网络 |
角色协商
sequenceDiagram
participant A as 设备A GO Intent=14
participant B as 设备B GO Intent=1
A->>B: P2P Find 发现
B->>A: 响应
A->>B: GO Negotiation
Note over A,B: Intent 14 > 1,A 成为 GO
A->>A: 启动 P2P GO(类似 SoftAP)
B->>A: DHCP 获取 IP
Note over A,B: 连接建立,可通信
涉及 API
| API |
用途 |
wifi_p2p_enable() |
使能 P2P |
wifi_p2p_set_device_config() |
配置 P2P 设备参数 |
wifi_p2p_find(sec) |
发现周边 P2P 设备 |
wifi_p2p_connect(&p2p_config) |
发起 P2P 连接 |
wifi_register_event_cb() |
注册 P2P 事件回调 |
案例说明
做什么
两块 WS63 通过 P2P 直连——不需要路由器,协商 GO/GC 后通过 Socket 通信。
关键配置
| 参数 |
推荐值 |
说明 |
| GO Intent |
Server 14 / Client 1 |
值大者成为 GO |
| 工作信道 |
⅙/11 |
同时运行 STA 需对齐 |
| GO 默认 IP |
192.168.49.1 |
|
代码详解
/* P2P 初始化 */
wifi_p2p_enable();
wifi_p2p_set_device_config("WS63-P2P", 14); // GO Intent=14
/* 设备发现 */
wifi_p2p_find(30); // 30 秒搜索
/* p2p_dev_found_cb → 找到对方 */
/* 连接 */
wifi_p2p_connect(&p2p_cfg);
/* wifi_event_p2p_go_neg_result → 角色协商完成 */
/* DHCP → IP 就绪 → Socket 通信 */