2.wifi开发,SDK目录结构研究,SDK的API,如何生成可烧录代码,Freertos在esp8266使用,实验:wifi打印/点灯,实验:wifi入网/自建网,补充:查找已连接wifi密码

 本节介绍:

ESP8266 SDK介绍

FreeRTOS工作原理

第一个任务hello word

第二个任务点灯

WiFi-STATION&AP连接(esp8266作为路由器,作为入网节点)

一。ESP8266的SDK介绍

1.SDK目录结构研究

        我们需要了解一下的内容来达到我们对SDK目录熟悉的目的

2.对上述目录的解释

(1)Bin目录

1.编译生成的目录,直接下载到wifi中

2.特点:

        根目录下为官方提供的bin文件,可以有一个upgrade文件夹,这个文件夹用来远程升级代码,具体升级可以类比打个比方(经常有人走的车道,如何修路)         

(2)documents目录

这是参考文档的存放地,我们通过他来了解API的使用方式。

(3)driver_lib目录

驱动目录,例如GPIO,I2C,UART

(4)example目录

这是实例代码存放地,例如mqtt协议使用代码,OpenSSL功能代码,wps的wifi保护设置实例代码等等,需要自己摸索。我使用的是智能联网实例代码(Smart_config)

(5)extra_include目录/include目录

内核接口/freeRtos,LWIP等

使用方法:声明头文件就可以使用

(6)ld目录

编译时链接所需要的脚本,这个makefile时会自动处理他(makefile就是可以连续执行一系列指令,这样人就不需要一步一步编译代码,即代码生成bin一步到位)

(7)lib目录

我们经常见到.a的文件后缀,这是不开源的源码库,我们可以使用,但是却无法看到里面的代码

(8)third_party目录

第三方开源源码

(8)tool目录

编译BIN文件所需目录

2.SDK提供的API接口

经常有人说ESP8266简单,那就是因为我们只需要根据参考文件使用API就可以实现项目。

Documents文件夹中查找参考文件,使用即可

3.如何生成可烧录的代码:

(0)前提准备

 1.选择一个SDK到共享文件夹下

2.打开第一节下载的虚拟机

(1)实验步骤

创建--》注意这里会使用快捷键,补全的快捷键Tab(类似于java后端IDEA的Alt+insert)

1.创建APP目录(建立自己的工程文件)

(0)进入上一节创建的共享文件夹下

(发现刚刚复制的文件)

(1)SDK目录下新建app目录

cd进入工程,创建app文件夹

(2)cd到examples目录下

(3)拷贝smart_config下所以文件到app目录下

使用Tab补全键会方便很多

(4)cd到app目录下查看文件是否拷贝成功

进入刚刚创建的app文件夹下查看是否有数据

2.修改gen_misc.sh(修改shell文件)

继续在app文件下运行

补充:为什么修改shell文件?

工程文件与SDK文件是分离的,需要配置路径,下面makefile配置也一样。

(1)vim打开gen_misc.sh进行边编辑

(2)修改SDK_PATH为当前的SDK路径(绝对路径)

(3)修改BIN_PATH为当前BIN路径(绝对路径)

(4)wq保存退出

3.修改makefile(vim Makefile)

(1)编译前指定路径(sdk与工程文件连接)

parent_dir:=$(abspath $(shell pwd)/$(lastword $(MAKEFILE_LIST)))
parent_dir:=$(shell dirname $(parent_dir))
parent_dir:=$(shell dirname $(parent_dir))

SDK_PATH= $(parent_dir)
BIN_PATH=$(SDK_PATH)/bin

补充:我们也可以直接在文件下修改,不用指令

编译

./gen_misc.sh运行脚本进行编译

最后一个使用4096K

运行结果:

生成bin文件

二。Freertos在wifi中的使用

1.在后台上使用while无线循环,在前台上使用中断来处理

2.RTOS

(1)RTOS简介

        RTOS全称为:Real Time OS,就是实时操作系统,强调的是:实时性。

        在实时操作系统中,我们可以把要实现的功能划分为多个任务,每个任务负责实现其中的一部分,每个任务都是一个很简单的程序,通常是一个死循环。  

        RTOS操作系统:FreeRTOS,UCOS,RTX,RT-Thread,DJYOS等。

(2)RTOS任务特性

        抢占,有优先级,每个任务都要分配内存导致RAM使用量大,如果使用抢占要仔细考虑重入

三。实验:wifi打印hello word

实验要求:Freertos新建一个任务,定时1s,串口打印hello world

(0)前提准备

        windows下无法查看代码,所以使用Source Insight可以在windows系统下查看API

(1)新建hello word工程目录

1.在SDK目录下新建hello word

2.拷贝app目录下所有文件到helloworld

(1)进入到共享文件夹的SDK下

(2)创建helloword文件夹,拷贝app文件夹中内容

(3)cd进入helloworld文件夹中,发现拷贝完成

(2)SourceInsight下设置

SourceInsight文件放在默认路径下

C:\Users\Administrator\Documents\Source Insight 4.0\Projects

1.右键--》新建project

2.文件在默认路径下,创建hellowordword文件

3.项目的源文件夹使用D盘建立的共享文件夹的SDK工程文件

4.添加所需要的文件

5.成功之后点击close

(3)SourceInsight的初步设置

1.同步文件(选择project的Synchronize)

2.同步之后,打开List

3.结果

补充:初步的使用

(4)代码的编写

<1>Freertos任务函数的加入

1.打开Freertos的中文指南

复制一个任务模版到user_main中

放在user_init上面

任务名称的修改,注释的添加

<2>代码编写

1.任务中加入printf(这里忘记加入延迟函数)

	printf("hello world!!\n");
	vTaskDelay(500);

2.在下方的user_init中创建代码

xTaskCreate(ATaskHelloWorld, "hello world", 256, NULL, 2, NULL);

3.user_init中不使用的代码注释掉

4.保存:ctrl+s

(5)运行代码

<1>编译:

1.在Oracle VM中进入helloworld文件夹中

2.在helloworld中运行./gen_misc.sh

3.编译设置

Y 1 2 3 4

(我回头修改了一下,下面的就是设置了1,使用user1.bin

<2>烧写

1.打开烧写工具,使用esp8266

2.参数选择

共享文件夹中

<1>第一个参数  boot

<2>第二个参数 用户数据

<3>第三个参数 默认参数

<4>第四个参数 

<5>第五个参数

这是云端升级用到的,我们用不到,所以不设置

插入esp8266,烧录

使用DOUT

运行成功:

1.波特率的修改

2.RTS关闭

四。实验:wifi点灯

(0)实验要求:

        使用freeRTOS新建一个任务,使nodeMcu板上LED灯,1秒钟闪烁一次

(1)实现分析

GPIO16为低亮

(2)实践流程

新建led工程

1.共享文件夹下的SDK目录下新建led目录

2.拷贝helloword目录下所有文件到led目录下

cp -rf helloworld/* led/

添加外设驱动文件(led驱动)

1.led目录下新建driver目录

2.拷贝driver_lib/dirver下所有文件到led/driiver下

        首先进入sdk文件根目录下

cp -rf driver_lib/driver/* led/driver/ 

3.拷贝driver_lib/include下所有文件到led/include下

cp -rf driver_lib/include/* led/include

修改Makefile

在led工程中,vim Makefile

1.添加工程编译子目录driver

2.生成libdriver.a静态库

        记住上一个都需要加斜杠

3.wq保存

Sourceinsight配置

1.在之前的工程中,移除helloword文件夹

移除helloworld

2.添加led文件夹

代码修改

1.进入user_main.c编写led_init初始化灯函数,ATaskLed任务函数

注意加上:头文件#include “gpio.h”

/******************************************************************************
 * FunctionName : led_init
 * Description  : led初始化
 * Parameters   : none
 * Returns      : none
*******************************************************************************/
void led_init(){
	gpio16_output_conf();
	gpio16_output_set(0);
}

/******************************************************************************
 * FunctionName : ATaskLed
 * Description  : 任务函数Led
 * Parameters   : none
 * Returns      : none
*******************************************************************************/
void ATaskLed( void *pvParameters ){
	int iVariableExample = 0; 
	/* 任务通常实现在一个死循环中。 */ 
	for( ;; ) 
	{ 
	/* 完成任务功能的代码将放在这里。 */ 
		//gpio16_output_conf();
		printf("off\n");
		gpio16_output_set(1);
		vTaskDelay(500);
		gpio16_output_set(0);
		printf("on\n");
		vTaskDelay(500);
	} 
	/* 如果任务的具体实现会跳出上面的死循环,则此任务必须在函数运行完之前删除。传入NULL参数表示删除
	的是当前任务 */ 
	vTaskDelete( NULL );

}

2.进入user_main添加任务

        这是用户的初始化,在这里初始化任务,后续运行

(3)代码运行

1.oracle Vm中运行成功、

2.烧录

(4)运行成功:wifi一闪一灭

补充:

问题:下面两个指令有什么区别,第一个是cp -rf driver_lib/driver/* led/driver/ ,第二个是cp -rf driver_lib/driver led/driver?

四。实验:WiFi-Station&AP连接(入网)

1.功能分析

配置WiFi为Station模式,连接到本地的WiFi网络里。(Station模式,wifi去入网

配置WiFi为AP模式,PC机连接到WiFi AP下。(AP模式,PC连入wifi

2.Station功能实现

(1)WiFi Station入网条件

SSID:WiFi网络名称 PASSWORD:WiFi入网密码

即:需要设置wifi名称,wifi密码

(2)WiFi Station入网流程

1.配置WiFi为Station

2.动态内存分配配置参数结构体

3.赋值SSID&PASSWORD到参数中

4.设置参数 到寄存器

5.释放内存

6.开启WiFi连接

3.具体功能实现

(1)新建Station工程目录

1.在SDK目录下新建Station目录

2.拷贝led目录下所有文件到Station目录下

这一次直接在windows下拷贝

(2)Sourcesight配置

1.在之前的工程中,移除led文件夹

2.添加Station文件夹

(3)代码实现

1.在user_init下完成WiFi Station功能开发

注意:这里建议连接自己的手机热点(名称+密码),当然可以用路由器,但是如果加密了话,wifi是连接不上的。

#define SSID "wangjianghui"
#define PASSWORD "makeru@4006670108"

	wifi_set_opmode(STATION_MODE);
	struct station_config *config=(struct station_config*)zalloc(sizeof(struct station_config));
	sprintf(config->ssid,SSID);
	sprintf("config->password,PASSWORD);

	//使用Config作为接口,之后消除
	wifi_station_set_config(config);
	free(config);
	//启用wifi的自动连接
	wifi_station_set_auto_connect(TRUE);

2.编译

3.烧写

(4)验证测试

1.烧写固件

2.复位查看串口日志,获取到路由器分配的IP,连接成功

五。实验:AP功能的实现

1.WiFi AP建立条件

1.SSID:WiFi网络名称(定义为自己的名字)

2.PASSWORD:WiFi入网密码(123456789)

3.加密模式:WAP2_PSK

2.WiFi AP建立流程(代码

1.配置WiFi为 AP

2.动态内存分配配置参数结构体

3.获取当前参数到内存

4.赋值SSID&PASSWORD到参数中

5.配置加密模式为WAP2_PSK

6.配置SSID长度为0

7.配置最大站点连接数为4

8.设置参数到寄存器

3.具体实现

(1)新建AP工程目录

1.在SDK目录下新建AP目录

2.拷贝Station目录下所有文件到AP目录下(windows下更方便)

(2)Sourcesight配置

1.在之前的工程中,移除Station文件夹

2.添加AP文件夹

SourceInsight---》project---》Add and Remove

(3)代码实现

1.在user_init下完成WiFi AP功能开发

1.配置WiFi为 AP

2.动态内存分配配置参数结构体

3.获取当前参数到内存

4.赋值SSID&PASSWORD到参数中

5.配置加密模式为WAP2_PSK

6.配置SSID长度为0

7.配置最大站点连接数为4

8.设置参数到寄存器

    wifi_set_opmode(SOFTAP_MODE);
    struct softap_config *config = (struct softap_config *)\
        zalloc(sizeof(struct softap_config));
    wifi_softap_get_config(config);
    sprintf(config->ssid,SSID);
    sprintf(config->password,PASSWORD);
    config->authmode = AUTH_WPA_WPA2_PSK;
    config->ssid_len = 0;
    config->max_connection = 4;

    wifi_softap_set_config(config);
    free(config);

结果:PC连入WIFI

1.烧写固件

2.复位查看串口日志,PC连接AP,获取AP分配的IP地址


补充:查找已经连接的wifi密码

1.点网络设置

2.点击更改适配器选项

3.找到对应的wifi(上面有名称,对应一下)

4.右键----》状态--》无线属性--》安全--》显示字符

这下就找到已经连接的wifi密码了

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值