BL602 WIFI的使用

1、打开工程目录下的proj_config.mk文件,配置CONFIG_WIFI:=1

CONFIG_WIFI:=1

2、打开工程目录下的Makefile文件,添加WIFI依赖的配置,如下面的COMPONENTS_WIFI

COMPONENTS_BLSYS   := bltime blfdt blmtd bloop loopadc looprt loopset
COMPONENTS_VFS     := romfs
COMPONENTS_WIFI    := bl602_wifi bl602_wifidrv lwip lwip_dhcpd dns_server

INCLUDE_COMPONENTS += freertos_riscv_ram bl602 bl602_std hal_drv vfs yloop utils cli blog blog_testc
INCLUDE_COMPONENTS += easyflash4
INCLUDE_COMPONENTS += $(COMPONENTS_BLSYS)
INCLUDE_COMPONENTS += $(COMPONENTS_VFS)
INCLUDE_COMPONENTS += $(COMPONENTS_WIFI)
INCLUDE_COMPONENTS += $(PROJECT_NAME)

3、在bfl_main函数中调用tcpip_init

tcpip_init(NULL, NULL);

4、下面创建WIFI的任务,在aos_loop_proc函数中调用user_wifi_init

 user_wifi.c文件如下

#include "user_wifi.h"

//===================================================================
//							变量定义
//===================================================================
static wifi_conf_t conf =
{
    .country_code = "CN",
};


/********************************************************************
 *@brief	使能WIFI协议栈
 *@input    
 *@return
********************************************************************/
static void cmd_stack_wifi()
{
    /*wifi fw stack and thread stuff*/
    static uint8_t stack_wifi_init  = 0;

    if (1 == stack_wifi_init) {
        puts("Wi-Fi Stack Started already!!!\r\n");
        return;
    }
    stack_wifi_init = 1;

    printf("Start Wi-Fi fw @%lums\r\n", bl_timer_now_us()/1000);
    hal_wifi_start_firmware_task();
    /*Trigger to start Wi-Fi*/
    printf("Start Wi-Fi fw is Done @%lums\r\n", bl_timer_now_us()/1000);
    aos_post_event(EV_WIFI, CODE_WIFI_ON_INIT_DONE, 0);
}


/********************************************************************
 *@brief	连接指定的WIFI
 *@input    
 *@return
********************************************************************/
static void wifi_sta_connect(char *ssid, char *password)
{
    wifi_interface_t wifi_interface;

    wifi_interface = wifi_mgmr_sta_enable();
    wifi_mgmr_sta_connect(wifi_interface, ssid, password, NULL, NULL, 0, 0);
}


/********************************************************************
 *@brief	WIFI事件
 *@input    
 *@return
********************************************************************/
static void user_wifi_event_cb(input_event_t *event, void *private_data)
{
    static char *ssid;
    static char *password;

    switch (event->code) {
        case CODE_WIFI_ON_INIT_DONE:
        {
            printf("[APP] [EVT] INIT DONE %lld\r\n", aos_now_ms());
            wifi_mgmr_start_background(&conf);
        }
        break;
        case CODE_WIFI_ON_MGMR_DONE:
        {
            printf("[APP] [EVT] MGMR DONE %lld, now %lums\r\n", aos_now_ms(), bl_timer_now_us()/1000);
            
            //开始连接WIFI
            wifi_sta_connect(USER_WIFI_SSID,USER_WIFI_PASS);
        }
        break;
        case CODE_WIFI_ON_MGMR_DENOISE:
        {
            printf("[APP] [EVT] Microwave Denoise is ON %lld\r\n", aos_now_ms());
        }
        break;
        case CODE_WIFI_ON_SCAN_DONE:
        {
            printf("[APP] [EVT] SCAN Done %lld\r\n", aos_now_ms());
            wifi_mgmr_cli_scanlist();
        }
        break;
        case CODE_WIFI_ON_SCAN_DONE_ONJOIN:
        {
            printf("[APP] [EVT] SCAN On Join %lld\r\n", aos_now_ms());
        }
        break;
        case CODE_WIFI_ON_DISCONNECT:
        {
            printf("[APP] [EVT] disconnect %lld, Reason: %s\r\n",
                aos_now_ms(),
                wifi_mgmr_status_code_str(event->value)
            );
        }
        break;
        case CODE_WIFI_ON_CONNECTING:
        {
            printf("[APP] [EVT] Connecting %lld\r\n", aos_now_ms());
        }
        break;
        case CODE_WIFI_CMD_RECONNECT:
        {
            printf("[APP] [EVT] Reconnect %lld\r\n", aos_now_ms());
        }
        break;
        case CODE_WIFI_ON_CONNECTED:
        {
            printf("[APP] [EVT] connected %lld\r\n", aos_now_ms());
        }
        break;
        case CODE_WIFI_ON_PRE_GOT_IP:
        {
            printf("[APP] [EVT] connected %lld\r\n", aos_now_ms());
        }
        break;
        case CODE_WIFI_ON_GOT_IP:
        {
            printf("[APP] [EVT] GOT IP %lld\r\n", aos_now_ms());
            printf("[SYS] Memory left is %d Bytes\r\n", xPortGetFreeHeapSize());
        }
        break;
        case CODE_WIFI_ON_EMERGENCY_MAC:
        {
            printf("[APP] [EVT] EMERGENCY MAC %lld\r\n", aos_now_ms());
            hal_reboot();//one way of handling emergency is reboot. Maybe we should also consider solutions
        }
        break;
        case CODE_WIFI_ON_PROV_SSID:
        {
            printf("[APP] [EVT] [PROV] [SSID] %lld: %s\r\n",
                    aos_now_ms(),
                    event->value ? (const char*)event->value : "UNKNOWN"
            );
            if (ssid) {
                vPortFree(ssid);
                ssid = NULL;
            }
            ssid = (char*)event->value;
        }
        break;
        case CODE_WIFI_ON_PROV_BSSID:
        {
            printf("[APP] [EVT] [PROV] [BSSID] %lld: %s\r\n",
                    aos_now_ms(),
                    event->value ? (const char*)event->value : "UNKNOWN"
            );
            if (event->value) {
                vPortFree((void*)event->value);
            }
        }
        break;
        case CODE_WIFI_ON_PROV_PASSWD:
        {
            printf("[APP] [EVT] [PROV] [PASSWD] %lld: %s\r\n", aos_now_ms(),
                    event->value ? (const char*)event->value : "UNKNOWN"
            );
            if (password) {
                vPortFree(password);
                password = NULL;
            }
            password = (char*)event->value;
        }
        break;
        case CODE_WIFI_ON_PROV_CONNECT:
        {
            printf("[APP] [EVT] [PROV] [CONNECT] %lld\r\n", aos_now_ms());
            printf("connecting to %s:%s...\r\n", ssid, password);
            wifi_sta_connect(ssid, password);
        }
        break;
        case CODE_WIFI_ON_PROV_DISCONNECT:
        {
            printf("[APP] [EVT] [PROV] [DISCONNECT] %lld\r\n", aos_now_ms());
        }
        break;
        case CODE_WIFI_ON_AP_STA_ADD:
        {
            printf("[APP] [EVT] [AP] [ADD] %lld, sta idx is %lu\r\n", aos_now_ms(), (uint32_t)event->value);
        }
        break;
        case CODE_WIFI_ON_AP_STA_DEL:
        {
            printf("[APP] [EVT] [AP] [DEL] %lld, sta idx is %lu\r\n", aos_now_ms(), (uint32_t)event->value);
        }
        break;
        default:
        {
            printf("[APP] [EVT] Unknown code %u, %lld\r\n", event->code, aos_now_ms());
            /*nothing*/
        }
    }
}


/********************************************************************
 *@brief	WIFI任务
 *@input    
 *@return
********************************************************************/
static void user_wifi_task(void *arg)
{
    aos_register_event_filter(EV_WIFI, user_wifi_event_cb, NULL);
    cmd_stack_wifi(NULL, 0, 0, NULL);

	while(1)
	{
        vTaskDelay(1000/portTICK_RATE_MS);
	}	

	vTaskDelete(NULL);
}


/********************************************************************
 *@brief	WIFI初始化
 *@input    
 *@return
********************************************************************/
void user_wifi_init()
{
    printf("user_wifi_init\r\n");
    xTaskCreate(user_wifi_task, "", 512, NULL, 2, NULL);
}




user_wifi.h文件如下

#ifndef __USER_WIFI_H__
#define __USER_WIFI_H__


#include <bl60x_fw_api.h>
#include <wifi_mgmr_ext.h>

#include <lwip/tcpip.h>
#include <lwip/sockets.h>
#include <lwip/netdb.h>
#include <lwip/tcp.h>
#include <lwip/err.h>

//===================================================================
//							常量定义
//===================================================================
#define USER_WIFI_SSID      "WIFI_TEST"
#define USER_WIFI_PASS      "12345678"


//===================================================================
//							结构体定义
//===================================================================




//===================================================================
//							函数声明
//===================================================================
void user_wifi_init();



#endif

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
当您使用BL602 SDK开发BL602应用程序时,您需要编写一个Makefile来指导编译和构建过程。以下是一个简单的BL602 Makefile示例: ```makefile # 指定编译器和工具链 CC := riscv-none-embed- LD := riscv-none-embed-ld # 指定编译器选项 CFLAGS := -march=rv32imac -mabi=ilp32 -O2 -Wall # 指定链接器选项 LDFLAGS := -nostartfiles -Wl,-T,bl602.ld # 源文件列表 SRCS := main.c foo.c bar.c # 生成目标文件列表 OBJS := $(SRCS:.c=.o) # 指定输出文件名 TARGET := app all: $(TARGET) $(TARGET): $(OBJS) $(LD) $(LDFLAGS) $^ -o $@ %.o: %.c $(CC) $(CFLAGS) -c $< -o $@ clean: rm -f $(OBJS) $(TARGET) ``` 在这个示例中,您需要根据您的项目结构和需求进行适当的调整。以下是一些常用的Makefile指令解释: - `CC`:指定编译器名称(例如,riscv-none-embed-gcc)。 - `LD`:指定链接器名称(例如,riscv-none-embed-ld)。 - `CFLAGS`:指定编译器选项(例如,优化等级,警告等)。 - `LDFLAGS`:指定链接器选项(例如,链接脚本等)。 - `SRCS`:列出所有源文件的列表。 - `OBJS`:根据`SRCS`生成目标文件列表。 - `TARGET`:指定生成的可执行文件名。 - `all`:默认目标,编译整个项目。 - `$(TARGET)`:链接目标文件生成可执行文件。 - `%.o: %.c`:规则,指示如何将.c文件编译为.o目标文件。 - `clean`:清除生成的目标文件和可执行文件。 要使用此Makefile,您可以将其保存为名为`Makefile`的文件,并在终端中使用`make`命令来编译和构建您的BL602应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dear_Wally

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值