0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【HarmonyOS HiSpark Wi-Fi IoT 套件试用连载】wifi-iot板连接家庭wifi并实现tcp通讯

开发板试用精选 来源:开发板试用 作者:电子发烧友论坛 2022-11-01 17:20 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本文来源电子发烧友社区,作者: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地址:
  1. case HI_WIFI_EVT_CONNECTED:
  2. printf("WiFi: Connectedn");
  3. printf("connected info: %s %sn", hisi_event->info.wifi_connected.ssid, hisi_event->info.wifi_connected.ifname);
  4. netifapi_dhcp_start(g_lwip_netif);
  5. {
  6. osThreadAttr_t attr;
  7. attr.name = "netTask";
  8. attr.attr_bits = 0U;
  9. attr.cb_mem = NULL;
  10. attr.cb_size = 0U;
  11. attr.stack_mem = NULL;
  12. attr.stack_size = 2048;
  13. attr.priority = 24;
  14. if (osThreadNew((osThreadFunc_t)netTask, NULL, &attr) == NULL)
  15. {
  16. printf("[LedExample] Falied to create LedTask!n");
  17. }
  18. }
  19. break;
复制代码
  1. static void *netTask(const char *arg)
  2. {
  3. printf("netTask:%pn", arg);
  4. u8_t ip_arr[4] = {0};
  5. u8_t ip_zero[4] = {0};
  6. // 下面这种方式也可以打印 IP、网关、子网掩码信息
  7. ip4_addr_t ip = {0};
  8. ip4_addr_t netmask = {0};
  9. ip4_addr_t gw = {0};
  10. int ret = 0;
  11. do
  12. {
  13. sleep(1);
  14. ret = netifapi_netif_get_addr(g_lwip_netif, &ip, &netmask, &gw);
  15. printf("netifapi_netif_get_addr: %drn", ret);
  16. if (ret == ERR_OK)
  17. {
  18. printf("ip = %srn", ip4addr_ntoa(&ip));
  19. printf("netmask = %srn", ip4addr_ntoa(&netmask));
  20. printf("gw = %srn", ip4addr_ntoa(&gw));
  21. memcpy(ip_arr, &ip.addr, sizeof(ip_arr));
  22. }
  23. } while (memcmp(ip_arr, ip_zero, sizeof(ip_arr)) == 0 || (ip_arr[0] != 192));
  24. printf("got ip :%d.%d.%d.%dn", ip_arr[0], ip_arr[1], ip_arr[2], ip_arr[3]);
  25. sample_tcp_client();
  26. return NULL;
  27. }
复制代码
拿到ip地址之后我们的wifi才能段真正连接成功
6.之后就开启tcp客户端,相关代码 在demo_app里有,在文档:Hi3861V100/Hi3861LV100 lwIP 开发指南.pdf 里面也有,直接拷贝使用:
  1. int sample_tcp_client(void)
  2. {
  3. s32_t sfd = -1;
  4. struct sockaddr_in srv_addr = {0};
  5. // struct sockaddr_in cln_addr = {0};
  6. // socklen_t cln_addr_len = sizeof(cln_addr);
  7. s32_t ret = 0, i = 0;
  8. /* tcp client connection */
  9. printf("going to call socketn");
  10. sfd = socket(AF_INET, SOCK_STREAM, 0);
  11. if (sfd == -1)
  12. {
  13. printf("socket failed, return is %dn", sfd);
  14. goto FAILURE;
  15. }
  16. printf("socket succeeded, sfd %dn", sfd);
  17. srv_addr.sin_family = AF_INET;
  18. srv_addr.sin_addr.s_addr = inet_addr(PEER_IP);
  19. srv_addr.sin_port = htons(PEER_PORT);
  20. printf("going to call connectn");
  21. ret = connect(sfd, (struct sockaddr *)&srv_addr, sizeof(srv_addr));
  22. if (ret != 0)
  23. {
  24. printf("connect failed, return is %dn", ret);
  25. goto FAILURE;
  26. }
  27. printf("connec succeeded, return is %dn", ret);
  28. /* tcp client connection */
  29. /* send */
  30. memset(g_buf, 0, BUF_SIZE);
  31. strcpy((char *)g_buf, MSG);
  32. printf("calling send...n");
  33. ret = send(sfd, g_buf, sizeof(MSG), 0);
  34. if (ret <= 0)
  35. {
  36. printf("send failed, return is %d,i is %dn", ret, i);
  37. goto FAILURE;
  38. }
  39. printf("send finished ret is %dn", ret);
  40. /* send */
  41. /* recv */
  42. memset(g_buf, 0, BUF_SIZE);
  43. printf("going to call recvn");
  44. ret = recv(sfd, g_buf, sizeof(g_buf), 0);
  45. if (ret <= 0)
  46. {
  47. printf("recv failed, return is %dn", ret);
  48. goto FAILURE;
  49. }
  50. printf("recv succeeded, return is %dn", ret);
  51. printf("received msg is : %sn", g_buf);
  52. /* recv */
  53. lwip_close(sfd);
  54. return 0;
  55. FAILURE:
  56. lwip_close(sfd);
  57. // printf("errno is %dn", errno);
  58. return -1;
  59. }
复制代码
7.在电脑上用一个tcp工具,开启一个tcp的服务器,如图:
142423jccz25p2goiozoi0.png
8.把开发板上电,程序下载进去,经过调试之后,正常就应该会连到电脑上的tcp服务器,然后并自动发送14个字节的数据,如图:
142608bjg3g730vn86z0z0.png
9.在电脑tcp服务器回复对应数据,可以在开发板终端上看到对应的数据,到此,本阶段实验结束,为后面的实验做铺垫.
142814okmq6v6oqtztmk35.png
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • wi-fi
    +关注

    关注

    15

    文章

    2379

    浏览量

    128892
  • HarmonyOS
    +关注

    关注

    80

    文章

    2146

    浏览量

    35573
  • HiSpark
    +关注

    关注

    1

    文章

    156

    浏览量

    7687
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RK3506工控核心Wi-Fi模组性能测试报告

    RK3506工控核心Wi-Fi模组性能测试报告测试概述本次测试对比了三种不同WiFi模组在2.4GHz和5GHz频段的网络吞吐量性能,使用iperf3工具进行30秒的多线程传输测试
    的头像 发表于 10-14 17:09 2114次阅读
    RK3506工控<b class='flag-5'>板</b>核心<b class='flag-5'>板</b><b class='flag-5'>Wi-Fi</b>模组性能测试报告

    如何更新 NuMaker IoT 上的 Wi-Fi 模块固件?

    更新 NuMaker IoT 上的 Wi-Fi 模块固件
    发表于 09-04 08:28

    Texas Instruments CC335x SimpleLink™双频Wi-Fi® 6配套IC数据手册

    ) 和Wi-Fi 5 (802.11ac)。这些CC335x是Texas Instruments的第10代连接组合芯片。因此,CC335x基于成熟的技术设计而成。这些器件非常适合配备运行TCP/IP的Linux或
    的头像 发表于 07-23 11:37 860次阅读
    Texas Instruments CC335x SimpleLink™双频<b class='flag-5'>Wi-Fi</b>® 6配套IC数据手册

    有没有什么修复方法可以确保 AP 模式下的 Wi-Fi 和 BLE 连接同时正常工作?

    我正在使用 CYBSYSKIT DEV 01 套件。我尝试在 AP 模式下打开 Wi-Fi 宣传 BLE。我可以宣传 SoftAP 和 BLE。但是,我无法从中央设备连接到 BLE。
    发表于 07-17 06:13

    如何选择合适的芯科科技Wi-Fi开发

    您正在寻找适用于超低功耗物联网应用项目的Wi-Fi 开发吗?本文将介绍Silicon Labs(芯科科技)推出的所有SiWx917 Wi-Fi 6和低功耗蓝牙5.4解决方案的Wi-Fi
    的头像 发表于 07-09 09:15 2273次阅读

    BLE代码示例中Wi-Fi连接重试失败的原因?

    您好,我正在使用 BLE 代码示例进行 Wi-Fi 接入。我从 modus 工具箱下载了代码示例。 代码示例包含所有最新的库。 当在提供 SSID 和密码后从手机发送连接命令时,微控制器会尝试
    发表于 07-08 07:42

    连接到 WPA3_WPA2_PSK 或 WPA3_SAE Wi-Fi 网络时系统挂起,为什么?

    Wi-Fi 网络时,我的系统挂起了。 它与所有其他安全类型连接良好。 我正在使用最新的 WHD 库。 谁能解释为什么会发生此问题以及我该如何解决它? 您可以参考 WiFi Onboarding 示例
    发表于 06-05 07:23

    国产Wi-Fi 6新一代通信技术的推广,WIFI模块行业将迎来更多发展机遇.

    联网设备对高速、低延迟连接的需求。随着技术的不断进步,WIFI 6模块的功能和性能也在不断提升,如低功耗、高集成度、高安全性等特性的研发和应用,进一步加快了WIFI模块更新迭代。 希微科技 是国内高性能
    的头像 发表于 05-08 17:07 988次阅读
    国产<b class='flag-5'>Wi-Fi</b> 6新一代通信技术的推广,<b class='flag-5'>WIFI</b>模块行业将迎来更多发展机遇.

    基于 Wi-Fi 的定位服务

    以下捕获使用 location_wifi_get 函数请求 Wi-Fi 定位服务。该事件的总功耗为 125.85mC,日志显示精确度为 30.0m。 Got location: method
    发表于 04-17 15:16

    Wi-Fi 定位服务流程

    变化。 Cellular: Location 示例中最初的 location_wifi_get() 函数可用于请求 Wi-Fi 定位服务。启用附加日志配置有助于了解请求过程。 Add
    发表于 04-17 15:09

    nRF Cloud Wi-Fi 定位服务

    实现高性能和超低功耗。对于 Wi-Fi 定位请求,nRF Cloud 可借助 Wi-Fi 数据库计算设备位置,该数据库包含不同 Wi-Fi 网络的坐标。然后,设备位置将从 nRF C
    发表于 04-17 15:07

    Wi-Fi 定位服务

    Wi-Fi 是一种著名的无线网络技术,用于设备的局域网和互联网接入。Wi-Fi 通过 Wi-Fi 网络为家庭、办公室和学校等环境提供便捷的无线互联网接入服务。
    发表于 04-17 15:01

    如何为驱动添加Wi-Fi功能

    为驱动添加Wi-Fi功能,可以通过硬件和软件两种途径实现
    的头像 发表于 04-16 14:22 763次阅读

    华为海思正式进入Wi-Fi FEM赛道?

    大家都知道了,2018年11 月离开锐迪科(RDA),前往福建晋江创立三伍微,专注于Wi-Fi射频前端芯片,从路由器Wi-Fi FEM,到手机Wi-Fi FEM,再到IoT FEM全覆
    发表于 12-11 17:42

    Wi-Fi 4到Wi-Fi 7:网速飙升40倍的无线革命

    1 Wi-Fi技术的快速发展 每一代新的Wi-Fi协议发布,都会带来更高的无线速率。   从Wi-Fi 4到Wi-Fi 7:无线网络技术显著提升,
    的头像 发表于 12-09 10:10 1608次阅读
    从<b class='flag-5'>Wi-Fi</b> 4到<b class='flag-5'>Wi-Fi</b> 7:网速飙升40倍的无线革命