ESP8266_RTOS_SDK AP和Station功能实现

news2024/11/17 10:37:06

一、开发环境搭建

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 \
        dirver

COMPONENTS_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.coloradmin.cn/o/852960.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信-网页授权

参考文档 基础配置 代码测试说明测试公众号配置你本地的ip 完整的代码在文字末尾 下载微信的开发者工具 公众号AppId以及AppSecret的申请,并可以获取到token 注意 回调地址需要和js安全域名配置为同一个 授权地址必须在微信执行(本地在微信的开发工具进行执行) 授权地址…

卷积神经网络实现彩色图像分类 - P2

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍦 参考文章:365天深度学习训练营-第P2周:彩色识别🍖 原作者:K同学啊 | 接辅导、项目定制🚀 文章来源:K同学的学习圈子…

网络嗅探,大神都在用这10个抓包工具

下午好,我的网工朋友。 前两天发了一篇网工能干的工作大科普,没看过的看这:《不得不说,网工能干的活也太多了吧》。 然后有小友就说,里面的有些工作岗位要求,自己不知道从哪去补充知识,希望可…

【Java并发】synchronized关键字的底层原理

文章目录 1.synchronized作用2.synchronized加锁原理3.monitor锁4.synchronized锁的优化4.1.自适应性自旋锁4.2.偏向锁4.3.轻量级锁4.3.重量级锁 5.总结 1.synchronized作用 synchronized是Java提供一种隐式锁,无需开发者手动加锁释放锁。保证多线程并发情况下数据…

dubbo之高可用

负载均衡 概述 负载均衡是指在集群中,将多个数据请求分散到不同的单元上执行,主要是为了提高系统的容错能力和对数据的处理能力。 Dubbo 负载均衡机制是决定一次服务调用使用哪个提供者的服务。 策略 在Dubbo中提供了7中负载均衡策略,默…

1.0 Python 标准输入与输出

python 是一种高级、面向对象、通用的编程语言,由Guido van Rossum发明,于1991年首次发布。python 的设计哲学强调代码的可读性和简洁性,同时也非常适合于大型项目的开发。python 语言被广泛用于Web开发、科学计算、人工智能、自动化测试、游…

C#实现三菱FX-3U SerialOverTcp

设备信息 测试结果 D值测试 Y值写入后读取测试 协议解析 三菱FX 3U系列PLC的通信协议 1. 每次给PLC发送指令后,必须等待PLC的应答完成才能发送下一条指令; 2. 报文都是十六进制ASCII码的形式 3. 相关指令 指令 命令码(ASCII码) 操作原件 …

七牛云获取qn(url、bucket、access-key、secret-key)

1.注册账号 2.access-key和secret-key: 点击“密钥管理” 复制AK和SK即可 域名: bucket: 这个就是对象存储空间名字 先新建一个空间(没买需要先购买),步骤如下: 填写存储空间名字&#xff0…

“OSError: [WinError 1455]页面文件太小,无法完成操作。”解决方案

按照下面步骤, 会发现电脑默认情况下是没有给D盘分配虚拟内存的, 所以将Python装在D盘的朋友, 在跑程序时, 没有分配虚拟内存, 自然就遇到了上面的问题, 所以根本操作只要给D盘分配虚拟内存即可 第一步:鼠标右击我的电脑 (此电脑),点击属性进入以下界面 …

PostMessage/SendMessage在不同线程的调用探究

PostMessage和SendMessage是我们比较常用的windows API,最近也探究这两个api在调用之后,执行的线程问题,发现如下结论: 仅仅是RegisterClass注册类之后,调用createwindow第一个参数通过:(const TCHAR*)base…

three.js 地球与卫星绕地飞行【真实三维数据】

&#xff08;真实经纬度运行轨迹&#xff09; 完整代码 <template><div class"home3dMap" id"home3dMap" v-loading"loading"></div> </template><script> import * as THREE from three import { OrbitControl…

【K8S 的二进制搭建】

目录 一、二进制搭建 Kubernetes v1.201、准备环境 二、操作系统初始化配置三、部署 etcd 集群1、准备签发证书环境2、在 master01 节点上操作1、生成Etcd证书 3、在 node01 节点上操作4、在 node02 节点上操作 四、部署 Master 组件五、部署 docker引擎六、部署 Worker Node 组…

【算法|数组】手撕经典二分法

算法|数组——二分查找 文章目录 算法|数组——二分查找引言二分查找左闭右闭写法左闭右开写法 总结 引言 首先学习这个算法之前需要了解数组知识&#xff1a;数组。 大概介绍以下&#xff1a; 数组是存储在连续内存空间上的相同类型数据的集合。数组下标都是从0开始。数组在…

【SpringCloud】Gateway服务网关

Spring Cloud Gateway 是 Spring Cloud 的一个全新项目&#xff0c;该项目是基于 Spring 5.0&#xff0c;Spring Boot 2.0 和 Project Reactor 等响应式编程和事件流技术开发的网关&#xff0c;它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。 1.为什么需要网关…

“实现数字化转型:探索会议OA项目的高级技术与创新应用“

文章目录 引言&#xff1a;1.项目背景和需求分析&#xff1a;2.技术选型和架构设计&#xff1a;3.项目实现和功能亮点&#xff1a;3.0 layui实现登录及注册3.1 会议管理模块3.1.1 会议发布3.1.2 我的会议3.1.3 我的审批3.1.4 会议通知3.1.5 待开会议3.1.6 历史会议3.1.7 所有会…

【Leetcode】层次遍历||树深度||队列

step by step. 题目&#xff1a; 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3示例 2&#xff1a; 输入&am…

【LeetCode】数据结构题解(13)[设计循环链表]

设计循环链表 &#x1f609; 1.题目来源&#x1f440;2.题目描述&#x1f914;3.解题思路&#x1f973;4.代码展示 所属专栏&#xff1a;玩转数据结构题型❤️ &#x1f680; >博主首页&#xff1a;初阳785❤️ &#x1f680; >代码托管&#xff1a;chuyang785❤️ &…

WordPress使用【前端投稿】功能时为用户怎么添加插入文章标签

在使用Wordpress做前端投稿功能的时候&#xff0c;可能需要用户填写文章标签&#xff0c;在插入文章的时候很多人不知道怎么把这些标签插入进去&#xff0c;下面这篇文章来为大家带来WordPress使用前端投稿功能时插入文章标签方法。 在Wordpress里 wp_insert_post 此函数的作…

Vue3核心笔记

文章目录 1.Vue3简介2.Vue3带来了什么1.性能的提升2.源码的升级3.拥抱TypeScript4.新的特性 一、创建Vue3.0工程1.使用 vue-cli 创建2.使用 vite 创建 二、常用 Composition API1.拉开序幕的setup2.ref函数3.reactive函数4.Vue3.0中的响应式原理vue2.x的响应式Vue3.0的响应式 5…

冠达管理:夜盘是什么意思?

跟着现代社会的快节奏开展&#xff0c;股票商场的运营也因而发生了相应的改变。夜盘是指在正常的买卖时刻外特别敞开的买卖商场&#xff0c;为出资者供给更多的买卖时刻和机会。夜盘的概念在我国自2002年引入以来逐渐被越来越多的出资者所熟知。那么夜盘究竟是什么&#xff1f;…