[原创] 【小熊派-鸿蒙-季 BearPi-HM Nano】之WiFi测试

sumoon_yao   2021-6-28 14:21 楼主

Hi3861本就是颗带2.4G WiFi SoC芯片,所以WiFi功能是必须要测试的。

 

例程中最少有4个是带WiFi功能的,这次测试选择了D4 TCP服务器这个例程,进入D4_iot_tcp_server目录,打开主程序tcp_server_demo.c

 

#include <stdio.h>

#include <unistd.h>

 

#include "ohos_init.h"

#include "cmsis_os2.h"

 

#include "lwip/sockets.h"

#include "wifi_connect.h"

 

#define _PROT_ 8888

#define TCP_BACKLOG 10

 

//在sock_fd 进行监听,在 new_fd 接收新的链接

int sock_fd, new_fd;

 

char recvbuf[512];

char *buf = "Hello! I'm BearPi-HM_Nano TCP Server!";

 

static void TCPServerTask(void)

{

//服务端地址信息

struct sockaddr_in server_sock;

 

//客户端地址信息

struct sockaddr_in client_sock;

int sin_size;

 

struct sockaddr_in *cli_addr;

 

//连接Wifi

WifiConnect("Yaoyao", "88888888");

 

//创建socket

if ((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1)

{

perror("socket is error\r\n");

exit(1);

}

 

bzero(&server_sock, sizeof(server_sock));

server_sock.sin_family = AF_INET;

server_sock.sin_addr.s_addr = htonl(INADDR_ANY);

server_sock.sin_port = htons(_PROT_);

 

//调用bind函数绑定socket和地址

if (bind(sock_fd, (struct sockaddr *)&server_sock, sizeof(struct sockaddr)) == -1)

{

perror("bind is error\r\n");

exit(1);

}

 

//调用listen函数监听(指定port监听)

if (listen(sock_fd, TCP_BACKLOG) == -1)

{

perror("listen is error\r\n");

exit(1);

}

 

printf("start accept\n");

 

//调用accept函数从队列中

while (1)

{

sin_size = sizeof(struct sockaddr_in);

 

if ((new_fd = accept(sock_fd, (struct sockaddr *)&client_sock, (socklen_t *)&sin_size)) == -1)

{

perror("accept");

continue;

}

 

cli_addr = malloc(sizeof(struct sockaddr));

 

printf("accept addr\r\n");

 

if (cli_addr != NULL)

{

memcpy(cli_addr, &client_sock, sizeof(struct sockaddr));

}

 

//处理目标

ssize_t ret;

 

while (1)

{

if ((ret = recv(new_fd, recvbuf, sizeof(recvbuf), 0)) == -1)

{

printf("recv error \r\n");

}

printf("recv :%s\r\n", recvbuf);

sleep(2);

if ((ret = send(new_fd, buf, strlen(buf) + 1, 0)) == -1)

{

perror("send : ");

}

 

sleep(2);

}

 

close(new_fd);

}

}

 

从程序的定义部分可以看出来,使用的TCP端口号是8888,每次接收到客户端发送的数据后自动向客户端字符串“Hello! I'm BearPi-HM_Nano TCP Server!”。

 

程序的流程是:首先通过WiFi获得IP地址(DHCP),然后创建Socket连接,进入循环等待客户端发起TCP连接请求,收到连接请求后,进入内循环接收数据,并向客户端发送数据。

 

将 sample目录下的build.gn文件做如下修改:

#"D1_iot_wifi_ap:wifi_ap",

#"D2_iot_wifi_sta_connect:wifi_sta_connect",

#"D3_iot_udp_client:udp_client",

"D4_iot_tcp_server:tcp_server",

#"D5_iot_mqtt:iot_mqtt",

#"D6_iot_cloud_oc:oc_mqtt",

#"D7_iot_cloud_onenet:onenet_mqtt",

#"D8_iot_cloud_oc_smoke:cloud_oc_smoke",

#"D9_iot_cloud_oc_light:cloud_oc_light",

#"D10_iot_cloud_oc_manhole_cover:cloud_oc_manhole_cover",

#"D11_iot_cloud_oc_infrared:cloud_oc_infrared",

#"D12_iot_cloud_oc_agriculture:cloud_oc_agriculture",

#"D13_iot_cloud_oc_gps:cloud_oc_gps",

也即注释掉其它例子程序,去掉D4的注释。

编译、烧写过程同前几篇

 

打开串口终端,程序运行过程如下图所示:

141850y8z33dz83hb1u31t.png

 

连接指定的接入点,通过DHCP得到IP地址。

 

141850jcjit1wnericw4jj.png

 

 

等待客户端发起TCP连接请求。

 

打开TCP UDP Socket调试工具,选择TCP Clent,点创建按钮,填写服务器的IP地址和端口号。

141850c844oq42pqpts2qt.png

 

点连接按钮,很快显示连接成功。

141850sazfk7hgfjjhzfpz.png

 

此时串口终端也显示收到连接请求并成功建立了TCP连接。

141850kgh9q9dd4gbu42u9.png

 

在调试工具的数据发送编辑框输入要发送的数据,然后点“发送数据”按钮,提示窗口会提示已经发送的数据以及接收到的数据。

 

 

141850u664x4u1opv25udu.png

 

同时串口终端也会显示接收到的数据。

141850lkwtjkjnk5bk8e5z.png

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复