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

相关文章

SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)

《SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)》本文介绍了如何在SpringBoot项目中使用Jasypt对application.yml文件中的敏感信息(如数... 目录SpringBoot使用Jasypt对YML文件配置内容进行加密(例:数据库密码加密)前言一、J

Java中有什么工具可以进行代码反编译详解

《Java中有什么工具可以进行代码反编译详解》:本文主要介绍Java中有什么工具可以进行代码反编译的相关资,料,包括JD-GUI、CFR、Procyon、Fernflower、Javap、Byte... 目录1.JD-GUI2.CFR3.Procyon Decompiler4.Fernflower5.Jav

pycharm远程连接服务器运行pytorch的过程详解

《pycharm远程连接服务器运行pytorch的过程详解》:本文主要介绍在Linux环境下使用Anaconda管理不同版本的Python环境,并通过PyCharm远程连接服务器来运行PyTorc... 目录linux部署pytorch背景介绍Anaconda安装Linux安装pytorch虚拟环境安装cu

javaScript在表单提交时获取表单数据的示例代码

《javaScript在表单提交时获取表单数据的示例代码》本文介绍了五种在JavaScript中获取表单数据的方法:使用FormData对象、手动提取表单数据、使用querySelector获取单个字... 方法 1:使用 FormData 对象FormData 是一个方便的内置对象,用于获取表单中的键值

Vue ElementUI中Upload组件批量上传的实现代码

《VueElementUI中Upload组件批量上传的实现代码》ElementUI中Upload组件批量上传通过获取upload组件的DOM、文件、上传地址和数据,封装uploadFiles方法,使... ElementUI中Upload组件如何批量上传首先就是upload组件 <el-upl

Java实战之利用POI生成Excel图表

《Java实战之利用POI生成Excel图表》ApachePOI是Java生态中处理Office文档的核心工具,这篇文章主要为大家详细介绍了如何在Excel中创建折线图,柱状图,饼图等常见图表,需要的... 目录一、环境配置与依赖管理二、数据源准备与工作表构建三、图表生成核心步骤1. 折线图(Line Ch

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

MySQL9.0默认路径安装下重置root密码

《MySQL9.0默认路径安装下重置root密码》本文主要介绍了MySQL9.0默认路径安装下重置root密码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录问题描述环境描述解决方法正常模式下修改密码报错原因问题描述mysqlChina编程采用默认安装路径,

使用Go语言开发一个命令行文件管理工具

《使用Go语言开发一个命令行文件管理工具》这篇文章主要为大家详细介绍了如何使用Go语言开发一款命令行文件管理工具,支持批量重命名,删除,创建,移动文件,需要的小伙伴可以了解下... 目录一、工具功能一览二、核心代码解析1. 主程序结构2. 批量重命名3. 批量删除4. 创建文件/目录5. 批量移动三、如何安

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在