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

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

W外链微信推广短连接怎么做?

制作微信推广链接的难点分析 一、内容创作难度 制作微信推广链接时,首先需要创作有吸引力的内容。这不仅要求内容本身有趣、有价值,还要能够激起人们的分享欲望。对于许多企业和个人来说,尤其是那些缺乏创意和写作能力的人来说,这是制作微信推广链接的一大难点。 二、精准定位难度 微信用户群体庞大,不同用户的需求和兴趣各异。因此,制作推广链接时需要精准定位目标受众,以便更有效地吸引他们点击并分享链接

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

AI一键生成 PPT

AI一键生成 PPT 操作步骤 作为一名打工人,是不是经常需要制作各种PPT来分享我的生活和想法。但是,你们知道,有时候灵感来了,时间却不够用了!😩直到我发现了Kimi AI——一个能够自动生成PPT的神奇助手!🌟 什么是Kimi? 一款月之暗面科技有限公司开发的AI办公工具,帮助用户快速生成高质量的演示文稿。 无论你是职场人士、学生还是教师,Kimi都能够为你的办公文

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n