文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

【开发板试用报告】HarmonyOS之HelloWorld,WIFI连接,Socket tcp

2024-12-03 16:39

关注

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com/

 开发环境都准备就绪以后,就迫不及待的想来一个入门篇-HelloWorld,

HelloWorld 1.首先在..\applications\sample\wifi-iot\app目录下创建my_first_app目录 2 创建hello_world.c文件 并写入代.3 创建BUILD.gn文件 4 进入代码根目录python build.py wifiiot 编译 5 使用VS_Code中的的插件DevEco Device Tool就行烧录

 
  1. static_library("myapp") { 
  2.     sources = [ 
  3.         "hello_world.c" 
  4.     ] 
  5.     include_dirs = [ 
  6.         "//utils/native/lite/include" 
  7.     ] 

  1. #include  
  2. #include "ohos_init.h" 
  3. #include "ohos_types.h" 
  4.   
  5. void HelloWorld(void) 
  6.     printf("[xm] Hello world.\n"); 
  7. SYS_RUN(HelloWorld);​ 

 WIFI连接及Socket tcp测试 1 首先在..\applications\sample\wifi-iot\app目录下创建sta_demo目录 2 编写代码 3 创建BUILD.gn文件 4 编译 5烧录(注意如果想多个功能一起使用,必须在app下的BUILD.gn中进行配置。 


  1. #include  
  2.  
  3. #include  
  4.  
  5. #include "ohos_init.h" 
  6. #include "cmsis_os2.h" 
  7.  
  8. #include  
  9. #include "hi_wifi_api.h" 
  10. //#include "wifi_sta.h" 
  11. #include "lwip/ip_addr.h" 
  12. #include "lwip/netifapi.h" 
  13.  
  14. static struct netif *g_lwip_netif = NULL
  15.  
  16.  
  17. void hi_sta_reset_addr(struct netif *pst_lwip_netif) 
  18.     ip4_addr_t st_gw; 
  19.     ip4_addr_t st_ipaddr; 
  20.     ip4_addr_t st_netmask; 
  21.     printf("%s %d \r\n", __FILE__, __LINE__); 
  22.     if (pst_lwip_netif == NULL
  23.     { 
  24.         printf("hisi_reset_addr::Null param of netdev\r\n"); 
  25.         return
  26.     } 
  27.  
  28.     IP4_ADDR(&st_gw, 0, 0, 0, 0); 
  29.     IP4_ADDR(&st_ipaddr, 0, 0, 0, 0); 
  30.     IP4_ADDR(&st_netmask, 0, 0, 0, 0); 
  31.  
  32.     netifapi_netif_set_addr(pst_lwip_netif, &st_ipaddr, &st_netmask, &st_gw); 
  33.  
  34. void wifi_wpa_event_cb(const hi_wifi_event *hisi_event) 
  35.     if (hisi_event == NULL
  36.         return
  37.  
  38.     switch (hisi_event->event) 
  39.     { 
  40.     case HI_WIFI_EVT_SCAN_DONE: 
  41.         printf("WiFi: Scan results available\n"); 
  42.         break; 
  43.     case HI_WIFI_EVT_CONNECTED: 
  44.         printf("WiFi: Connected\n"); 
  45.         netifapi_dhcp_start(g_lwip_netif); 
  46.         break; 
  47.     case HI_WIFI_EVT_DISCONNECTED: 
  48.         printf("WiFi: Disconnected\n"); 
  49.         netifapi_dhcp_stop(g_lwip_netif); 
  50.         hi_sta_reset_addr(g_lwip_netif); 
  51.         break; 
  52.     case HI_WIFI_EVT_WPS_TIMEOUT: 
  53.         printf("WiFi: wps is timeout\n"); 
  54.         break; 
  55.     default
  56.         break; 
  57.     } 
  58.  
  59. int hi_wifi_start_connect(void) 
  60.     int ret; 
  61.     errno_t rc; 
  62.     hi_wifi_assoc_request assoc_req = {0}; 
  63.  
  64.      
  65.     //热点名称 
  66.     rc = memcpy_s(assoc_req.ssid, HI_WIFI_MAX_SSID_LEN + 1, "CU_K22k", 7);  
  67.     if (rc != EOK) 
  68.     { 
  69.         printf("%s %d \r\n", __FILE__, __LINE__); 
  70.         return -1; 
  71.     } 
  72.  
  73.      
  74.     //热点加密方式 
  75.     assoc_req.auth = HI_WIFI_SECURITY_WPA2PSK; 
  76.  
  77.      
  78.     memcpy(assoc_req.key"tkhbx8ec", 8); 
  79.  
  80.     ret = hi_wifi_sta_connect(&assoc_req); 
  81.     if (ret != HISI_OK) 
  82.     { 
  83.         printf("%s %d \r\n", __FILE__, __LINE__); 
  84.         return -1; 
  85.     } 
  86.     printf("%s %d \r\n", __FILE__, __LINE__); 
  87.     hi_wifi_sta_get_ap_rssi 
  88.     return 0; 
  89.  
  90. void sta_demo(void) 
  91.     int ret; 
  92.     char ifname[WIFI_IFNAME_MAX_SIZE + 1] = {0}; 
  93.     int len = sizeof(ifname); 
  94.     unsigned int num = WIFI_SCAN_AP_LIMIT; 
  95.  
  96.     ret = hi_wifi_sta_start(ifname, &len); 
  97.     if (ret != HISI_OK) 
  98.     { 
  99.         printf("%s %d \r\n", __FILE__, __LINE__); 
  100.         return
  101.     } 
  102.  
  103.      
  104.     ret = hi_wifi_register_event_callback(wifi_wpa_event_cb); 
  105.     if (ret != HISI_OK) 
  106.     { 
  107.         printf("register wifi event callback failed\n"); 
  108.     } 
  109.  
  110.      
  111.     g_lwip_netif = netifapi_netif_find(ifname); 
  112.     if (g_lwip_netif == NULL
  113.     { 
  114.         printf("%s: get netif failed\n", __FUNCTION__); 
  115.         return
  116.     } 
  117.  
  118.      
  119.     ret = hi_wifi_sta_scan(); 
  120.     if (ret != HISI_OK) 
  121.     { 
  122.         printf("%s %d \r\n", __FILE__, __LINE__); 
  123.         return
  124.     } 
  125.  
  126.     sleep(5);  
  127.  
  128.     hi_wifi_ap_info *pst_results = malloc(sizeof(hi_wifi_ap_info) * WIFI_SCAN_AP_LIMIT); 
  129.     if (pst_results == NULL
  130.     { 
  131.         printf("%s %d \r\n", __FILE__, __LINE__); 
  132.         return
  133.     } 
  134.  
  135.     ret = hi_wifi_sta_scan_results(pst_results, &num); 
  136.     if (ret != HISI_OK) 
  137.     { 
  138.         printf("%s %d \r\n", __FILE__, __LINE__); 
  139.         free(pst_results); 
  140.         return
  141.     } 
  142.  
  143.     for (unsigned int loop = 0; (loop < num) && (loop < WIFI_SCAN_AP_LIMIT); loop++) 
  144.     { 
  145.         printf("SSID: %s\n", pst_results[loop].ssid); 
  146.     } 
  147.     free(pst_results); 
  148.  
  149.      
  150.     ret = hi_wifi_start_connect(); 
  151.     if (ret != 0) 
  152.     { 
  153.         printf("%s %d \r\n", __FILE__, __LINE__); 
  154.         return
  155.     } 
  156.  
  157.     return
  158. #include "lwip/sockets.h" 
  159. #define SERVER_PORT_TCP 8888 
  160. #define TCP_BACKLOG 10 
  161. int sock_fd, new_fd; 
  162. char recvbuf[512]; 
  163. char *buf = "hello I'm Server Your ?"
  164.  
  165. int tcp_demo(void) 
  166.  
  167.     //自己的地址信息 
  168.     struct sockaddr_in my_addr; 
  169.     //连接者的地址信息 
  170.     struct sockaddr_in their_addr; 
  171.     int sin_size; 
  172.     struct sockaddr_in *cli_addr; 
  173.  
  174.      
  175.     if ((sock_fd = socket(AF_INET, SOCK_STREAM,0)) == -1) 
  176.     { 
  177.         printf("%s %d \r\n", __FILE__, __LINE__); 
  178.         perror("socket is error \r\n"); 
  179.         exit(1); 
  180.     } 
  181.      
  182.      
  183.     my_addr.sin_family = AF_INET; 
  184.     my_addr.sin_port = htons(8888); 
  185.      
  186.     my_addr.sin_addr.s_addr = INADDR_ANY; 
  187.  
  188.      
  189.     bzero(&(my_addr.sin_zero), 8); 
  190.  
  191.     printf("%s %d \r\n", __FILE__, __LINE__); 
  192.  
  193.     if (bind(sock_fd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) 
  194.     { 
  195.         printf("%s %d \r\n", __FILE__, __LINE__); 
  196.         perror("bind is error \r\n"); 
  197.         exit(1); 
  198.     } 
  199.      
  200.     if (listen(sock_fd, TCP_BACKLOG) == -1) 
  201.     { 
  202.         perror("listen is error \r\n"); 
  203.         exit(1); 
  204.     } 
  205.     printf("%s %d \r\n", __FILE__, __LINE__); 
  206.     printf("START ACCEPT -----------"); 
  207.  
  208.     while (1) 
  209.     { 
  210.         sin_size = sizeof(struct sockaddr_in); 
  211.         printf("%s %d \r\n", __FILE__, __LINE__); 
  212.         if ((new_fd = accept(sock_fd, (struct sockaddr *)&their_addr, (socklen_t *)&sin_size)) == -1) 
  213.         { 
  214.             perror("accept"); 
  215.             continue
  216.         } 
  217.         cli_addr = malloc(sizeof(struct sockaddr)); 
  218.  
  219.         printf("accept addr \r\n"); 
  220.         if (cli_addr != NULL
  221.         { 
  222.             memcpy(cli_addr, &their_addr, sizeof(struct sockaddr)); 
  223.         } 
  224.         //处理目标 
  225.         ssize_t ret; 
  226.  
  227.         while (1) 
  228.         { 
  229.             printf("%s %d \r\n", __FILE__, __LINE__); 
  230.             if ((ret = recv(new_fd, recvbuf, sizeof(recvbuf), 0)) == -1) 
  231.             { 
  232.                 printf("recv error \r\n"); 
  233.                 return -1; 
  234.             } 
  235.             printf("recv: \r\n"); 
  236.             printf("%s", recvbuf); 
  237.             printf(" \r\n"); 
  238.             sleep(2); 
  239.             if ((ret = send(new_fd, buf, strlen(buf) + 1, 0)) == -1) 
  240.             { 
  241.                 perror("send :error"); 
  242.             } 
  243.             sleep(2); 
  244.         } 
  245.         close(new_fd); 
  246.         return 0; 
  247.     } 
  248.  
  249. void tcp_entry(void) 
  250.  
  251.     sta_demo(); 
  252.     tcp_demo(); 
  253.  
  254. SYS_RUN(tcp_entry); 
  255. ​ 

  1. # Copyright (c) 2020 Huawei Device Co., Ltd. 
  2. # Licensed under the Apache License, Version 2.0 (the "License"); 
  3. # you may not use this file except in compliance with the License. 
  4. # You may obtain a copy of the License at 
  5. #     http://www.apache.org/licenses/LICENSE-2.0 
  6. # Unless required by applicable law or agreed to in writing, software 
  7. # distributed under the License is distributed on an "AS IS" BASIS, 
  8. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
  9. # See the License for the specific language governing permissions and 
  10. # limitations under the License. 
  11.  
  12. static_library("sta_demo") { 
  13.     sources = [ 
  14.         "sta_demo.c" 
  15.     ] 
  16.  
  17.     include_dirs = [ 
  18.         "//utils/native/lite/include"
  19.         "//kernel/liteos_m/components/cmsis/2.0"
  20.         "//base/iot_hardware/interfaces/kits/wifiiot_lite"
  21.         "//vendor/hisi/hi3861/hi3861/third_party/lwip_sack/include"
  22.         "//foundation/communication/interfaces/kits/wifi_lite/wifiservice"
  23.          
  24.     ] 

 

 运行结果

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com/

 

来源:鸿蒙社区内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯