STM32 高级 WIFi案例1:测试AT指令
需求描述
测试AT指令是否能够正常控制ESP32的wifi,比如重启、读取设备信息等。
思路:
stm32通过串口usart2向ESP32发布命令。ESP32通过串口1返回信息。
配置:
第一步:对ESP32芯片烧录可以读取stm32命令的固件(factory_MINI-1.bin)。
第二步:打开cubeMAX->配置usart1和usart2,在原理图中,STM32通过usart2和ESP32连接。
第三步:新建Interface文件-》新建esp.c和esp.h文件。
cubeMAX配置图:
keil配置:引入esp.c文件,path中添加.h路径
代码书写流程:
1》usart.h文件->引入#include<stdio.h>
2》usart.c文件:重写printf代码:
int fputc(int ch, FILE *file)
{HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 1000);return ch;
}
3》Interface文件下的esp32.h文件:
#ifndef __ESP32_H__
#define __ESP32_H__#include "usart.h"
#include "string.h"
void ESP32_Init(void);//发送命令
void ESP32_SendCmd(uint8_t * cmd,uint16_t cmdLen);//读取响应
void ESP32_ReadResp(uint8_t buff[],uint16_t *len);#endif /* __ESP32_H__ */
4》Interface文件下的esp32.c文件:
#include "esp32.h"//定义全局变量,接收响应缓冲区和长度
uint8_t respBuff[1024];
uint16_t resplen;void ESP32_Init(void)
{//1 初始化串口2MX_USART2_UART_Init();// 2 发送AT指令 复位ESP32uint8_t *cmd = "AT+RST=0\r\n";ESP32_SendCmd(cmd,strlen((char *)cmd));//3 引入延时,确保重启成功HAL_Delay(2000);
}//发送命令
void ESP32_SendCmd(uint8_t * cmd,uint16_t cmdLen)
{// 先清空memset(respBuff,0,1024);//直接通过串口2发送命令HAL_UART_Transmit(&huart2,cmd,cmdLen,1000);// 读取响应do{ESP32_ReadResp(respBuff,&resplen);}while(strstr((char *)respBuff,"OK") == NULL);//将响应打印输出printf("%.*s\n",resplen,respBuff);
}//读取响应
void ESP32_ReadResp(uint8_t buff[],uint16_t *len)
{//串口2 接收变长数据HAL_UARTEx_ReceiveToIdle(&huart2,buff,1024,len,1000);;
}
5》main.c文件:
添加
#include "esp32.h"
int main(void)大括号下添加
printf("测试AT指令...\n");ESP32_Init();printf("esp32初始化完成\n");uint8_t *cmd = "AT\r\n";ESP32_SendCmd(cmd,strlen((char *)cmd));cmd = "AT+GMR\r\n";ESP32_SendCmd(cmd,strlen((char *)cmd));
效果图:
相关文章:

STM32 高级 WIFi案例1:测试AT指令
需求描述 测试AT指令是否能够正常控制ESP32的wifi,比如重启、读取设备信息等。 思路: stm32通过串口usart2向ESP32发布命令。ESP32通过串口1返回信息。 配置: 第一步:对ESP32芯片烧录可以读取stm32命令的固件(fac…...

SpringCloud微服务架构
文章目录 认识微服务:SpringCloud 服务拆分及远程调用实现夸远程服务调用使用RestTemplateEureka注册中心 搭建EruekaServer注册服务服务发现 Ribbon负载均衡 修改负载均衡规则解饿加载 Nacos注册中心(nacos一部分功能) 服务注册到nacosnacos…...
WebSocket封装
提示:记录工作中遇到的需求及解决办法 文章目录 前言二、背景三、WebSocket3.1 什么是 WebSocket ?为什么使用他?四、封装 WebSocket4.1 Javascript 版本4.2 Typescript 版本4.3 如何使用?五、我的痛点如何处理前言 本文将介绍 WebSocket 的封装,比如:心跳机制,重连和一…...
基于Flask后端框架的均值填充
Flask可以在Jupyter上运行,首先需要安装这两个库: !pip install Flask-CORS !pip install Flask 引入依赖: from flask import Flask, request, jsonify, send_file import os import pandas as pd import io from flask import Flask fr…...

SQL-Server链接服务器访问Oracle数据
SQL Server 链接服务器访问 Oracle 离线安装 .NET Framework 3.5 方法一:使用 NetFx3.cab 文件 下载 NetFx3.cab 文件,并将其放置在 Windows 10 系统盘的 C:Windows 文件夹中。 以管理员身份运行命令提示符,输入以下命令并回车: …...
Python中continue语句的使用
1 问题 本文将对在循环中continue语句的用途和如何正确使用continue进行分析与总结。 2 方法 (1)定义: 在编程中,“continue”是一个关键字,用于循环结构中。它的作用是跳过当前循环的剩余部分,立即进入下一…...
JavaScript的diff库详解(示例:vue项目实现两段字符串比对标黄功能)
diff库介绍 diff 库是基于 Myers 差分算法 实现的 JavaScript 文本差异库。 Myers 差分算法 是由 Eugene Myers 在 1986 年发表的一篇经典算法论文 “An O(ND) Difference Algorithm and its Variations” 中描述的一种高效算法,用于计算两个序列(通常是…...

自动驾驶3D目标检测综述(六)
停更了好久终于回来了(其实是因为博主去备考期末了hh) 这一篇接着(五)的第七章开始讲述第八章的内容。第八章主要介绍的是三维目标检测的高效标签。 目录 第八章 三维目标检测高效标签 一、域适应 (一)…...

the request was rejected because no multipart boundary was found
文章目录 1. 需求描述2. 报错信息3. 探索过程 1. 使用postman 排除后端错误2. 搜索网上的解决方法3. 解决方法 1. 需求描述 想要在前端上传一个PDF 发票,经过后端解析PDF之后,将想要的值自动回填到对应的输入框中 2. 报错信息 org.apache.tomcat.u…...
HarmonyOS-面试整理
目录 为什么选择HarmonyOS/ 优点/特点鸿蒙系统的权限有哪些说一说鸿蒙系统的安全机制说一说鸿蒙系统的微内核与安卓的内核区别鸿蒙操作系统的微内核架构有哪些优势分布式能力在鸿蒙系统中如何实现请解释一下鸿蒙系统中的分布式软总线技术如何在鸿蒙操作系统中进行多设备协同开发…...
[C#] 「Unity」「游戏开发」如何在Canvas下的Button控件下实例化Image元素
在开发过程中,经常需要在UI上动态添加元素。特别是在Unity中,Canvas控件通常用来作为UI元素的容器,而Button控件则常用于交互。而在某些情况下,我们可能需要在一个Button下实例化一个Image元素,并确保它的位置与Button的位置保持一致。然而,简单地使用Button的坐标值往往…...

Nginx1.20.2-Linux-安装
文章目录 1.下载压缩包1.官网下载2.找到1.20.23.百度网盘 2.Linux安装1.搭建gcc环境2.上传到 /usr/local/nginx1.20.23.解压1.解压到当前目录2.删除压缩包 4.配置Nginx的编译路径1.进入nginx-1.20.22.执行内部的脚本,指定编译路径为/usr/local/nginx 5.编译并安装6.…...
Elasticsearch名词解释
文章目录 1.什么是Elasticsearch?2.什么是elastic stack(ELK)?3.什么是Lucene?4.什么是文档(document)?5.什么是词条(term)?6.什么是正向索引?7.什么是倒排索引?8.ES中的索引(index)9.映射(Mapping)10.DSL11.elastcisearch与my…...

Node项目——从0开始构建且共享至Gitee
从0开始构建一个Node.js项目涉及多个步骤,包括设置开发环境、初始化项目、安装依赖、编写代码以及配置版本控制等。以下是一个详细的步骤指南: 1. 安装Node.js和npm 首先,确保你已经安装了Node.js和npm(Node Package Manager&am…...
layui多图上传,tp8后端接收处理
环境:layui2.9.21\thinkphp8.1 前端代码: layui.use([upload, layer], function() {const upload layui.upload;const layer layui.layer;const $ layui.$;// 上传图片const uploadInstImage upload.render({elem: #uploadImage,url: /admin/demo/…...

QEMU网络配置简介
本文简单介绍下qemu虚拟机网络的几种配置方式。 通过QEMU的支持,常见的可以实现以下4种网络形式: 基于网桥(bridge)的虚拟网络。基于NAT(Network Addresss Translation)的虚拟网络。QEMU内置的用户模式网…...
28.Marshal.PtrToStringAnsi C#例子
//怎么说呢,这个代码Marshal的英文意思有将军,控制等等, //我的理解是类似于console控制台。 //然后后面这个Ansi是一种ASCII的扩展,还有其他编码方式可选 就是一个把后面的指针转化为字符串的一个代码 这是用法…...

基于feapder爬虫与flask前后端框架的天气数据可视化大屏
# 最近又到期末了,有需要的同学可以借鉴。 一、feapder爬虫 feapder是国产开发的新型爬虫框架,具有轻量且数据库操作方便、异常提醒等优秀特性。本次设计看来利用feapder进行爬虫操作,可以加快爬虫的速率,并且简化数据入库等操作…...
Linux隐藏登录和清除历史命令以及其他相关安全操作示例
隐藏登录 ssh -T rootxxx.xxx.xxx.xxx /bin/bash -i 命令拆解-T :告诉ssh客户端,不要分配一个TTY(伪终端)root :连接用户xxx.xxx.xxx.xxx :连接的服务器ip地址/bin/bash :在远程服务器上启动…...

从授权校验看SpringBoot自动装配
背景 最近需要实现一个对于系统的授权检测功能,即当SpringBoot应用被启动时,需要当前设备是否具有有效的的授权许可信息,若无则直接退出应用。具体的实现方案请继续看下文。 环境 Ruoyi-Vue SpringBoot3 RuoYi-Vue: 🎉 基于Spr…...

网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...

高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...

什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...