ESP8266_RTOS_SDK AP和Station功能实现

一、开发环境搭建

SDK开发工具集选择乐鑫配置:VirtualBox + Linux +交叉编译工具
使用的是以下这块开发板
在这里插入图片描述

VirtualBox下载地址
Lubuntu 镜像下载地址Lubuntu是一个轻量级系统(由乐鑫官方提供)
source insight 编辑代码
为了便于我们开发,需要在window下
D盘下新建VM共享目录
VM下新建share目录

挂载共享目录
ls:查看当前目录文件
./mount.ch:运行shell脚本
输入root密码:espressif
在Share目录下,新建文件夹demo
在window下查看是否同步
没成功可以参考这篇文章,写得挺全的

二、本次实验的目的:

1、配置WiFi为Station模式,连接到本地的WiFi网络里
2、配置WiFi为AP模式,PC机连接到WiFi AP下
在这里插入图片描述

三、熟悉FreeRTOS,实现打印“Hello world!” ,并闪烁LED

1,搭建app目录

将SDK放在共享目录下
在这里插入图片描述

在SDK目录下新建app目录
cd 到examples目录下
拷贝smart_config下所有文件到app目录下
cd 到app目录下查看文件是否拷贝成功
在这里插入图片描述

2,修改gen_misc.sh

vim 打开gen_misc.sh进行编辑
在这里插入图片描述
修改SDK_PATH为当前SDK路径(绝对)
修改BIN_PATH为当前BIN路径(绝对)
在这里插入图片描述
输入:x保存退出

3,修改Makefile

  因为分离了sdk和project目录,所以编译之前必须先指定一个 SDK_PATH 和 BIN_PATH,修改 ESP8266_RTOS_SDK/app 目录下的 makefile,添加以下内容

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

4,编译和配置

./gen_misc.sh
运行gen_misc脚本进行编译
在这里插入图片描述
编译成功显示如下

在这里插入图片描述
工程模板编译好后,就可以开始写功能了
使用freeRTOS新建2个任务:

  1,定时1秒,串口打印hello word
  2,nodeMcu板上LED灯,1秒钟闪烁一次

5,打开sourceInsight 新建工程

5.1 新建工程Untitled_app工程

在这里插入图片描述
在这里插入图片描述

5.2 选择源文件

在这里插入图片描述

5.3添加需要的文件

在这里插入图片描述

5.4 新生成的文件树需要同步一下文件

在这里插入图片描述

5.5 打开文件目录,输入user_main.c,找到该文件进行编码

在这里插入图片描述

6,在user_main.c中加入打印函数

void ATaskHelloworld( void *pvParameters ) 
{ 
int iVariableExample = 0; 
for( ;; ) 
{ printf("Hello world!\n");vTaskDelay(100);
} 
vTaskDelete( NULL ); 
}
user_init(void)
{printf("SDK version:%s\n", system_get_sdk_version());/* need to set opmode before you set config */
//    wifi_set_opmode(STATION_MODE);//    xTaskCreate(smartconfig_task, "smartconfig_task", 256, NULL, 2, NULL);xTaskCreate(ATaskHelloworld, "hello world", 256, NULL, 2, NULL);
}

7,保存进入虚拟机在app目录下进行编译和配置

然后再Windows中打开下载工具添加bin文件进行下载
在这里插入图片描述
打印结果
在这里插入图片描述

8,再加入led控制函数

8.1 先查阅原理图

在这里插入图片描述
知道LED1由GPIO16控制,GPIO16输出高电平灯灭,GPIO16输出低电平灯亮

9,添加外设驱动文件

9.1 app目录下新建driver目录

9.1.1 拷贝driver_lib/driver下所有文件到app/driver下

在这里插入图片描述

9.1.2 拷贝driver_lib/include下所有文件到app/include下

在这里插入图片描述

10,修改Makefile

10.1 添加工程编译子目录driver和生成libdriver.a静态库

SUBDIRS=    \user \dirverCOMPONENTS_eagle.app.v6 = \user/libuser.a  \driver/libdriver.a

11,进入source insight,同步一下文件,然后加入LED初始化函数以及驱动函数

void LED_Init(void) 
{ gpio16_output_conf();gpio16_output_set(1);
}void ATaskled( void *pvParameters ) 
{ int iVariableExample = 0; for( ;; ) 
{ gpio16_output_set(0);printf("ledon!\n");vTaskDelay(100);gpio16_output_set(1);printf("ledoff!\n");vTaskDelay(100);
} vTaskDelete( NULL ); 
}user_init(void)
{printf("SDK version:%s\n", system_get_sdk_version());LED_Init();/* need to set opmode before you set config */
//    wifi_set_opmode(STATION_MODE);//    xTaskCreate(smartconfig_task, "smartconfig_task", 256, NULL, 2, NULL);xTaskCreate(ATaskHelloworld, "hello world", 256, NULL, 2, NULL);xTaskCreate(ATaskled, "LED", 256, NULL, 3, NULL);}

12,保存编译

打印结果,实物LED在闪烁,输出内容如下
在这里插入图片描述

四,WIFI Station功能实现

1,WIFI Station入网条件

1.1 本地有WiFi网络

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

2,WIFI Station入网流程

在这里插入图片描述

3,新建Sration工程目录

3.1 新建Station目录,拷贝app目录下所有文件到Station目录下

在这里插入图片描述

4,Sourceinsight配置

移除之前app文件夹,加入Station文件夹
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5,代码实现

在user_Init里面实现wifi station功能开发

#define SSID "ApolloPi-314E"
#define PASSWORD "apollopi"
user_init(void)
{printf("SDK version:%s\n", system_get_sdk_version());LED_Init();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);wifi_station_set_config(config);free(config);wifi_station_connect();
//    xTaskCreate(smartconfig_task, "smartconfig_task", 256, NULL, 2, NULL);xTaskCreate(ATaskHelloworld, "hello world", 256, NULL, 2, NULL);xTaskCreate(ATaskled, "LED", 256, NULL, 3, NULL);
//	xTaskCreate(ATaskprintf, "printf", 256, NULL, 3, NULL);}

6,验证测试

烧写固件,复位查看串口日志,获取到路由器分配的IP
在这里插入图片描述

五, WIFI AP 功能实现

1,WIFI AP建立条件

SSID:WIFI网络名称(定义为自己的名字)
PASSWORD:WiFi入网密码
加密模式:WAP2_PSK

2,WIFI AP建立流程

在这里插入图片描述

3,新建AP工程目录

在这里插入图片描述

4,Sourceinsight配置

移除之前Station文件,加入AP文件,同步文件

5,代码实现

在user_Init下完成wifi AP功能开发

#define SSID "testwifi"
#define PASSWORD "123456789"
user_init(void)
{printf("SDK version:%s\n", system_get_sdk_version());LED_Init();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 = 10;wifi_softap_set_config(config);free(config);
//	wifi_station_connect();
//    xTaskCreate(smartconfig_task, "smartconfig_task", 256, NULL, 2, NULL);xTaskCreate(ATaskHelloworld, "hello world", 256, NULL, 2, NULL);xTaskCreate(ATaskled, "LED", 256, NULL, 3, NULL);
//	xTaskCreate(ATaskprintf, "printf", 256, NULL, 3, NULL);}

6,验证测试

烧写固件,复位查看串口日志,PC连接AP,获取AP分配的IP地址
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/82964.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS的引入方式有哪些?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 内联样式(Inline Styles)⭐ 内部样式表(Internal Stylesheet)⭐ 外部样式表(External Stylesheet)⭐ 导入样式表(Import Stylesheet)⭐ 写在最…

Wlan——射频和天线基础知识

目录 射频的介绍 射频和Wifi 射频的相关基础概念 射频的传输 信号功率的单位 射频信号传输行为 天线的介绍 天线的分类 天线的基本原理 天线的参数 射频的介绍 射频和Wifi 什么是射频 从射频发射器产生一个变化的电流(交流电),通过…

目前Java后端就业前景怎么样?

前言 并不乐观,看看现在的就业形式就知道了,基本上是僧多粥少的情况,你可能会看到很多编程语言排行榜或者流行榜中Java的排名很高,如同下面这种: 看排名确实可以粗略的得知语言当下的流行度、使用率,但是它…

ArcGIS制作带蒙版的遥感影像地图

这次文章我们来介绍一下,如何通过一个系统的步骤完成ArcGIS制作带蒙版的遥感影像地图。 主要的步骤包括: 1 添加行政区划数据 2 导出兴趣去乡镇矢量范围 3 添加遥感影像底图 4 制作蒙版 5 利用自动完成面制作蒙版 6 标注乡镇带晕渲文字 7 …

QGIS二次开发四:实现图层列表

在实际开发中我们通常会遇到同时显示多个图层,并且还要实时显示和隐藏各图层的需求,如同 ArcGIS 的图层列表那样,界面左侧显示图层列表,列出当前已加载的所有图层,同时每个图层前面有复选框可以控制图层的显示/隐藏&am…

边写代码边学习之numpy

1. numpy.matmul() 用法 matmul() 用于计算两个数组的矩阵乘积。示例如下 def matmul_test():array1 np.array([[[1.0, 3], [1, 1], [2, 3]]])array2 np.array([[2, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0],[1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0], ])result np.matmul(array1, …

浅谈什么是 Spring Cloud,快速学习与使用案例(文末送书福利3.0)

文章目录 📋前言🎯什么是 Spring Cloud🎯快速入门 Spring Cloud🧩使用 Eureka 进行服务注册和发现 📝最后🎯文末送书📚内容介绍📚作者介绍 🔥参与方式 📋前言…

nginx负载均衡(nginx结束)

本节主要内容 1、四层,七层代理的配置方法 2、负载均衡的算法 nginx负载均衡:反向代理来实现 反向代理有两种转发方式:1、四层代理 2、七层代理 Nginx的七层代理和四层代理 七层是最常见的反向代理方式,只能配置在nginx配置文…

[保研/考研机试] KY129 简单计算器 浙江大学复试上机题 C++实现

描述 读入一个只包含 , -, *, / 的非负整数计算表达式,计算该表达式的值。 输入描述: 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中…

设计模式——单例模式(懒汉和饿汉)

单例模式 一、概念 单例模式是一种对象创建型模式,使用单例模式,可以保证为一个类只生成唯一的实例对象。也就是说,在整个程序空间中,该类只存在一个实例对象。一个类只能有一个实例在生活中是很常见的,比如打印机程…

Clickhouse 数据存储

一、数据分区 数据是以分区目录的形式组织的,每个分区独立分开存储.这种形式,查询数据时,可以有效的跳过无用的数据文件。 1.1 数据分区的规则 分区键的取值,生成分区ID,分区根据ID决定。根据分区键的数据类型不同&am…

【论文阅读】基于深度学习的时序异常检测——TimesNet

系列文章链接 参考数据集讲解:数据基础:多维时序数据集简介 论文一:2022 Anomaly Transformer:异常分数预测 论文二:2022 TransAD:异常分数预测 论文三:2023 TimesNet:基于卷积的多任…

Webpack5新手入门简单配置

1.初始化项目 yarn init -y 2.安装依赖 yarn add -D webpack5.75.0 webpack-cli5.0.0 3.新建index.js 说明:写入下面的一句话 console.log("hello webpack"); 4.执行命令 说明:如果没有安装webpack脚手架就不能执行yarn webpack&#xff08…

【cs61b】学习笔记day2

历史文章目录 【cs61b】学习笔记day1 文章目录 历史文章目录List两个小问题bits声明一个变量引用类型方框和指针表示法数组的实例化链表 SLList List 两个小问题 思考下面两个代码分别输出什么 Walrus a new Walrus(1000, 8.3); Walrus b; b a; b.weight 5; System.out.…

ubuntu搭建wifi热点,共享网络(x86、arm相同)

目录 1 首先检查网络管理器服务是否开启 (ubuntu需要界面) 2 创建并配置需要共享的wifi 首先,明确下这篇文章说的是啥,是为了在ubuntu系统的电脑上,搭建一个wifi热点,供其他移动设备连接上网。就像你…

Smart HTML Elements 16.1 Crack

Smart HTML Elements 是一个现代 Vanilla JS 和 ES6 库以及下一代前端框架。企业级 Web 组件包括辅助功能(WAI-ARIA、第 508 节/WCAG 合规性)、本地化、从右到左键盘导航和主题。与 Angular、ReactJS、Vue.js、Bootstrap、Meteor 和任何其他框架集成。 智…

Linux常用命令大全

目录操作 切换目录 cd 查看目录 ls -l 列出文件详细信息 或者直接ll-a 列出当前目录下所有文件及目录,包括隐藏的a(all) 创建目录 mkdir -p 创建目录,若无父目录,则创建p(parent) 输出信息 echo 打印文件到命令行(查看文件) cat 改变…

stm32与上位机电脑间最快的通信方式是什么?

对于小型多关节机械臂的控制电路设计,选择合适的通信方式可以提高MCU与上位机之间的实时性。以下是一些在STM32上常用的通信方式,你可以根据你的具体需求选择适合的: 串口通信(UART):串口通信是一种常见的…

【stm32】初识stm32—stm32环境的搭建

文章目录 🛸stm32资料分享🍔stm32是什么🎄具体过程🏳️‍🌈安装驱动🎈1🎈2 🏳️‍🌈建立Start文件夹 🛸stm32资料分享 我用夸克网盘分享了「STM32入门教程资料…

【单片机】51单片机串口的收发实验,串口程序

这段代码是使用C语言编写的用于8051单片机的串口通信程序。它实现了以下功能: 引入必要的头文件,包括reg52.h、intrins.h、string.h、stdio.h和stdlib.h。 定义了常量FSOC和BAUD,分别表示系统时钟频率和波特率。 定义了一个发送数据的函数…