admin管理员组

文章数量:1581089

文章目录

  • 前言
  • 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]无线接入点的嵌入式设计与实现

本文标签: 网络通信学习笔记OpenHarmony