• Home
Name Date Size #Lines LOC

..--

.application_configD12-May-2024695 1815

BUILD.gnD12-May-2024991 2524

README_zh.mdD12-May-20246.5 KiB254188

wifi_connect.cD12-May-20245.6 KiB195167

wifi_example.cD12-May-20242.7 KiB9070

README_zh.md

1# NiobeU4开发板WIFI使用说明文档
2
3## 简介
4WLAN组件为设备提供接入与使用WLAN的相关接口,包括开启、关闭WLAN,扫描、监听WLAN状态等。本案例程序将演示怎么在Niobeu4开发板上使用wifi,编写一个客户端连接socket发包的业务程序,实现开发板联网与服务端进行数据通信。
5
6## 接口说明
7
8### EnableWifi()
9
10```
11WifiErrorCode EnableWifi(void);
12```
13
14**描述:**
15
16Wifi enable打开wifi函数。
17
18### DisableWifi()
19
20```
21int32_t DisableWifi(void);
22```
23
24**描述:**
25
26wifi disable关闭wifi函数。
27
28### Scan()
29
30```
31int32_t Scan(void);
32```
33
34**描述:**
35
36wifi scan扫描函数。
37
38### GetScanInfoList()
39
40```
41int32_t GetScanInfoList(WifiScanInfo* result, unsigned int* size);
42```
43
44**描述:**
45
46wifi GetScanInfoList获取扫描列表函数。
47
48**参数:**
49
50| 名字   | 描述         |
51| :----- | :----------- |
52| result | 扫描结果指针 |
53| size   | 扫描wifi总数 |
54
55### AddDeviceConfig()
56
57```
58int32_t AddDeviceConfig(const WifiDeviceConfig* config, int* result);
59```
60
61**描述:**
62
63wifi GetScanInfoList获取扫描列表函数。
64
65**参数:**
66
67| 名字   | 描述                                       |
68| :----- | :----------------------------------------- |
69| config | wifi配置结构体指针,用于连接指定的Wi-Fi设备 |
70| result | netid                                      |
71
72### WiFiInit()
73
74```
75void WiFiInit(void);
76```
77
78**描述:**
79
80wifi init初始化wifi函数。
81
82### WifiConnect()
83
84```
85int32_t WifiConnect(const char *ssid, const char *psk);
86```
87
88**描述:**
89
90wifi init初始化wifi函数。
91
92**参数:**
93
94| 名字 | 描述     |
95| :--- | :------- |
96| ssid | WiFi名称 |
97| psk  | WiFi密码 |
98
99## 约束
100WLAN服务组件使用C语言编写,目前支持niobeu4开发板。
101
102## 使用
103- 设备需要完成以下开发步骤,以开启WLAN:
104
105    ```
106    //开启WLAN
107    WifiErrorCode error = EnableWifi();
108    if (error != WIFI_SUCCESS) {
109        return;
110    }
111    ```
112
113- 设备需要完成以下开发步骤,以触发WLAN扫描:
114
115    ```
116    //开启WLAN
117    WifiErrorCode error = Scan();
118    if (error != WIFI_SUCCESS) {
119        return;
120    }
121    ```
122
123- 设备需要完成以下开发步骤,以获取WLAN扫描结果:
124
125    ```
126    WifiScanInfo* infoList = malloc(sizeof(WifiScanInfo) * WIFI_SCAN_HOTSPOT_LIMIT);//WIFI_SCAN_HOTSPOT_LIMIT:wifi连接设备数量设置,默认64
127    unsigned int size = WIFI_SCAN_HOTSPOT_LIMIT;
128    error = GetScanInfoList(infoList, &size);
129    if (error != WIFI_SUCCESS || size == 0) {
130        return;
131    }
132    ```
133
134- 设备需要完成以下开发步骤,以配置接入点的接入方式:
135
136    ```
137    int netId = 0;
138    WifiDeviceConfig config = {0};
139    config.freq = 20;
140    config.securityType = WIFI_SEC_TYPE_PSK;
141    config.wapiPskType = WIFI_PSK_TYPE_ASCII;
142    memcpy_s(config.ssid, WIFI_MAX_SSID_LEN, "Sample", 10); //在这里输入待连接WLAN的名称
143    unsigned char bssid[WIFI_MAC_LEN] = {0xac, 0x75, 0x1d, 0xd8, 0x55, 0xc1}; //在这里输入待连接WLAN的BSSID
144    memcpy_s(config.bssid, WIFI_MAC_LEN, bssid, WIFI_MAC_LEN);
145    memcpy_s(config.preSharedKey, WIFI_MAX_KEY_LEN, "1234567890", 10); //在这里输入待连接WLAN的口令
146    WifiErrorCode error = AddDeviceConfig(&config, &netId);
147    if (error != WIFI_SUCCESS || netId == 0) {
148        return;
149    }
150    ```
151
152- 设备需要完成以下开发步骤,以连接配置的WLAN:
153
154    ```
155    error = ConnectTo(netId);  //netId来自上一步
156    if (error != WIFI_SUCCESS) {
157        return;
158    }
159    ```
160
161## 案例程序
162
163### Socket发包业务Demo
164
165在Niobeu4开发板上使用wifi,编写一个客户端连接socket发包的业务程序,实现开发板联网与服务端进行数据通信。
166
167```
168#include <stdio.h>
169#include "cmsis_os2.h"
170#include "ohos_run.h"
171#include "lwip/sockets.h"
172#include "lwip/ip_addr.h"
173#include "wifi_device.h"
174
175#define WIFI_NAME "HUAWEIP40"
176#define WIFI_PWD "houpengfei8"
177#define SERVER_IP	"192.168.8.140"
178#define SERVER_PORT 8080
179
180osThreadId_t wifi_test_id = NULL;
181
182void wifi_test(void *thread_param)
183{
184    int sock = -1;
185    struct sockaddr_in client_addr;
186    char recv_data[512]={0};
187    int recv_data_len;
188
189    WifiConnect(WIFI_NAME,WIFI_PWD);//连接指定设备
190
191    printf("start wifi_test test\r\n");
192    while(1) {
193        /* 申请套接字,本质是netconn_new函数的封装 */
194        sock = socket(AF_INET, SOCK_STREAM, 0);
195        if (sock < 0){
196            printf("Socket error\n");
197            osDelay(100);
198            continue;
199        }
200        /* 清空sockaddr_in结构体内存空间 */
201        memset(&(client_addr), 0, sizeof(client_addr));
202
203        /* 为sockaddr_in结构体成员赋值,用于以下的connect绑定 */
204        client_addr.sin_family = AF_INET;
205        client_addr.sin_port = htons(SERVER_PORT);
206        client_addr.sin_addr.s_addr = inet_addr(SERVER_IP);
207
208
209        printf("try connect to server "SERVER_IP":%d\n",SERVER_PORT);
210        /* 将远端server的ip地址与端口进行绑定 */
211        if (connect(sock, (struct sockaddr *)&client_addr, sizeof(struct sockaddr)) == -1) {
212            closesocket(sock);
213            osDelay(1000);
214            continue;
215        }
216
217        printf("Connect to tcp server successful!\n");
218        while(1){
219            /* 成功接收到数据,返回接收的数据长度 */
220            recv_data_len = recv(sock, recv_data, 511, 0);
221            if (recv_data_len <= 0) break;
222            else
223                recv_data[recv_data_len] = '\0';
224
225            /* 串口打印接收的数据内容 */
226            printf("recv:%s\n",recv_data);
227            /* 发送数据内容 */
228            write(sock,recv_data,recv_data_len);
229        }
230    }
231}
232
233static void wifi_test_example(void)
234{
235    osThreadAttr_t attr;
236    attr.name = "wifi_test";
237    attr.attr_bits = 0U;
238    attr.cb_mem = NULL;
239    attr.cb_size = 0U;
240    attr.stack_mem = NULL;
241    attr.stack_size = 1024 * 4;
242    attr.priority = 25;
243    wifi_test_id = osThreadNew((osThreadFunc_t)wifi_test, NULL, &attr);
244    if (wifi_test_id == NULL){
245        printf("Failed to create wifi_test thread!\n");
246    }
247}
248
249OHOS_APP_RUN(wifi_test_example);
250
251```
252
253通过百度搜索调试工具“NetAssist.exe”,下载以后配置SERVER_LISTEN_PORT和IP_ADDRESS,开启服务端接收niobeu4开发板发送的消息。
254