> 文档中心 > OpenHarmony学习笔记——网络通信

OpenHarmony学习笔记——网络通信

文章目录

  • 前言
  • AP热点模式
    • AP简介
    • 使用Hi3861创建AP热点
    • 效果预览
      • 应用举例
  • STA模式
    • STA简介
    • Hi3861配置STA模式
    • 效果预览
  • 总结
  • 往期回顾

前言

前面在接入OneNET的笔记中提到了Hi3861是自带网络通信功能的,就类ESP8266可以使用STA模式接入路由器,也可以使用AP热点模式开启一个热点供其他设备连接。本文就来扒一扒Hi3861的AP热点连接以及STA联网功能。

AP热点模式

AP简介

所谓AP模式即热点功能,开启后其他的的设备就可以根据开启的AP热点名称、密码、频段以及加密格式进行连接。是无线局域网的一种典型应用。AP是Access Point的简称,即“无线访问节点”,无线AP是无线网和有线网之间沟通的桥梁,是组建无线局域网(WLAN)的核心设备。它主要是提供无线工作站和有线局域网之间的互相访问,这样,在AP信号覆盖范围内的无线工作站可以通过它进行相互通信,AP在WLAN中就相当于发射基站在移动通信网络中的角色。[^1]
类似日常生活中的路由器就是一个AP,手机、电脑等终端就需要通过连接路由器来访问网络。(图片截取自红心物联科技)
在这里插入图片描述

使用Hi3861创建AP热点

这里可以对比一下ESP8266配置为AP模式的API,可以发现二者的代码思路大致相似,都是获取热点的配置参数,这其中包括SSID、password等关键参数;然后是打开对应的模式,接着就是借用各种回调函数实现功能。这里的代码笔者对比的是小熊派的底层。有关ESP8266的AP/STA模式可以参考此文——ESP8266–STA/AP模式。
在这里插入图片描述
以下是小熊派的API介绍:
在这里插入图片描述
在这里插入图片描述
当然如果觉得小熊派的底层有些复杂,也可以试试隔壁元气派的AP模式API,元气派的代码相对于小熊派而言进一步做了封装,只需要修改宏定义中的SSID和password然后调用一个初始化函数即可。当然要是用元气派的方法的话还需要导入他们的头文件才行,想要试试的可以参考此链接。WIFI-AP模式。
代码如下:

#include <stdio.h>#include <string.h>#include <unistd.h>#include "ohos_init.h"#include "cmsis_os2.h"#include "genki_wifi_ap.h"#define WIFI_SSID "hello_itcast"#define WIFI_PASSWORD "12345678"static void wifi_task(void) {    wifi_ap_start(WIFI_SSID, WIFI_PASSWORD);}static void start(void){    osThreadAttr_t attr;    attr.name = "wifi_ap";    attr.attr_bits = 0U;    attr.cb_mem = NULL;    attr.cb_size = 0U;    attr.stack_mem = NULL;    attr.stack_size = 1024 * 4;    attr.priority = 25;    if (osThreadNew((osThreadFunc_t)wifi_task, NULL, &attr) == NULL)    { printf("Create WIFI AP task Failed!\r\n");    }}APP_FEATURE_INIT(start);

效果预览

再编译下载后即可搜索到一个根据自己宏定义一样的wifi名称。
在这里插入图片描述

应用举例

使用AP模式可以在Hi3861端搭建一个简单的服务器,然后通过连接此AP访问服务器,进而在AP组成的局域网内实现一些控制,类似近期笔者参加的立创EDA与传智博学谷的鸿蒙训练营中的远程开关就是一个很好地案例,有关的演示和代码可以去活动获取,实物效果在B站上——比何同学的关灯更简单粗暴。

STA模式

STA简介

有了上述的AP热点,当设备需要连接到AP端时,就需要使用到另外一个模式了,他就是STA(图片截取自红心物联科技)
在这里插入图片描述

Hi3861配置STA模式

整个代码思路就跟生活中手机或平板需要到一个新的地点想要连接wifi一样;需要打开wifi,然后搜索周围的热点名,然后选中热点名,输入密码,最后成功连接。同样,这些步骤都有对应的API接口函数,通过调用这些接口即可实现效果。在这里插入图片描述
同样,如果觉得这个底层有些麻烦,也可以使用元气派的API接口,只需要修改WIFI_SSID 、WIFI_PASSWORD 、HOSTNAME 即可。
代码如下:

#include <stdio.h>#include <string.h>#include <unistd.h>#include "ohos_init.h"#include "cmsis_os2.h"#include "genki_wifi_sta.h"#define WIFI_SSID "itheima"#define WIFI_PASSWORD "12345678"#define HOSTNAME "itcast"static void wifi_task(void) {    wifi_sta_connect(WIFI_SSID, WIFI_PASSWORD, HOSTNAME);}static void start(void){    osThreadAttr_t attr;    attr.name = "wifi_sta";    attr.attr_bits = 0U;    attr.cb_mem = NULL;    attr.cb_size = 0U;    attr.stack_mem = NULL;    attr.stack_size = 1024 * 4;    attr.priority = 25;    if (osThreadNew((osThreadFunc_t)wifi_task, NULL, &attr) == NULL)    { printf("Create WIFI STA task Failed!\r\n");    }}APP_FEATURE_INIT(start);

以下是小熊派的API接口代码。
在这里插入图片描述
在这里插入图片描述

效果预览

使用小熊派的代码会返回wifi_connect_succeed,并且会启用DHCP,给客户端分配一个IP地址,这样,STA端设备就可以使用此IP进行访问网络了。有关DHCP的介绍可以参考此文——Wireshark分析DHCP。
在这里插入图片描述

总结

本文主要是简介一下Hi3861的AP模式与STA模式,为后面的UDP、TCP做个铺垫,所以写的很干巴,文中如有不妥之处,欢迎大家批评指正。

往期回顾

OpenHarmony学习笔记——南向开发环境搭建
OpenHarmony学习笔记——编辑器访问Linux服务器进行编译
OpenHarmony学习笔记——点亮你的LED
OpenHarmony学习笔记——多线程的创建
OpenHarmony学习笔记——I2C驱动0.96OLED屏幕
OpenHarmony学习笔记——Hi3861使用DHT11获取温湿度
OpenHarmony学习笔记——Hi3861接入OneNET
手把手教你OneNET数据可视化
OpenHarmony学习笔记——Hi386+ASR-01的语音识别助手
[^1]无线接入点的嵌入式设计与实现