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

本文主要是介绍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密码了

这篇关于2.wifi开发,SDK目录结构研究,SDK的API,如何生成可烧录代码,Freertos在esp8266使用,实验:wifi打印/点灯,实验:wifi入网/自建网,补充:查找已连接wifi密码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/292588

相关文章

Java的栈与队列实现代码解析

《Java的栈与队列实现代码解析》栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶,栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等,本文给大家介绍J... 目录栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组

SpringBoot内嵌Tomcat临时目录问题及解决

《SpringBoot内嵌Tomcat临时目录问题及解决》:本文主要介绍SpringBoot内嵌Tomcat临时目录问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录SprinjavascriptgBoot内嵌Tomcat临时目录问题1.背景2.方案3.代码中配置t

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

springboot上传zip包并解压至服务器nginx目录方式

《springboot上传zip包并解压至服务器nginx目录方式》:本文主要介绍springboot上传zip包并解压至服务器nginx目录方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录springboot上传zip包并解压至服务器nginx目录1.首先需要引入zip相关jar包2.然

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

springboot整合阿里云百炼DeepSeek实现sse流式打印的操作方法

《springboot整合阿里云百炼DeepSeek实现sse流式打印的操作方法》:本文主要介绍springboot整合阿里云百炼DeepSeek实现sse流式打印,本文给大家介绍的非常详细,对大... 目录1.开通阿里云百炼,获取到key2.新建SpringBoot项目3.工具类4.启动类5.测试类6.测

Python如何自动生成环境依赖包requirements

《Python如何自动生成环境依赖包requirements》:本文主要介绍Python如何自动生成环境依赖包requirements问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录生成当前 python 环境 安装的所有依赖包1、命令2、常见问题只生成当前 项目 的所有依赖包1、

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t