使用stm32控制esp01s
title: 使用stm32控制esp01s
date: 2025年2月9日 18:41:20
tags:
- 单片机
- 模块使用
categories: stm32
description: 使用stm32控制esp01s连接WiFi查看内容等操作
前言
使用stm32f103控制esp01s是步入物联网的第一步,接下来的文章会详细讲解如何使用stm32控制esp01s。
一、电路图设计
对于这个模块的使用我是用我制作的项目来进行使用的,本质的内容很简单,因为esp01s它要进行通讯其实本质上就是用串口来进行通讯的,所以我们只需要使用串口来进行通讯就可以了。电路图如下:
这个电路图很简单,只需要将单片机的串口和esp01s的串口进行连接就可以了,然后再连接电源线,这样就可以了,剩下的就是对于串口通讯的编写了,实现串口收发数据的功能,控制esp01s的操作就是比较简单的了。
二、程序编写
这里主要针对于串口的编写和功能的实现,测试使用的TFT显示屏的代码编写就不说明了,因为不是这一节的内容。
1.串口的编写
1.1 串口的时钟的开启
这里在教程中我没有书写,这里简单介绍一下,实现是开启串口的时钟,这里要开启两个时钟,因为串口是借助GPIO口的,所以需要开启GPIO的时钟后再开启串口的时钟。代码如下:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
1.2 串口的配置
这里的串口的配置其实就是配置串口的一些参数,比如波特率、数据位、停止位、校验位等,首先先创建一个配置的变量,这里创建的变量类型为USART_InitTypeDef
,然后配置变量的相关参数后使用的USART_Init()
函数来进行配置的,配置的时候先需要配置一下GPIO。
对于GPIO
来说,首先要确定使用的是USART1
还是USART2
,如果是一些高性能的,可能还要其它的,这个需要参考手册,对于我们这个基础型来说,只有USART1
和USART2
,所以这里我们使用的是USART1
,然后配置的是GPIOA
,然后配置的是GPIOA9
和GPIOA10
,这里需要注意的是,GPIOA9
和GPIOA10
一个是TX
输入,一个是RX
输出,所以这里需要将GPIOA9
配置成复用推挽输出的模式,GPIOA10
配置为浮空输入。
代码如下:
GPIO_InitTypeDef GPIO_InitStructure = {0};
USART_InitTypeDef USART_InitStruct = {0};GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);USART_InitStruct.USART_BaudRate = 115200;
USART_InitStruct.USART_WordLength = USART_WordLength_8b;
USART_InitStruct.USART_StopBits = USART_StopBits_1;
USART_InitStruct.USART_Parity = USART_Parity_No;
USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1, &USART_InitStruct);
USART_Cmd(USART1, ENABLE);
1.3 配置串口中断
因为我们没办法知道串口多久才接收数据,所以这里使用的是中断来进行接收数据的,这里使用的是串口的中断接收,所以需要配置一下串口的中断,这里需要先配置串口开启中断后再配置的是串口的中断优先级,然后配置中断。
首先配置串口中断的开启:
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
这里的USART_IT_RXNE
是串口的中断接收,然后配置串口的中断优先级:
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
这里的NVIC_PriorityGroup_2
是中断优先级分组为2,然后配置中断:
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_Init(&NVIC_InitStructure);
这样就写好了中断配置,然后在中断服务函数中进行接收数据的处理,这里的中断服务函数我使用状态机来进行实现,因为我们不知道串口什么时候会接收数据,所以这里使用状态机来进行实现,代码如下:
typedef enum
{RECEIVE_IDLE, // 空闲状态RECEIVE_DATA, // 接收数据状态RECEIVE_FINISH // 接收完成状态
}USART_STATE;USART_STATE usart_state = RECEIVE_IDLE;
static uint8_t usart_recv_buf[100] = {0};
static uint8_t usart_recv_index = 0;void USART1_IRQHandler(void)
{uint8_t res = 0;if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET){// USART_ClearITPendingBit(USART1, USART_IT_RXNE);res = USART_ReceiveData(USART1);switch(usart_state){case RECEIVE_IDLE:if (res != '\r' && res != '\n'){usart_recv_buf[usart_recv_index++] = res;usart_state = RECEIVE_DATA;}else if (res == '\n'){usart_recv_buf[usart_recv_index++] = '\n';}break;case RECEIVE_DATA:if (res == '\r'){// 跳过\r}else{usart_state = RECEIVE_IDLE;usart_recv_buf[usart_recv_index++] = res;if (usart_recv_index >= 100){usart_recv_index = 0;usart_state = RECEIVE_FINISH;}}break;case RECEIVE_FINISH:usart_state = RECEIVE_IDLE;usart_recv_index = 0;break;}USART_ClearITPendingBit(USART1, USART_IT_RXNE);}
}
这里的状态机还是比较简单的,就是一开始是未接收状态,如果接收到的不是\r
或者\n
就开始接收数据,然后如果都不是那就开始接收数据,当接收到\r
或者\n
就开始接收完成状态,然后将接收的数据进行处理。
但是我感觉这个状态机有点问题,但暂时没有更好的方案,大家如果有更好的方案可以和我交流一下。
1.4 发送数据
发送数据的代码很简单,就是先判断发送标志位是否置位,然后发送数据,然后等待发送完成,代码如下:
void Usart_Send(uint8_t* str)
{while(*str != '\0'){while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); // 等待发送寄存器为空USART_SendData(USART1, *str++);}
}
这里的USART_FLAG_TXE
是发送寄存器为空的标志位,然后发送数据,然后等待发送完成。
这样对于串口的代码就写好了,然后就是对于esp01s的控制了。
2.esp01s的控制
对于esp01s的控制其实就是串口的发送数据,然后等待接收数据,然后将接收的数据进行处理,这里的处理就是判断接收的数据是否正确,然后进行相应的操作,这里的操作就是连接WiFi,然后将连接的数据显示在TFT显示屏上,因为只是简单的介绍,对于更多的操作我还没有加,因为只要把这些最基础的问题解决了后,剩下的只是在这个基础上增加东西。
这里的操作其实就是发送AT指令,当esp01s接收到AT指令后就会进行相应的操作,然后将操作的结果返回给esp01s,然后esp01s将结果返回给单片机,单片机就可以进行相应的操作了。
这里的AT指令我就不一一介绍了,因为我也不是很清楚,大家可以去百度一下,然后就可以了。
这里就简单的把我写的代码贴出来,大家可以去百度一下,然后就可以了。
#include "esp01s.h"
#include "system_config.h"
#include "stdio.h"// 这个是去除空格
void Clear_String_Lj(uint8_t* buf)
{uint8_t recv_buf[100];uint8_t i = 0;uint8_t j = 0;Usart_Get_Recv_Buf(recv_buf);do{if (recv_buf[i]=='\n' && recv_buf[i+1]=='\n'){buf[j++] = '\n';i += 2;}else {buf[j++] = recv_buf[i++];}}while(recv_buf[i] != '\0');buf[j] = '\0';
}void ESP01S_Init(uint8_t* buf)
{// 初始化串口Usart_Init();
}void ESP01S_Test(uint8_t* buf)
{Usart_Send("AT+CWSTATE?\r\n");delay_ms(1000);Clear_String_Lj(buf);
}void ESP01S_Rst(uint8_t* buf)
{Usart_Send("AT+RST\r\n");delay_ms(1000);Clear_String_Lj(buf);
}void ESP01S_Look_GMR(uint8_t* buf)
{Usart_Send("AT+GMR\r\n");delay_ms(1000);Usart_Get_Recv_Buf(buf);
}void ESP01S_Wifi_Mode_Show(uint8_t* buf)
{Usart_Send("AT+CWMODE?\r\n");delay_ms(1000);Clear_String_Lj(buf);
}void ESP01S_Wifi_Mode_Set(uint8_t* buf, ESP01S_WIFI_MODE mode)
{uint8_t str[16];sprintf((char*)str, "AT+CWMODE=%d\r\n", mode);Usart_Send(str);delay_ms(1000);Clear_String_Lj(buf);
}void ESP01S_Wifi_Join(uint8_t* buf)
{uint8_t str[32];sprintf((char*)str, "AT+CWJAP=\"%s\",\"%s\"\r\n", WIFI_NAME, WIFI_PASSWORD);Usart_Send(str);delay_ms(1000);Usart_Get_Recv_Buf(buf);
}void ESP01S_Wifi_Join_Show(uint8_t* buf)
{Usart_Send("AT+CIPSTATE?\r\n");delay_ms(1000);Usart_Get_Recv_Buf(buf);
}
然后我们可以让esp01s连接WiFi,后面就可以通过网络来进行其它的操作了,这里只是简单的介绍一下,后面的文章我会详细介绍一下。
#include "stm32f10x.h" // Device header
#include "TFT144.h"
#include "systick.h"
#include "image.h"
#include "button.h"
#include "buzz.h"
#include "DS3231.h"
#include "stdio.h" // HACK 测试
#include "esp01s.h"void menu2(void)
{uint8_t buf[100];TFT_Clear(TFT_Color(255, 255, 255));ESP01S_Wifi_Join(buf);while(1){TFT_Show_String(0, 0, TFT_Color(0, 0, 0), TFT_Color(255, 255, 255), buf);if (Read_Button_B()){TFT_Clear(TFT_Color(255, 255, 255));void ESP01S_Wifi_Join_Show(uint8_t* buf);TFT_Show_String(0, 0, TFT_Color(0, 0, 0), TFT_Color(255, 255, 255), buf);break;}}
}int main(){uint8_t buf[100];TFT_Init();Button_Init();Buzz_Init();DS3231_Init();TFT_Clear(TFT_Color(255, 255, 255));delay_ms(1000);ESP01S_Init(buf);ESP01S_Wifi_Mode_Set(buf, ESP01S_WIFI_STATION);TFT_Show_String(0, 0, TFT_Color(0, 0, 0), TFT_Color(255, 255, 255), buf);while(1){if (Read_Button_B()){menu2();}}
}
效果如下:
这样就连接到WiFi了,因为是连接的电脑热点,所有可以在电脑上看到设备连接情况:
总结
其实对于esp01s的控制还是比较简单的,因为它本质上就是串口的通讯,所以我们只需要使用串口来进行通讯就可以了,然后就可以了,后面的文章我会详细介绍一下。
相关文章:
使用stm32控制esp01s
title: 使用stm32控制esp01s date: 2025年2月9日 18:41:20 tags: 单片机模块使用 categories: stm32 description: 使用stm32控制esp01s连接WiFi查看内容等操作 前言 使用stm32f103控制esp01s是步入物联网的第一步,接下来的文章会详细讲解如何使用stm32控制esp01s…...
返回倒数第N个链表节点
力扣题目:LCR 140. 训练计划 II - 力扣(LeetCode) 给定一个头节点为 head 的链表用于记录一系列核心肌群训练项目编号,请查找并返回倒数第 cnt 个训练项目编号。 示例 1: 输入:head [2,4,7,8], cnt 1 输…...
一、计算机等级考试——标准评分
(1)选择题 未做选择题 (2)基本造作 (3)上网题 (4)文字题 (5)表格题 (6)演示文稿 二、计算机等级考试——题库 (1&#x…...
tweenjs动画
目录 编辑 安装 HTML中应用 Threejs中应用 安装 npm install tweenjs/tween.js HTML中应用 <script src"https://cdnjs.cloudflare.com/ajax/libs/tween.js/23.1.3/tween.umd.js"></script><div id"box"></div><style…...
IGBT工作原理
IGBT其实可以看成是BJT和MOS管的融合体,IGBT具有BJT的输入特性和mos管的输出特性。与 BJT 或 MOS管相比,绝缘栅双极型晶体管 IGBT 的优势在于它提供了比标准双极型晶体管更大的功率增益,以及更高的工作电压和更低的 MOS 管输入损耗。 IGBT是绝…...
FlashDecoding
Flash Attention是将Q划分到所有SM block上。每个SM block上的Q,负责和所有K和所有V进行计算,得到对应的结果。期间,SM block彼此之间,不需要通信。 在prefill阶段,seqLength*batchSize*Heads足够多,所以每…...
03:Spring之Web
一:Spring整合web环境 1:web的三大组件 Servlet:核心组件,负责处理请求和生成响应。 Filter:用于请求和响应的预处理和后处理,增强功能。 Listener:用于监听 Web 应用中的事件,实…...
OpenWebUI使用DeepSeek R1满血版,DeepSeek R1 API调用
https://www.dong-blog.fun/post/1935 API调用 登录这里: https://console.volcengine.com/ark/region:arkcn-beijing/endpoint?config%7B%7D 注册后,创建DeepSeek R1 API接入点: 接着Python就可以直接调用了: import os fro…...
DeepSeek模型场景应用:基于腾讯云HAI搭建IDEA开发助手
前言 这段时间国产大模型DeepSeek十分火爆,DeepSeek模型凭借其强大的语言理解和生成能力,为开发场景带来了全新的可能性,DeepSeek模型场景应用也是十分广泛,而基于腾讯云HAI搭建IDEA开发助手,更是将这种潜力发挥到了极…...
HttpServletRequest 作用
HttpServletRequest 接口在 Java Servlet API 中扮演着至关重要的角色,它是 Servlet 处理客户端 HTTP 请求的核心对象。 每次客户端(例如浏览器)向服务器发送一个 HTTP 请求时,Servlet 容器(例如 Tomcat)都…...
Python----PyQt开发(PyQt高级:手搓一个简单的记事本)
一、效果展示 二、设计PyQt界面 2.1、设置图标 self.setWindowIcon(QIcon(./images/icon/1.png)) # 窗口图标 2.2、设置标题 self.file_name 无标题-新建文本文档 # 默认文件名 self.setWindowTitle(self.file_name) # 窗口标题 2.3、添加菜单栏、工具栏、状态栏 # 创…...
MySQL 索引失效案例:字符集不匹配的隐蔽影响
引言 在 MySQL 数据库世界里,索引失效往往是性能问题的罪魁祸首。你是否曾遇到过这样的情况:明明加了索引,查询却慢如蜗牛?你是否曾以为小表查询就一定高效?本文将揭示一个真实的案例,一个容易被忽视的“隐…...
MySQL中类似PostgreSQL中的string_agg函数--GROUP_CONCAT函数的使用
文章目录 结论:MySQL没有string_agg,但有GROUP_CONCATGROUP_CONCAT函数的基本用法示例注意事项 系统变量 group_concat_max_len 如何查看和设置查看当前的group_concat_max_len值设置group_concat_max_len值 相关源码相关链接 结论:MySQL没有…...
科普:数据血缘理论中:任务血缘、表血缘、字段血缘
在讨论数据血缘时通常我们提到的是数据库血缘、数据表血缘和数据字段血缘,而“任务血缘”这一术语更多是在特定技术场景(如实时任务运维)中使用。 数据血缘分类 表血缘 表血缘(或数据表血缘)是指数据在不同数据表之…...
凸性相关问题
内容大致上包括: 四边形不等式,决策单调性闵可夫斯基和优化 d p dp dpslope trick 优化 d p dp dp其他凸性相关问题 决策单调性 1.1 一些约定 对于 n m n\times m nm 的矩阵 A A A,定义: 子矩阵 A [ i 1 , . . . , i p …...
WPS计算机二级•文档的文本样式与编号
听说这是目录哦 标题级别❤️新建文本样式 快速套用格式🩷设置标题样式 自定义设置多级编号🧡使用自动编号💛取消自动编号💚设置 页面边框💙添加水印🩵排版技巧怎么分栏💜添加空白下划线&#x…...
开源堡垒机 JumpServer 社区版实战教程:一步步构建企业安全运维环境
文章目录 开源堡垒机 JumpServer 社区版实战教程:一步步构建企业安全运维环境一、访问JumpServer1.1 登录1.2 功能模块1.3 系统设置1.3.1 基本设置1.3.2 邮件设置 二、用户管理2.1 场景2.2 创建用户2.3 用户登录密码重置 三、资产管理3.1 准备工作3.2 登录控制台3.3…...
二、数据类型、运算符
1. 数据的表示详解 1.1 算术运算符 整数在计算机中的存储原理先从最基本的算术运算符开始学习,算术运算符有 - * / % ,其中*表示乘法,/表示除法,%表示取余数 需要我们注意以下几点 /: 两个整数相除,结果也是一个…...
结构形模式---桥接模式
概念 桥接模式是一种结构化模式,是将一个大类或者一系列的紧密相关的类拆分为抽象和现实两个独立部分的层次结构,通过引用独立层次对象的组合实现类。 桥接模式可以将庞杂类拆分为几个类层次结构。 此后, 你可以修改任意一个类层次结构而不…...
计算机网络知识速记:HTTP1.0和HTTP1.1
计算机网络知识速记:HTTP1.0和HTTP1.1 1. 基本概念 1.1 HTTP1.0 HTTP1.0是1996年发布的第一个正式版本,主要用于客户端与服务器之间的简单请求和响应交互。它的设计理念相对简单,适合处理一些基本的网页服务。 1.2 HTTP1.1 HTTP1.1是HTT…...
Windows下查看WIFI密码
目录 命令行查看历史WIFI netsh wlan show profiles 命令行查看某一特定WIFI密码 netsh wlan show profile name “WIFI名” keyclear 打开命令行https://blog.csdn.net/weixin_70822378/article/details/145598560?spm1001.2014.3001.5502 命令行查看历史WIFI nets…...
Android车机DIY开发之软件篇(十二) AOSP12下载编译
Android车机DIY开发之软件篇(十二) AOSP12下载编译 sudo apt-get update sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib gmultilib libc6-dev-i386 lib32ncurses5-dev libx11-dev lib32z-dev ccache libgl1-mesa-…...
Datawhale Ollama教程笔记2
本期学习易错点: 改文件后缀 改了models的存储地址后,把下载和新建的文件存储在什么地方 注册hugging face,找到token. 学习手册:https://datawhalechina.github.io/handy-ollama/#/ 第 3 章 自定义导入模型https://datawhalechina.gith…...
ClickHouse的前世今生
ClickHouse是一款由Yandex开发的高性能列式存储数据库管理系统,专为在线分析处理(OLAP)设计,适用于实时数据分析、大规模数据处理和复杂查询场景。以下是关于ClickHouse的安装、使用及应用场景的详细介绍: 一、ClickHouse的安装 ClickHouse支持多种操作系统,包括Linux、…...
SSH隧道+Nginx:绿色通道详解(SSH Tunnel+nginx: Green Channel Detailed Explanation)
SSH隧道Nginx:内网资源访问的绿色通道 问题背景 模拟生产环境,使用两层Nginx做反向代理,请求公网IP来访问内网服务器的网站。通过ssh隧道反向代理来实现,重点分析一下nginx反代的基础配置。 实验环境 1、启动内网服务器的tomca…...
html文件怎么转换成pdf文件,2025最新教程
将HTML文件转换成PDF文件,可以采取以下几种方法: 一、使用浏览器内置功能 打开HTML文件:在Chrome、Firefox、IE等浏览器中打开需要转换的HTML文件。打印对话框:按下CtrlP(Windows)或CommandP(M…...
大促备战中稳定性建设策略与总结
文章目录 接口流量评估、上下游依赖梳理降级能力建设应急响应预案建设压力测试监控报警建设容灾演练 之前也专门写过日常稳定性建设的一些策略,传送门 -> 日常稳定性建设策略与总结,本文想专门聊聊大促期间做的一些稳定性保障,顺便记录自己…...
vscode/cursor+godot C#中使用socketIO
在 Visual Studio Code(VS Code)中安装 NuGet 包(例如SocketIOClient),你可以通过以下几种方法: 方法 1:使用dotnet cli 打开终端:在 VS Code 中按下Ctrl 或者通过菜单View -> Terminal打开终端。 导…...
Uniapp 原生组件层级过高问题及解决方案
文章目录 一、引言🏅二、问题描述📌三、问题原因❓四、解决方案💯4.1 使用 cover-view 和 cover-image4.2 使用 subNVue 子窗体4.3 动态隐藏原生组件4.4 使用 v-if 或 v-show 控制组件显示4.5 使用 position: fixed 布局 五、总结Ἰ…...
jQuery介绍(快速、简洁JavaScript库,诞生于2006年,主要目标是简化HTML文档操作、事件处理、动画和Ajax交互)
文章目录 **核心功能 & 亮点**1. **简化 DOM 操作**2. **链式调用**3. **跨浏览器兼容**4. **便捷的事件绑定**5. **Ajax 封装**6. **动画效果** **现状与适用场景**- **传统项目维护**:许多旧系统(如 WordPress 插件、老企业网站)仍依赖…...
第三节 docker基础之---Commit+Dockerfile制作
docker目前镜像的制作两种方法: 1,基于docker Commit制作镜像 2,基于dockerfile制作镜像,Dockerfile 为主流的制作方式 如果不制作镜像删除容器之后则里面配置的文件也随之删除: [rootdocker ~]# docker images 查看…...
通过openresty和lua实现随机壁纸
效果: 图片存放路径: /home/jobs/webs/imgs/ ├── default/ │ ├── image1.jpg │ ├── image2.png ├── cats/ │ ├── cat1.jpg │ ├── cat2.gif ├── dogs/ │ ├── dog1.jpg访问http://demo.com/imgs/default 随机返回…...
企业网站如何快速实现全站HTTPS安全访问?
当用户访问您的网站时,若您的企业网站仍以HTTP协议运行,浏览器“不安全”警告不仅会吓退潜在客户,还会拖累搜索引擎排名,直接影响业务转化和品牌声誉。实现全站HTTPS安全访问,已成为企业网站运营的必选项。 本文为您详…...
《花未眠》夜间四时醒来,海棠花未眠
《花未眠》夜间四时醒来,海棠花未眠 川端康成(1899-1972)日本作家。新感觉派。1968年以“敏锐的感受,高超的叙事技巧,表现日本人的精神实质”获诺贝尔文学奖。诺贝尔文学奖提名作有《雪国》《千羽鹤》《古都》。 陈德文…...
在nodejs中使用RabbitMQ(三)Routing、Topics、Headers
示例一、Routing exchange类型direct,根据消息的routekey将消息直接转发到指定队列。producer.ts 生产者主要发送消息,consumer.ts负责接收消息,同时也都可以创建exchange交换机,创建队列,为队列绑定exchangeÿ…...
kubeconfig存放内容有哪些
kubeconfig 文件是 Kubernetes 用于配置和认证的核心文件。它包含了关于如何访问 Kubernetes 集群的信息。以下是 kubeconfig 文件中常见的一些内容结构: apiVersion: 指定 kubeconfig 的版本,通常是 v1。clusters: 定义了集群的信息,包括集…...
图神经网络是什么,有什么实际应用
图神经网络是什么 图神经网络(Graph Neural Network,GNN)是一种专门用于处理图结构数据的神经网络,它能对图中的节点、边和整个图进行学习和推理,在社交网络分析、生物信息学、推荐系统等领域应用广泛。以下是其原理及示例说明: 图神经网络原理 节点表示学习:为图中每…...
如何将DeepSeek配置到离线电脑(内网)中?— 附Ollama夸克下载链接
1、在外网和内网电脑中分别安装Ollama 如下载速度较慢,安装包附在本文最后。 下载完成后傻瓜一键安装即可。 2、下载deepseek 在外网电脑中启动命令行输入下载命令。以下载8B为例,其他版本同。 ollama run deepseek-r1:8b 3、资源转移 在外网电脑…...
拯救者Y9000P双系统ubuntu22.04安装4070显卡驱动
拯救者Y9000P双系统ubuntu22.04安装4070显卡驱动 1. 前情: 1TB的硬盘,分了120G作ubuntu22.04。/boot: 300MB, / : 40GB, /home: 75G, 其余作swap area。 2. 一开始按这个教程:对我无效 https://blog.csdn.net/Eric_xkk/article/details/1…...
vue项目 Axios创建拦截器
Axios 1. Axios 和 Ajax 简介2. Axios 和 Ajax 的区别3. 从 按钮 到 Axios请求后端接口的 大致顺序 1. Axios 和 Ajax 简介 Ajax(Asynchronous JavaScript and XML) 不是一种技术,而是一个编程技术概念,核心是通过 XMLHttpReques…...
web前端第三次作业
题目 本期作业 WEB第三次作业 请使用JS实一个网页中登录窗口的显示/隐藏,页面中拖动移动,并且添加了边界判断的网页效 代码图片 效果展示 代码 <!DOCTYPE html> <html lang"zh"> <head> <meta charset"UTF-8&qu…...
滑动窗口算法笔记(C++)
滑动窗口算法是一种基于双指针技巧的高效算法, 常用于解决数组或字符串上的一些特定问题. 算法讲解 基本概念 滑动窗口算法可以想象成在一个数组或字符串上有一个固定大小或者可变大小的窗口, 该窗口在数组或字符串上从左到右滑动. 在滑动的过程中, 根据具体问题的要求, 对窗…...
day02冒泡排序
思路: 外层循环控制循环次数(i<len),设置swapFlagfalse内层循环j1(j<len-i),两两(j和j-1)比较,逆序则交换内层每次循环结束,没有交换,则break结束 内层循环j从1开始,小于len,…...
【工业场景】用YOLOv8实现火灾识别
火灾识别任务是工业领域急需关注的重点安全事项,其应用场景和背景意义主要体现在以下几个方面: 应用场景:工业场所:在工厂、仓库等工业场所中,火灾是造成重大财产损失和人员伤亡的主要原因之一。利用火灾识别技术可以及时发现火灾迹象,采取相应的应急措施,保障人员安全和…...
管式超滤膜分离技术都可以应用到哪些行业?
管式超滤膜分离技术由于其高效、稳定和适应性强的特点,在多个行业都有广泛的应用: 1. 生物制药与医药行业 纯化与浓缩:在生物药品的下游处理阶段,管式超滤膜被用来纯化抗体、疫苗、蛋白质等生物大分子,通过精确筛选分子…...
数智百问 | 制造企业如何降低产线检测数据的存储和管理成本?
在《“十四五”智能制造发展规划》等政策的推动下,以及新能源汽车、消费电子等品牌商对产品质量和供应商智能化水平要求的提升,半导体、电子制造、动力电池等先进制造行业企业纷纷推进产线智能化升级,并投入大量机器视觉检测设备以实现自动化…...
Linux中getifaddrs函数
文章目录 **函数原型****参数****返回值****释放资源****`struct ifaddrs` 结构****示例代码****输出示例****相关函数****总结**getifaddrs 是 Linux(以及其他 Unix-like 系统)中用于获取本机网络接口信息的系统调用。它提供了一种简单的方法来获取所有网络接口的地址信息,…...
Barra多因子模型
Barra模型 1. Barra模型概述1.1 Barra模型的历史与发展1.2 Barra模型在全球市场中的应用 2. Barra模型的基本原理2.1 APT理论基础2.2 Barra模型的基本原理:因子模型的核心假设因子暴露 β i j \beta_{ij} βij的假设因子收益率 f j f_j fj的假设 3. Barra模型的…...
P5:使用pytorch实现运动鞋识别
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 我的环境 语言环境:python 3.7.12 编译器:pycharm 深度学习环境:tensorflow 2.7.0 数据:本地数据集-运动鞋 一…...
redis持久化原理相关面试题剖析
一、Redis 持久化的机制是什么? Redis是内存数据库,数据都是存储在内存中,为了避免进程退出导致数据的永久丢失,需要定期将Redis中的数据以某种形式(数据或命令)从内存保存到硬盘;当下次 Redis重启时,利用…...