本文来源电子发烧友社区,作者:cszzlsw, 帖子地址:https://bbs.elecfans.com/jishu_2030601_1_1.html
1,首先要获得hisi3861芯片的wifi开发的相关接口和文档:https://bbs.elecfans.com/jishu_2028821_1_1.html
这里就有相关的资料
2.liteos_m文档库里面也有好多资料,在doc文件夹里
3.首先需要连接wifi,可以参考文档:Hi3861V100/Hi3861LV100 Wi-Fi软件 开发指南.pdf
4.找到sta模式,里面讲的很清楚,基于实际需求,把流程进行简化:
STA功能开发的典型流程:
步骤1 调用hi_wifi_sta_start,启动STA。
步骤2 调用hi_wifi_sta_scan,hi_wifi_sta_scan_results,获取扫描结果。
步骤3 根据接入网络需求,自定义筛选扫描结果,调用hi_wifi_sta_connect,进行连接。
步骤4 调用hi_wifi_sta_get_connect_info,查询Wi-Fi连接状态。
步骤5 连接成功后,调用netifapi_dhcp_start,启动DHCP客户端,获取IP地址。
步骤6 调用hi_wifi_sta_disconnect ,离开当前连接的网络。
步骤7 调用netifapi_dhcps_stop,停止DHCP客户端。
步骤8 调用hi_wifi_sta_stop ,关闭STA。
----结束,注意5,6,7步骤不是必须的
5.在连接成功的毁掉开启dhcp获取ip地址之后并不会立马得到ip地址,所以我们开启一个线程不停得在等待拿到ip地址:
复制代码
复制代码
拿到ip地址之后我们的wifi才能段真正连接成功
6.之后就开启tcp客户端,相关代码 在demo_app里有,在文档:Hi3861V100/Hi3861LV100 lwIP 开发指南.pdf 里面也有,直接拷贝使用:
复制代码
7.在电脑上用一个tcp工具,开启一个tcp的服务器,如图:
8.把开发板上电,程序下载进去,经过调试之后,正常就应该会连到电脑上的tcp服务器,然后并自动发送14个字节的数据,如图:
9.在电脑tcp服务器回复对应数据,可以在开发板终端上看到对应的数据,到此,本阶段实验结束,为后面的实验做铺垫.
1,首先要获得hisi3861芯片的wifi开发的相关接口和文档:https://bbs.elecfans.com/jishu_2028821_1_1.html
这里就有相关的资料
2.liteos_m文档库里面也有好多资料,在doc文件夹里
3.首先需要连接wifi,可以参考文档:Hi3861V100/Hi3861LV100 Wi-Fi软件 开发指南.pdf
4.找到sta模式,里面讲的很清楚,基于实际需求,把流程进行简化:
STA功能开发的典型流程:
步骤1 调用hi_wifi_sta_start,启动STA。
步骤2 调用hi_wifi_sta_scan,hi_wifi_sta_scan_results,获取扫描结果。
步骤3 根据接入网络需求,自定义筛选扫描结果,调用hi_wifi_sta_connect,进行连接。
步骤4 调用hi_wifi_sta_get_connect_info,查询Wi-Fi连接状态。
步骤5 连接成功后,调用netifapi_dhcp_start,启动DHCP客户端,获取IP地址。
步骤6 调用hi_wifi_sta_disconnect ,离开当前连接的网络。
步骤7 调用netifapi_dhcps_stop,停止DHCP客户端。
步骤8 调用hi_wifi_sta_stop ,关闭STA。
----结束,注意5,6,7步骤不是必须的
5.在连接成功的毁掉开启dhcp获取ip地址之后并不会立马得到ip地址,所以我们开启一个线程不停得在等待拿到ip地址:
- case HI_WIFI_EVT_CONNECTED:
- printf("WiFi: Connectedn");
- printf("connected info: %s %sn", hisi_event->info.wifi_connected.ssid, hisi_event->info.wifi_connected.ifname);
- netifapi_dhcp_start(g_lwip_netif);
- {
- osThreadAttr_t attr;
- attr.name = "netTask";
- attr.attr_bits = 0U;
- attr.cb_mem = NULL;
- attr.cb_size = 0U;
- attr.stack_mem = NULL;
- attr.stack_size = 2048;
- attr.priority = 24;
- if (osThreadNew((osThreadFunc_t)netTask, NULL, &attr) == NULL)
- {
- printf("[LedExample] Falied to create LedTask!n");
- }
- }
- break;
- static void *netTask(const char *arg)
- {
- printf("netTask:%pn", arg);
- u8_t ip_arr[4] = {0};
- u8_t ip_zero[4] = {0};
- // 下面这种方式也可以打印 IP、网关、子网掩码信息
- ip4_addr_t ip = {0};
- ip4_addr_t netmask = {0};
- ip4_addr_t gw = {0};
- int ret = 0;
- do
- {
- sleep(1);
- ret = netifapi_netif_get_addr(g_lwip_netif, &ip, &netmask, &gw);
- printf("netifapi_netif_get_addr: %drn", ret);
- if (ret == ERR_OK)
- {
- printf("ip = %srn", ip4addr_ntoa(&ip));
- printf("netmask = %srn", ip4addr_ntoa(&netmask));
- printf("gw = %srn", ip4addr_ntoa(&gw));
- memcpy(ip_arr, &ip.addr, sizeof(ip_arr));
- }
- } while (memcmp(ip_arr, ip_zero, sizeof(ip_arr)) == 0 || (ip_arr[0] != 192));
- printf("got ip :%d.%d.%d.%dn", ip_arr[0], ip_arr[1], ip_arr[2], ip_arr[3]);
- sample_tcp_client();
- return NULL;
- }
6.之后就开启tcp客户端,相关代码 在demo_app里有,在文档:Hi3861V100/Hi3861LV100 lwIP 开发指南.pdf 里面也有,直接拷贝使用:
- int sample_tcp_client(void)
- {
- s32_t sfd = -1;
- struct sockaddr_in srv_addr = {0};
- // struct sockaddr_in cln_addr = {0};
- // socklen_t cln_addr_len = sizeof(cln_addr);
- s32_t ret = 0, i = 0;
- /* tcp client connection */
- printf("going to call socketn");
- sfd = socket(AF_INET, SOCK_STREAM, 0);
- if (sfd == -1)
- {
- printf("socket failed, return is %dn", sfd);
- goto FAILURE;
- }
- printf("socket succeeded, sfd %dn", sfd);
- srv_addr.sin_family = AF_INET;
- srv_addr.sin_addr.s_addr = inet_addr(PEER_IP);
- srv_addr.sin_port = htons(PEER_PORT);
- printf("going to call connectn");
- ret = connect(sfd, (struct sockaddr *)&srv_addr, sizeof(srv_addr));
- if (ret != 0)
- {
- printf("connect failed, return is %dn", ret);
- goto FAILURE;
- }
- printf("connec succeeded, return is %dn", ret);
- /* tcp client connection */
- /* send */
- memset(g_buf, 0, BUF_SIZE);
- strcpy((char *)g_buf, MSG);
- printf("calling send...n");
- ret = send(sfd, g_buf, sizeof(MSG), 0);
- if (ret <= 0)
- {
- printf("send failed, return is %d,i is %dn", ret, i);
- goto FAILURE;
- }
- printf("send finished ret is %dn", ret);
- /* send */
- /* recv */
- memset(g_buf, 0, BUF_SIZE);
- printf("going to call recvn");
- ret = recv(sfd, g_buf, sizeof(g_buf), 0);
- if (ret <= 0)
- {
- printf("recv failed, return is %dn", ret);
- goto FAILURE;
- }
- printf("recv succeeded, return is %dn", ret);
- printf("received msg is : %sn", g_buf);
- /* recv */
- lwip_close(sfd);
- return 0;
- FAILURE:
- lwip_close(sfd);
- // printf("errno is %dn", errno);
- return -1;
- }
8.把开发板上电,程序下载进去,经过调试之后,正常就应该会连到电脑上的tcp服务器,然后并自动发送14个字节的数据,如图:
9.在电脑tcp服务器回复对应数据,可以在开发板终端上看到对应的数据,到此,本阶段实验结束,为后面的实验做铺垫.
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
wi-fi
+关注
关注
14文章
2135浏览量
124431 -
HarmonyOS
+关注
关注
79文章
1974浏览量
30149 -
HiSpark
+关注
关注
1文章
156浏览量
6924
发布评论请先 登录
相关推荐
Wi-Fi 8要来了!未来Wi-Fi技术演进方向揭秘
产品销售中,虽然Wi-Fi 7产品的销量份额快速从年初的个位数百分比增长至14%,但Wi-Fi 6产品的销量份额依然稳定在60%左右。如果从存量设备来看,那么Wi-Fi 7路由器的占比将远远小于这个数。 智能手机等终端设备已
华为海思正式进入Wi-Fi FEM赛道?
大家都知道了,2018年11 月离开锐迪科(RDA),前往福建晋江创立三伍微,专注于Wi-Fi射频前端芯片,从路由器Wi-Fi FEM,到手机Wi-Fi FEM,再到IoT FEM全覆
发表于 12-11 17:42
Wi-Fi 7与Wi-Fi 6E有什么区别
也许很多人还在考虑是否要将使用的Wi-Fi设备升级到Wi-Fi 6或Wi-Fi 6E,而这些标准的继任者却已经开始“登堂入室”了。Wi-Fi 7是新一代
AT 0.60.0.0看不到我的Wi-Fi网络,为什么?
Wi-Fi 网络并连接到它。当然,我的路由器AP SSID已启用,我可以在其他设备上看到此网络。这不是什么大问题,但我认为它仍然是一个错误。
在GMR
在GMR
AT版本:0.60.0.0(Jan
发表于 07-18 08:31
为什么ESP8266没有检测到Wi-Fi的SSID?
你好,我的ESP8266没有检测到我家Wi-Fi的SSID。我尝试打开我的 iPhone 热点,我可以正常查看和连接(我也成功连接到 MQTT)。相反,没有办法看到我家的Wi-Fi。
发表于 07-09 06:44
使用的是esp32官方的Wi-Fi例程,一直连接不上Wi-Fi怎么解决?
使用的是esp32官方的Wi-Fi例程
一直连接不上Wi-Fi
日志:
ESP-ROM:esp8684-api2-20220127
Build:Jan 27 2022
rst:0x1
发表于 07-02 07:21
esp32c3为什么无法连接WiFi?
Wi-Fi的频段是2.4g,密码正确,使用开发板可以正常连接,使用设计的PCB烧录固件后无法连接,问题出在硬件设计上。但是扫描WiFi信号是
发表于 07-01 06:42
为什么启用Wi-Fi后,选择EXT0作为唤醒源功耗会增加1mA?
1、当不启用Wi-Fi,选择EXT0为唤醒源,系统进入deep_sleep,功耗10uA左右;
2、当启用Wi-Fi,选择EXT0为唤醒源,系统关闭Wi-Fi后再进入deep_sleep,功耗在
发表于 06-24 07:48
AIROC™ Wi-Fi和蓝牙组合连接掉线的原因?怎么解决?
我最近购买了一台配备 AIROC™ Wi-Fi 和蓝牙组合模块的笔记本电脑。 大多数时候,Wi-Fi 连接都能正常使用图书馆创世纪网站ePUB 转换工具、在线书店和学术出版物,但我注意到蓝牙连
发表于 05-24 07:48
验证物联网Wi-Fi HaLow用例的MM6108-EKH08开发套件来啦
验证物联网Wi-Fi HaLow用例的MM6108-EKH08开发套件来啦 MM6108-EKH08开发套件专为验证物联网Wi-Fi HaLow用例而设计。该
WI-FI基础知识及飞易通SOC模块
“WiFi”或“Wifi”,但是这些写法并没有被Wi-Fi联盟认可。 一、通常说的WI-FI几: 第一代:以IEEE 802.11为准,工作频段为2.4GHz, 最高速率半双工2Mbi
Wi-Fi HaLow和传统Wi-Fi的区别
Wi-Fi HaLow和传统Wi-Fi的区别 Wi-Fi是一种无线网络技术,可以连接到互联网或局域网,为用户提供无线上网的便利。随着科技的发展和互联网的普及,
全志R128基础组件开发指南-WiFi Manager②
_STATION);wifi_sta_connect(&cn_para);wifi_sta_disconnect();1.以station模式打开Wi-Fi Manager2.连接
发表于 01-25 14:28
全志R128基础组件开发指南-WiFi Manager
[ ] shttpd [ ] mqttWi-Fi Manager 简介Wi-Fi Manager 用于wifi 的连接管理,通信以及wifi
发表于 01-24 10:11
BT Wi-Fi模式是否可以通过ModustoolBox对套件进行编程来实现?
想配置用于分析 CYW43439 的 CY8CPROTO-062S2-43439 原型开发套件。
浏览文档我无法弄清楚如何在不同的 Wi-Fi 和蓝牙模式(电源模式、连接模式等)下配置套件
发表于 01-22 06:19
评论