目录
  • 一、准备工作
  • 二、编译 Wi-Fi UDP Sample代码
  • 三、测试

Wi-Fi UDP客户端测试

该教程演示如何通过开发板进行Wi-Fi后,创建UDP客户端,连接UDP服务端进行数据收发测试。

一、准备工作

  • 准备1块BearPi-Pico H3863开发板
  • 准备一个手机,用于开启无线热点

二、编译 Wi-Fi UDP Sample代码

在Windows下编译操作
  1. 点击工具栏中的“系统配置”,打开配置界面.

    Alt text

  2. 选择Support UDP Client Sample

    Application  --->
        [*] Enable Sample.
        [ ]     Enable the Sample of peripheral.
        [*]     Enable the Sample of WIFI.
        [ ]         Support WIFI STA Sample
        [ ]         Support WIFI SoftAP Sample.
        [*]         Support UDP Client Sample.
        [ ]     Enable the Sample of products.
    

    Alt textAlt text

  3. 按下"Save"键保存配置。

    Alt text

  4. 打开udp_client.c,将Wi-Fi的连接信息修改成自己手机开启热点的Wi-Fi账号和密码,服务器IP改成自己电脑的IP,此处注意要将电脑提前接入自己手机开启热点,这样能让开发板与电脑处于同个局域网。

    Alt text

    Alt text

  5. 关键代码,位于application\samples\wifi\udp_client\udp_client.c

    int udp_client_sample_task(void *param)
    {
        param = param;
    
        // 在sock_fd 进行监听,在 new_fd 接收新的链接
        int sock_fd;
    
        // 服务器的地址信息
        struct sockaddr_in send_addr;
        socklen_t addr_length = sizeof(send_addr);
        char recvBuf[512];
    
        // 连接Wifi
        wifi_connect(CONFIG_WIFI_SSID, CONFIG_WIFI_PWD);
    
        // 创建socket
        printf("create socket start!\r\n");
        if ((sock_fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
            printf("create socket failed!\r\n");
            return 0;
        }
        printf("create socket end!\r\n");
        // 初始化预连接的服务端地址
        send_addr.sin_family = AF_INET;
        send_addr.sin_port = htons(CONFIG_SERVER_PORT);
        send_addr.sin_addr.s_addr = inet_addr(CONFIG_SERVER_IP);
        addr_length = sizeof(send_addr);
    
        while (1) {
            bzero(recvBuf, sizeof(recvBuf));
    
            // 发送数据到服务远端
            printf("sendto start!\r\n");
            sendto(sock_fd, send_data, strlen(send_data), 0, (struct sockaddr *)&send_addr, addr_length);
            printf("sendto end!\r\n");
            // 线程休眠一段时间
            osDelay(100);
    
            // 接收服务端返回的字符串
            recvfrom(sock_fd, recvBuf, sizeof(recvBuf), 0, (struct sockaddr *)&send_addr, &addr_length);
            printf("%s:%d=>%s\n", inet_ntoa(send_addr.sin_addr), ntohs(send_addr.sin_port), recvBuf);
        }
    
        // 关闭这个 socket
        lwip_close(sock_fd);
        return 0;
    }
    
  6. 编译烧录固件

    参考环境搭建教程编译烧录代码

三、测试

使用 Socket 调试工具 创建UDP服务端用于测试。

Socket 调试工具下载地址: 点击跳转

示例代码编译烧录代码后,按下开发板的RESET按键,在数据发送窗口输入要发送的数据,点击发送后开发板会回复固定消息,且开发板收到消息后会通过日志打印出来。

192.168.1.175:8888=>Hello! I'm UDP Server!

注:如果开发板连不上这个UDP服务端,请关闭电脑所有的防火墙和杀毒软件后再尝试重新连接