17 Star 59 Fork 24

Talkweb_OpenHarmony / Niobe

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README.md 5.25 KB
一键复制 编辑 原始数据 按行查看 历史
angeyan 提交于 2021-11-16 08:43 . update demo check

Niobe开发板WiFi-AP热点演示

本案例程序将演示怎么在拓维Niobe WiFi IoT Core开发板上编写一个创建Wifi热点的业务程序,实现开发板作为AP效果。

image-20210924115053858

Wifi API分析

本案例主要使用了以下几个API完成Wifi热点创建

hi_wifi_softap_start()

int hi_wifi_softap_start(hi_wifi_softap_config *conf, char *ifname, int *len);

描述: 启动软AP接口函数。

参数:

名字 描述
conf 表示要创建的SoftAP热点配置信息.
ifname 接口名字
len 接口名字长度,len的值必须与ifname长度一致

hi_wifi_softap_stop()

int hi_wifi_softap_stop(void);

描述: 关闭软AP接口函数。

netifapi_netif_find()

struct netif *netifapi_netif_find(const char *name);

描述:

获取netif用于IP操作

netifapi_netif_set_addr()

err_t netifapi_netif_set_addr(struct netif *netif, const ip4_addr_t *ipaddr,
                              const ip4_addr_t *netmask, const ip4_addr_t *gw);

描述: 更改网络接口的IP地址配置,包括网络掩码和默认网关。

参数:

名字 描述
netif 表示要更改的网络接口。
ipaddr 表示新的IP地址。
netmask 表示新的网络掩码。
gw 表示新的默认网关IP地址。

netifapi_dhcp_start()

err_t netifapi_dhcp_start(struct netif *netif);

描述:

启动DHCP

软件设计

主要代码分析

完成Wifi热点的创建需要以下几步

  1. 通过 hi_wifi_softap_start 接口,启动WIFI AP模式,同时创建WIFI热点配置信息。
  2. 调用 netifapi_netif_find 接口,获取 netif 用于 IP 操作。
  3. 调用netifapi_netif_set_addr接口,配置WiFi AP网络的IP地址,包括网络掩码和默认网关。
  4. 调用 netifapi_dhcp_start 接口,启动 DHCP, 配置 IP。
int wifi_start_ap(void)
{
    int ret;
    errno_t rc;
    char ifname[WIFI_IFNAME_MAX_SIZE + 1] = {0};
    int len = sizeof(ifname);
    ip4_addr_t st_gw;
    ip4_addr_t st_ipaddr;
    ip4_addr_t st_netmask;

    hi_wifi_softap_config hapd_conf = {
        .ssid = DEFAULT_WIFI_SSID,
        .authmode = HI_WIFI_SECURITY_OPEN,
        .channel_num = 1
    };

    ret = hi_wifi_softap_start(&hapd_conf, ifname, &len);
    if (ret != HISI_OK) {
        printf("hi_wifi_softap_start\n");
        return -1;
    }

    /* acquire netif for IP operation */
    g_lwip_netif = netifapi_netif_find(ifname);
    if (g_lwip_netif == NULL) {
        printf("%s: get netif failed\n", __FUNCTION__);
        return -1;
    }

    IP4_ADDR(&st_gw, 192, 168, 10, 1);          /* input your IP for example: 192.168.1.1 */
    IP4_ADDR(&st_ipaddr, 192, 168, 10, 1);      /* input your netmask for example: 192.168.1.1 */
    IP4_ADDR(&st_netmask, 255, 255, 255, 0);     /* input your gateway for example: 255.255.255.0 */
    netifapi_netif_set_addr(g_lwip_netif, &st_ipaddr, &st_netmask, &st_gw);

    netifapi_dhcps_start(g_lwip_netif, 0, 0);

    return 0;
}

编译调试

修改创建热点的SSID名称

修改wifi_ap_service.c第33行的WiFi热点SSID和密码名称,改成自己想要创建的WiFi热点,长度不能够超过32个字节。

//定义一个默认的wifi名称
#define DEFAULT_WIFI_SSID   "TALKWEB-5A0B"

修改 BUILD.gn 文件

修改 applications/app/BUILD.gn 路径中的 BUILD.gn 文件,指定 network_wifiap_example 参与编译。

# "TW301_Network_wifista:network_wifista_example",
"TW302_Network_wifiap:network_wifiap_example",
# "TW303_Network_mqttclient:network_mqttclient_example",
# "TW304_Network_httpclient:network_httpclient_example",
# "TW305_Network_ntpclient:network_ntpclient_example",# "TW208_Module_ds1307:module_ds1307_example",

注意事项

需要用跳线帽短接SW1按键(左侧的按键)上方的左侧引脚,参考下图,两组引脚都用跳线帽短接。如果没有用跳线帽短接,则无法触发user按键的响应。 image-20211024115053858

运行结果

示例代码编译烧录代码后,按下开发板的RESET按键(右边的按键),等待系统启动完成,再按下开发板的SW1按键(左边的按键),启动AP创建,通过串口助手查看日志,会打印创建Wifi热点信息。

ready to OS start

sdk ver:Hi3861V100R001C00SPC025 2020-09-03 18:10:00

formatting spiffs...
FileSystem mount ok.
wifi init success!
hilog will init.
hievent will init.
hievent init success.
[Talkweb Niobe] Entry Wifi Ap Service!

hiview init success.No crash dump found!

wifi_start_softap 

+NOTICE:STA CONNECTED
+NOTICE:STA DISCONNECTED
+NOTICE:STA CONNECTED
+NOTICE:STA DISCONNECTED
+NOTICE:STA CONNECTED
+NOTICE:STA CONNECTED

选择可以扫描发现wifi ap热点的设备,比如PC笔记本电脑,我们就可以看到wifi列表中存在TALKWEB-5A0B的热点信息。可以尝试连接和断开热点,继续查看串口日志打印信息。

image-20210926112353028

1
https://gitee.com/talkweb_oh/niobe.git
git@gitee.com:talkweb_oh/niobe.git
talkweb_oh
niobe
Niobe
master

搜索帮助