本案例程序将演示怎么在拓维Niobe WiFi IoT Core开发板上编写一个创建Wifi热点的业务程序,实现开发板作为AP效果。
本案例主要使用了以下几个API完成Wifi热点创建
int hi_wifi_softap_start(hi_wifi_softap_config *conf, char *ifname, int *len);
描述: 启动软AP接口函数。
参数:
名字 | 描述 |
---|---|
conf | 表示要创建的SoftAP热点配置信息. |
ifname | 接口名字 |
len | 接口名字长度,len的值必须与ifname长度一致 |
int hi_wifi_softap_stop(void);
描述: 关闭软AP接口函数。
struct netif *netifapi_netif_find(const char *name);
描述:
获取netif用于IP操作
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地址。 |
err_t netifapi_dhcp_start(struct netif *netif);
描述:
启动DHCP
主要代码分析
完成Wifi热点的创建需要以下几步
hi_wifi_softap_start
接口,启动WIFI AP模式,同时创建WIFI热点配置信息。netifapi_netif_find
接口,获取 netif 用于 IP 操作。netifapi_netif_set_addr
接口,配置WiFi AP网络的IP地址,包括网络掩码和默认网关。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;
}
修改wifi_ap_service.c
第33行的WiFi热点SSID和密码名称,改成自己想要创建的WiFi热点,长度不能够超过32个字节。
//定义一个默认的wifi名称
#define DEFAULT_WIFI_SSID "TALKWEB-5A0B"
修改 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按键的响应。
示例代码编译烧录代码后,按下开发板的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
的热点信息。可以尝试连接和断开热点,继续查看串口日志打印信息。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。