gd32vw553-iot wifi 连接和tcp初探

分享作者:lilei
评测品牌:萤火工场
评测型号:GD32VW553-IOT
发布时间:2025-03-24 15:14:18
1
概要
gd32vw553-iot wifi 连接和tcp初探
开源口碑分享内容

概述

中电港萤火工场推出基于兆易创新(GigaDevice) GD32VW553 一款 RISC-V内核的 32位 MCU的开源硬件板 GD32VW553-IOT。该板集成了主控芯片卓越的无线连接能力 、 强大的性能与能效比以及丰富的外设 接口,可享受到开源社区带来的丰富资源和便利,极大地方便了开发者的快速部署和应用创新 。

系统资源

工程介绍

今天我给大家分享的一个历程为WiFi的连接和tcp的初探。主要是帮助大家在刚开始时快速的熟悉这个开发版。本个开发版分为两部分。一部分为固件库,主要是与gd32相同的控制旁边gpio和iic等外设。另一部分为WiFi和蓝牙。主要用于物联网控制。官方给的历程给了mqtt的例子这里我主要使用的是WiFi连接部分。大致的流程为先初始化外设时钟等信息。在扫描周围WiFi。最后连接自己设置的WiFi。打印出获取的IP地址。然后创建一个小的tcp客户端。与tcp服务器进行连接,发送一条信息。但是由于本人能力有限,只开发了连接部分,tcp部分有错误尚未解决,请大家查找出我的问题,可以给我留言。感谢大家!

代码分析


static void scan_wireless_network() {


char *ssid = NULL;

if (wifi_management_scan(true, ssid) == -1) {

return;

}

wifi_netlink_scan_results_print(WIFI_VIF_INDEX_DEFAULT,

wifi_netlink_scan_result_print);


//连接指定的WiFi

int status = 0;

struct mac_scan_result candidate;


char *connectssid = "逃离地球奔赴火星";

char *connectpsd = "15186726524aaa";

printf("Start Wi-Fi scan.\r\n");

status = wifi_management_scan(1, connectssid);

while (status != 0) {

printf("Wi-Fi scan failed.\r\n");

status = wifi_management_scan(1, connectssid);

//goto exit;

}

sys_memset(&candidate, 0, sizeof(struct mac_scan_result));

status = wifi_netlink_candidate_ap_find(WIFI_VIF_INDEX_DEFAULT, NULL,

connectssid, &candidate);

while (status != 0) {

printf("Wi-Fi candidate_ap_find failed.\r\n");

status = wifi_netlink_candidate_ap_find(WIFI_VIF_INDEX_DEFAULT, NULL,

connectssid, &candidate);

}

printf("Start Wi-Fi connection.\r\n");

if (wifi_management_connect(connectssid, connectpsd, 1) != 0) {

printf("Wi-Fi connection failed\r\n");

//goto exit;

}

creat_Clien();

}


static void creat_Clien() {

int ret;

int user_socket = socket(AF_INET, SOCK_STREAM, 0);

if (user_socket < 0) {

printf("Create tcp client socket fd error!\r\n");

}

struct sockaddr_in user_sockaddr;

sys_memset(&user_sockaddr, 0, sizeof(user_sockaddr));

u32_t ip_addr = (u32_t)0xC0A81F93UL;

user_sockaddr.sin_family = AF_INET;

user_sockaddr.sin_len = sizeof(user_sockaddr);

user_sockaddr.sin_port = htons(2345);

user_sockaddr.sin_addr.s_addr = ip_addr;

/* sockaddr_in 结构体强制类型转换 */

ret = bind(user_socket, (struct sockaddr* )&user_sockaddr,

sizeof(user_sockaddr));

if (ret <= 0) {

printf("Create bind client socket error!\r\n");

printf("recv error: %d.\r\n", ret);


}

ret = connect(user_socket, (struct sockaddr* )&user_sockaddr,

sizeof(user_sockaddr));

if (ret <= 0) {

printf("Create connect client socket error!\r\n");

printf("recv error: %d.\r\n", ret);


}

char send_msg[11] = "helloword\r\n";

while (1) {

send(user_socket, send_msg, 11, 0);

}


}

这里主要是使用wifi_management_scan 扫描周围WiFi 再使用wifi_netlink_scan_results_print 打印最后使用 wifi_management_scan进行连接

creat_Clien但是在这个中间创建的TCP客户端无法成功连接请大家帮忙分析一下下面的视频为主要详细的过程

串口打印初始化信息






全部评论
暂无评论
0/144