完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一、在源码中建立demo文件
在app下建立wifidemo文件夹并创建BUILD.gn和wifi_ap.c文件 二、编写代码 代码来自gitee上的开源项目hihopeorg 在wifidemo/wifi_ap.c中写入 #include #include #include #include "ohos_init.h" #include "cmsis_os2.h" #include "wifi_hotspot.h" #include "lwip/netifapi.h" static volatile int g_hotspotStarted = 0; static void OnHotspotStateChanged(int state) { printf("OnHotspotStateChanged: %d.rn", state); if (state == WIFI_HOTSPOT_ACTIVE) { g_hotspotStarted = 1; } else { g_hotspotStarted = 0; } } static volatile int g_joinedStations = 0; static void PrintStationInfo(StationInfo* info) { if (!info) return; static char macAddress[32] = {0}; unsigned char* mac = info->macAddress; snprintf(macAddress, sizeof(macAddress), "%02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); printf(" PrintStationInfo: mac=%s, reason=%d.rn", macAddress, info->disconnectedReason); } static void OnHotspotStaJoin(StationInfo* info) { g_joinedStations++; PrintStationInfo(info); printf("+OnHotspotStaJoin: active stations = %d.rn", g_joinedStations); } static void OnHotspotStaLeave(StationInfo* info) { g_joinedStations--; PrintStationInfo(info); printf("-OnHotspotStaLeave: active stations = %d.rn", g_joinedStations); } WifiEvent g_defaultWifiEventListener = { .OnHotspotStaJoin = OnHotspotStaJoin, .OnHotspotStaLeave = OnHotspotStaLeave, .OnHotspotStateChanged = OnHotspotStateChanged, }; static struct netif* g_iface = NULL; int StartHotspot(const HotspotConfig* config) { WifiErrorCode errCode = WIFI_SUCCESS; errCode = RegisterWifiEvent(&g_defaultWifiEventListener); printf("RegisterWifiEvent: %drn", errCode); errCode = SetHotspotConfig(config); printf("SetHotspotConfig: %drn", errCode); g_hotspotStarted = 0; errCode = EnableHotspot(); printf("EnableHotspot: %drn", errCode); while (!g_hotspotStarted) { osDelay(10); } printf("g_hotspotStarted = %d.rn", g_hotspotStarted); g_iface = netifapi_netif_find("ap0"); if (g_iface) { ip4_addr_t ipaddr; ip4_addr_t gateway; ip4_addr_t netmask; IP4_ADDR(&ipaddr, 192, 168, 1, 1); /* input your IP for example: 192.168.1.1 */ IP4_ADDR(&gateway, 192, 168, 1, 1); /* input your gateway for example: 192.168.1.1 */ IP4_ADDR(&netmask, 255, 255, 255, 0); /* input your netmask for example: 255.255.255.0 */ err_t ret = netifapi_netif_set_addr(g_iface, &ipaddr, &netmask, &gateway); printf("netifapi_netif_set_addr: %drn", ret); ret = netifapi_dhcps_start(g_iface, 0, 0); // 海思扩展的HDCP服务接口 printf("netifapi_dhcp_start: %drn", ret); } return errCode; } void StopHotspot(void) { if (g_iface) { err_t ret = netifapi_dhcps_stop(g_iface); // 海思扩展的HDCP服务接口 printf("netifapi_dhcps_stop: %drn", ret); } WifiErrorCode errCode = UnRegisterWifiEvent(&g_defaultWifiEventListener); printf("UnRegisterWifiEvent: %drn", errCode); errCode = DisableHotspot(); printf("EnableHotspot: %drn", errCode); } static void WifiHotspotTask(void *arg) { (void)arg; WifiErrorCode errCode; HotspotConfig config = {0}; // 准备AP的配置参数 strcpy(config.ssid, "HiSpark-AP"); strcpy(config.preSharedKey, "12345678"); config.securityType = WIFI_SEC_TYPE_PSK; config.band = HOTSPOT_BAND_TYPE_2G; config.channelNum = 7; osDelay(10); printf("starting AP ...rn"); errCode = StartHotspot(&config); printf("StartHotspot: %drn", errCode); int timeout = 60; while (timeout--) { printf("After %d seconds Ap will turn off!rn", timeout); osDelay(100); } printf("stop AP ...rn"); StopHotspot(); printf("stop AP ...rn"); } static void WifiHotspotDemo(void) { osThreadAttr_t attr; attr.name = "WifiHotspotTask"; attr.attr_bits = 0U; attr.cb_mem = NULL; attr.cb_size = 0U; attr.stack_mem = NULL; attr.stack_size = 10240; attr.priority = osPriorityNormal; if (osThreadNew(WifiHotspotTask, NULL, &attr) == NULL) { printf("[WifiHotspotDemo] Falied to create WifiHotspotTask!n"); } } APP_FEATURE_INIT(WifiHotspotDemo); 在wifidemo/BUILD.gn中写入 static_library("wifidemo") { sources = [ "wifi_ap.c", ] include_dirs = [ "//utils/native/lite/include", "//kernel/liteos_m/components/cmsis/2.0", "//base/iot_hardware/interfaces/kits/wifiiot_lite", "//foundation/communication/interfaces/kits/wifi_lite/wifiservice", "//vendor/hisi/hi3861/hi3861/third_party/lwip_sack/include/", "//foundation/communication/wifi_lite/interfaces/wifiservice" ] } 在上级目录的app/BUILD.gn中写入 import("//build/lite/config/component/lite_component.gni") lite_component("app") { features = [ "wifidemo", ] } 三、在Linux下使用hb工具进行编译 root@DESKTOP-QAO2AOK:~/harmonyos/code-2.0-canary# hb set [OHOS INFO] Input code path: . OHOS Which product do you need? wifiiot_hispark_pegasus root@DESKTOP-QAO2AOK:~/harmonyos/code-2.0-canary# hb build -b release 如果曾经设置过hb set就不需要再设置了,直接这样就可以了 root@DESKTOP-QAO2AOK:~/harmonyos/code-2.0-canary# hb build -b release 看到success字样即为编译成功 保存项目并打开 点击upload进行烧录,烧录时需要根据提示按下开发板的rst键,稍等片刻,看到success代表烧录成功。 烧录完成后打开串口调试助手 按下rst键重启开发板,这时候可以看到串口调试器里面已经打印出创建wifi的信息,同时用手机wifi功能可扫描到创建的wifi。 |
|
|
|
只有小组成员才能发言,加入小组>>
3309 浏览 9 评论
2988 浏览 16 评论
3490 浏览 1 评论
9049 浏览 16 评论
4083 浏览 18 评论
1167浏览 3评论
601浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
592浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2329浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1892浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 21:08 , Processed in 1.661680 second(s), Total 78, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号