ESP8266 RTOS2.0学习之旅(3)— 连接到WiFi

连接到WiFi

一、初始化wifi连接

user_init()里设置WiFi 连接的参数,然后开始WiFi连接

    wifi_set_opmode(STATION_MODE); /* 设置为STATION模式 */
    struct station_config config;	/* 新建WiFi连接初始化结构体 */
    sprintf(config.ssid, "WiFi-William");		/* 设置WiFi名称 */
    sprintf(config.password, "pswdwilliam");	/* 设置WiFi密码 */
    wifi_station_set_config(&config);	/* 设置WiFi station接口配置,并保存到 flash */
    wifi_station_connect(); 	/* 连接路由器 */

编译烧录运行,可以看到,连接成功,并且获取到了IP地址
在这里插入图片描述

二、WiFi连接事件

新建app_wifi.c文件,然后将WiFi初始化放入wifi_sta_init()函数,在user_init()函数中调用即可,并且在其中注册一个WiFi连接事件回调函数,新建一个wifi连接任务和WiFi连接消息队列,在WiFi连接任务里等待WiFi连接消息队列的消息,代码如下:

#include "esp_common.h"
#include "freertos/queue.h"

/* 定义wifi连接标志 */
uint8_t WiFi_CONNECTED = 0x01;
uint8_t WiFi_FAIL = 0x02;

/* 定义一个WiFi连接消息队列句柄 */
xQueueHandle WiFi_Queue;

void wifi_handle_event_cb(System_Event_t *event)
{
	static uint32_t retry_num = 0;
    /* 打印WiFi连接事件id */
    os_printf("[WiFi] event id : 0x%u \n", event->event_id);

    switch (event->event_id) {
    	/* wifi连接成功 */
		case EVENT_STAMODE_CONNECTED:
			printf("connect to ssid %s, channel %d\n",event->event_info.connected.ssid,event->event_info.connected.channel);
			retry_num = 0;
			xQueueSend(WiFi_Queue, &WiFi_CONNECTED, 10);
			break;
    	/* wifi连接断开 */
        case EVENT_STAMODE_DISCONNECTED:
        	printf("disconnect from ssid %s, reason %d\n",event->event_info.disconnected.ssid,event->event_info.disconnected.reason);
        	if(retry_num > 15)
        		xQueueSend(WiFi_Queue, &WiFi_FAIL, 10);
        	printf("retry to connect to the AP %d times. \n",retry_num);
        	break;
        /* 获取到IP地址 */
        case EVENT_STAMODE_GOT_IP:
        	printf("got ip:" IPSTR ",mask:" IPSTR ",gw:" IPSTR "\n",
        			IP2STR(&event->event_info.got_ip.ip),
					IP2STR(&event->event_info.got_ip.mask),
					IP2STR(&event->event_info.got_ip.gw));
        	break;
        /* 获取IP地址超时 */
        case EVENT_STAMODE_DHCP_TIMEOUT:
        	printf("got ip timeout. \n");
            break;
        default:
            break;
    }
}

/* wifi连接任务函数 */
static void wifi_task(void *pvParameters)
{
	uint8_t wifi_flag = 0;
	xQueueReceive(WiFi_Queue, &wifi_flag, portMAX_DELAY);
	if(wifi_flag == WiFi_CONNECTED){
		printf("WiFi connected success.\n");
	}
	else if(wifi_flag == WiFi_FAIL){
		printf("WiFi connected failure.\n");
	}
	vTaskDelete(NULL);
}

void wifi_sta_init(void)
{
    wifi_set_opmode(STATION_MODE); /* 设置为STATION模式 */
    struct station_config config;	/* 新建WiFi连接初始化结构体 */
    sprintf(config.ssid, "WiFi-William");		/* 设置WiFi名称 */
    sprintf(config.password, "pswdwilliam");	/* 设置WiFi密码 */
    wifi_station_set_config(&config);	/* 设置WiFi station接口配置,并保存到 flash */
    wifi_station_connect(); 	/* 连接到路由器 */

    /* 注册WiFi连接事件回调函数 */
    wifi_set_event_handler_cb(wifi_handle_event_cb);
    /* 创建WiFi连接消息队列 ,参数分别为:1、队列长度,2、消息字节长度 */
    WiFi_Queue = xQueueCreate(3, 1);
    /* 创建WiFi连接任务 */
    xTaskCreate(wifi_task, "wifi task", 256, NULL, 4, NULL);
}

编译烧录运行,可以看到:
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值