Hi3861 WiFi操作,热点连接 精华
Hi3861 WiFi操作,热点连接
之前我们使用Hi3861的时候,是使用AT指令连接到WiFi热点的。例如:
但是很多时候,我们需要实现开机后自动连接到某个热点,光靠AT指令不行。
Hi3861 为我们提供了WiFi操作的相关API,方便我们编写代码,实现热点连接。
1.代码实现
先直接上代码和操作演示。
跟我们最早的hello world代码一样,在app下新增业务wifi_demo,其中hello_world.c为业务代码,BUILD.gn为编译脚本,具体规划目录结构如下:
.
└── applications
└── sample
└── wifi-iot
└── app
│── wifi_demo
│ │── wifi_demo.c
│ └── BUILD.gn
└── BUILD.gn
Wifi_demo.c 代码如下:
见附件doc\05 WiFi操作\sta_demo\sta_demo.c
Wifi_demo目录下的BUILD.gn文件内容如下:
static_library("wifi_demo") {
sources = [
"wifi_demo.c"
]
include_dirs = [
"//utils/native/lite/include",
"//kernel/liteos_m/components/cmsis/2.0",
"//base/iot_hardware/interfaces/kits/wifiiot_lite",
"//vendor/hisi/hi3861/hi3861/third_party/lwip_sack/include",
"//foundation/communication/interfaces/kits/wifi_lite/wifiservice",
]
}
app目录下的BUILD.gn文件内容修改如下:
import("//build/lite/config/component/lite_component.gni")
lite_component("app") {
features = [
"wifi_demo:wifi_demo",
]
}
编译烧录,查看串口数据:
可以看到有打印扫描到的热点名称:
SSID: 15919500
SSID: Netcore_FD55A7
同时最后打印:WiFi: Connected 成功连接上热点。
2.wifi api接口说明
Hi3861 提供了非常多的wifi相关API,主要文件是 hi_wifi_api.h
我们这里只列举最重要的几个API
(1)开启STA
int hi_wifi_sta_start(char *ifname, int *len);
(2)停止STA
int hi_wifi_sta_stop(void);
(1)扫描附件的热点
int hi_wifi_sta_scan(void);
(4)连接热点
int hi_wifi_sta_connect(hi_wifi_assoc_request *req);
其中hi_wifi_assoc_request *req 结构的定义如下:
这里需要注意的是,通常加密方式是:HI_WIFI_SECURITY_WPA2PSK
例如我家的热点的连接方式的代码实现如下:
楼主,请问下执行到hi_wifi_sta_start() 3861会重启是什么原因呢
连老师,你好,求教一个疑问
我在git上clone 了 easy_wifi的demo
一个主要问题:wifi模组为什么ping不通外网?
描述我的测试结果:
用手机连上ap,串口返回的连接正常,然后用at+ping=www.baidu.com,ping不通,但ping局域网ip是正常。
代码我看了,没看出什么问题。
疑惑1:难道sta和ap这2个是不是不能共存?我看网上提到可共存,如果不能共存怎么切换使用?但我们平时用的手机,做热点同时,照样可以连接wifi上网。
疑惑2:我单独使用sta模式连上我的路由器后,怎么向云端数据交互测试一下?
请前辈们帮我解惑,不胜感激!