2905|0

122

帖子

2

TA的资源

一粒金砂(高级)

楼主
 

【小熊派-鸿蒙-季 BearPi-HM Nano】之WiFi测试 [复制链接]

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的注释。

编译、烧写过程同前几篇

 

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

 

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

 

 

 

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

 

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

 

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

 

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

 

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

 

 

 

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

此帖出自ARM技术论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表