> 文档中心 > Bearpi开发板HarmonyOS之 WiFi AP热点

Bearpi开发板HarmonyOS之 WiFi AP热点


wifi_hotspot.h接口简介

  • 启用AP热点模式
    WifiErrorCode EnableHotspot(void);
  • 禁用AP热点模式
    WifiErrorCode DisableHotspot(void);
  • 设置指定的热点配置
    WifiErrorCode SetHotspotConfig(const HotspotConfig* config);
  • 获取指定的热点配置
    WifiErrorCode GetHotspotConfig(HotspotConfig* result);
  • 检查AP热点模式是否启用
    int IsHotspotActive(void);
  • 获取连接到该热点的一系列STA
    WifiErrorCode GetStationList(StationInfo* result, unsigned int* size);
  • 获取接收信号强度和频
    int GetSignalLevel(int rssi, int band);

wifi热点代码

#include #include #include "ohos_init.h"#include #include "cmsis_os2.h"#include "wifiiot_gpio.h"#include "wifiiot_gpio_ex.h"#include "wifiiot_adc.h"#include "wifiiot_errno.h"#include "wifiiot_uart.h"#include "lwip/netifapi.h"#include "wifi_hotspot.h"#include "wifi_device.h"#include "wifi_error_code.h"#define AP_SSID "BearPi"#define AP_PSK  "12345678"static void OnHotspotStaJoinHandler(StationInfo *info);static void OnHotspotStateChangedHandler(int state);static void OnHotspotStaLeaveHandler(StationInfo *info);static struct netif *pNetif = NULL;static int g_ap_enabled = 0;static WifiEvent wifi_event = {0};static WifiErrorCode error_code = 0;static BOOL WifiAPTask(void){  osDelay(200); // 注册wifi回调函数  wifi_event.OnHotspotStaLeave = OnHotspotStaLeaveHandler;  wifi_event.OnHotspotStateChanged = OnHotspotStateChangedHandler;  wifi_event.OnHotspotStaJoin = OnHotspotStaJoinHandler;  error_code = RegisterWifiEvent(&wifi_event);  if(error_code != WIFI_SUCCESS)  {     printf("RegisterWifiEvent failed, error = %d.\r\n",error_code);     return -1;  }  // 设置指定热点  HotspotConfig config = {0};  strcpy(config.ssid,AP_SSID);  strcpy(config.preSharedKey,AP_PSK);  config.band = HOTSPOT_BAND_TYPE_2G;  config.channelNum = 7;  config.securityType = WIFI_SEC_TYPE_PSK;  error_code = SetHotspotConfig(&config);  if (error_code != WIFI_SUCCESS)  {      printf("SetHotspotConfig failed, error = %d.\r\n", error_code);      return -1;  } // 启动热点   error_code = EnableHotspot();   if (error_code != WIFI_SUCCESS)    { printf("EnableHotspot failed, error = %d.\r\n", error_code); return -1;    }    // 检查热点是否打开    if(IsHotspotActive() == WIFI_HOTSPOT_NOT_ACTIVE)    { printf("Wifi station is not actived.\r\n"); return -1;    }    //启动DHCP    pNetif = netifapi_netif_find("ap0");    if(pNetif != NULL)    { ip4_addr_t bp_gw; ip4_addr_t bp_ipaddr; ip4_addr_t bp_netmask; IP4_ADDR(&bp_gw, 192, 168, 1, 1);    /* input your gateway for example: 192.168.1.1 */ IP4_ADDR(&bp_ipaddr, 192, 168, 1, 1);/* input your IP for example: 192.168.1.1 */ IP4_ADDR(&bp_netmask, 255, 255, 255, 0);    /* input your netmask for example: 255.255.255.0 */  err_t ret = netifapi_netif_set_addr(pNetif,&bp_ipaddr,&bp_netmask,&bp_gw); if(ret != ERR_OK) {     printf("netifapi_netif_set_addr failed, error = %d.\r\n", ret);     return -1; }     ret = netifapi_dhcps_start(pNetif,0,0);if(ret != ERR_OK) {      printf("netifapi_dhcp_start failed, error = %d.\r\n", ret);     return -1; }    }    while (1)    {      /* code */      osDelay(1);    }    }static void HotspotStaJoinTask(void){    static char macAddress[32] = {0};    StationInfo stainfo[WIFI_MAX_STA_NUM] = {0};    StationInfo *sta_list_node = NULL;    unsigned int size = WIFI_MAX_STA_NUM;    error_code = GetStationList(stainfo,&size);    if (error_code != WIFI_SUCCESS) { printf("HotspotStaJoin:get list fail, error is %d.\r\n", error_code); return;    }     sta_list_node = stainfo;     for(uint32_t i=0; i<size; i++,sta_list_node++)     {uint8_t *mac = sta_list_node->macAddress;snprintf(macAddress, sizeof(macAddress), "%02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);printf("HotspotSta[%d]: macAddress=%s.\r\n",i, macAddress);     }     g_ap_enabled++;}static void OnHotspotStaJoinHandler(StationInfo *info){    if (info == NULL)     {      printf("HotspotStaJoin:info is null.\r\n");    }     else    {printf("New Sta Join\n");osThreadAttr_t attr; attr.name = "HotspotStaJoinTask"; attr.attr_bits = 0U; attr.cb_mem = NULL; attr.cb_size = 0U; attr.stack_mem = NULL; attr.stack_size = 2048; attr.priority = 24; if (osThreadNew((osThreadFunc_t)HotspotStaJoinTask, NULL, &attr) == NULL) {     printf("HotspotStaJoin:create task fail!\r\n"); }    }}static void OnHotspotStateChangedHandler(int state){   printf("HotspotStateChanged:state is %d.\r\n", state);    if (state == WIFI_HOTSPOT_ACTIVE)     { printf("wifi hotspot active.\r\n");    }     else     { printf("wifi hotspot noactive.\r\n");    }}static void OnHotspotStaLeaveHandler(StationInfo *info){    if (info == NULL)     {   printf("HotspotStaLeave:info is null.\r\n");    }     else     { 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("HotspotStaLeave: macAddress=%s, reason=%d.\r\n", macAddress, info->disconnectedReason); g_ap_enabled--;    }}static void my_led_example(void){     osThreadAttr_t attr;     attr.attr_bits = 0;     attr.name = "wifi_ap";     attr.cb_mem = NULL;     attr.cb_size = 0;     attr.priority = 24;     attr.stack_size = 10240;     if(osThreadNew((osThreadFunc_t)WifiAPTask,NULL,&attr) == NULL)     { printf("Falied to create adc_func!\n");    }}SYS_RUN(my_led_example);

运行效果

在这里插入图片描述