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

相关文章

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

Python如何去除图片干扰代码示例

《Python如何去除图片干扰代码示例》图片降噪是一个广泛应用于图像处理的技术,可以提高图像质量和相关应用的效果,:本文主要介绍Python如何去除图片干扰的相关资料,文中通过代码介绍的非常详细,... 目录一、噪声去除1. 高斯噪声(像素值正态分布扰动)2. 椒盐噪声(随机黑白像素点)3. 复杂噪声(如伪

Java Spring ApplicationEvent 代码示例解析

《JavaSpringApplicationEvent代码示例解析》本文解析了Spring事件机制,涵盖核心概念(发布-订阅/观察者模式)、代码实现(事件定义、发布、监听)及高级应用(异步处理、... 目录一、Spring 事件机制核心概念1. 事件驱动架构模型2. 核心组件二、代码示例解析1. 事件定义

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

HTML5 getUserMedia API网页录音实现指南示例小结

《HTML5getUserMediaAPI网页录音实现指南示例小结》本教程将指导你如何利用这一API,结合WebAudioAPI,实现网页录音功能,从获取音频流到处理和保存录音,整个过程将逐步... 目录1. html5 getUserMedia API简介1.1 API概念与历史1.2 功能与优势1.3

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

C++作用域和标识符查找规则详解

《C++作用域和标识符查找规则详解》在C++中,作用域(Scope)和标识符查找(IdentifierLookup)是理解代码行为的重要概念,本文将详细介绍这些规则,并通过实例来说明它们的工作原理,需... 目录作用域标识符查找规则1. 普通查找(Ordinary Lookup)2. 限定查找(Qualif

全屋WiFi 7无死角! 华硕 RP-BE58无线信号放大器体验测评

《全屋WiFi7无死角!华硕RP-BE58无线信号放大器体验测评》家里网络总是有很多死角没有网,我决定入手一台支持Mesh组网的WiFi7路由系统以彻底解决网络覆盖问题,最终选择了一款功能非常... 自2023年WiFi 7技术标准(IEEE 802.11be)正式落地以来,这项第七代无线网络技术就以超高速