当前位置: 首页 > news >正文

MicroPython 开发ESP32应用教程 之 Timer、GPIO中断

随着我们课程的递进,大家会发现,我们之前课程中的例子,虽然功能都能实现,但总觉得体验感不够好,比如按键控制GRB灯珠的时候,很容易出现按键后,灯珠没有反应,还有蓝牙发送指令控制灯珠的时候也会出现延迟等问题,今天,我们就讲解如何改善这类现象。

要想改善这类现象,需要用到Timer、GPIO中断,我们先分别介绍一下这些知识。

一、Timer

 在 MicroPython 中,Timer类用于实现硬件定时器功能,可以用于周期性任务、定时中断、PWM 生成等。以下是 Timer 的常见应用场景和示例:

 1. 基本概念
        定时器 ID: ESP32S3 支持 4 个定时器
        定时器模式:
                  Timer.PERIODIC:周期性执行回调函数。
                  Timer.ONE_SHOT:单次执行回调函数。
        回调函数:定时器触发时调用的函数。  2. 基本用法
   

2、初始化定时器、停止定时器

from machine import Timer# 初始化定时器(ID=0,模式为周期性)
tim = Timer(0)
tim.init(period=1000, mode=Timer.PERIODIC, callback=lambda t: print("Timer triggered!"))tim.deinit()  # 停止并关闭定时器

参数说明:
period:定时周期(单位:毫秒)。
mode:Timer.PERIODIC 或 Timer.ONE_SHOT。
callback:定时器触发时调用的函数(需接受一个参数,通常是定时器对象)。

 3、应用举例

from machine import Timer, Pinled = Pin(2, Pin.OUT)  # 假设我们用 GPIO2 连接 LEDdef toggle_led(t):led.value(not led.value())  # 切换 LED 状态# 初始化定时器,每 500ms 触发一次
tim = Timer(0)
tim.init(period=500, mode=Timer.PERIODIC, callback=toggle_led)

4、PWM输出

from machine import Timer, Pin, PWMpwm = PWM(Pin(2))  # 假设使用 PWM 控制 LED 亮度
pwm.freq(1000)     # 设置 PWM 频率def set_duty(duty):pwm.duty(duty)# 定时改变 PWM 占空比
duty = 0
def pwm_callback(t):global dutyduty = (duty + 10) % 1023pwm.duty(duty)tim = Timer(0)
tim.init(period=50, mode=Timer.PERIODIC, callback=pwm_callback)

二、GPIO 中断

在 MicroPython 中配置 GPIO 中断可以实现对外部事件的快速响应(如按键按下、传感器信号触发等)。以下是详细的配置方法和示例:

1. GPIO 中断的基本概念
        触发条件:支持多种触发模式,如:
                  Pin.IRQ_RISING:上升沿触发(低电平 → 高电平)。
                  Pin.IRQ_FALLING:下降沿触发(高电平 → 低电平)。
                  Pin.IRQ_LOW_LEVEL:低电平持续触发。
                  Pin.IRQ_HIGH_LEVEL:高电平持续触发。
                  Pin.IRQ_CHANGE:电平变化触发(上升沿和下降沿均触发)。(我在s3上测试,好象不支持电平变化触发中断)
        中断服务函数(ISR):当触发条件满足时,自动调用绑定的回调函数。

2. 配置 GPIO 中断的步骤
        2.1 初始化 GPIO 引脚
        设置引脚为输入模式,并启用上拉/下拉电阻(可选):

from machine import Pin# 初始化引脚为输入模式,启用内部上拉电阻(假设连接按键到 GND)
pbootkey = Pin(0, Pin.IN,Pin.PULL_UP) #配置GPIO0为输入端口

        2.2 定义中断回调函数
         回调函数需要接收一个参数(触发中断的引脚对象):
 

def     button_handler(pin):time.sleep_ms(10)	#消除抖动if pin.value() == 0:led.value(not led.value())# 此处执行中断处理逻辑   

         2.3 绑定中断触发条件和回调函数**

# 配置中断:下降沿触发(按键按下时从高电平变为低电平)
pbootkey.irq(trigger = Pin.IRQ_FALLING,handler=button_handler)

 3、 多引脚共享中断
        多个引脚可以绑定到同一个回调函数:
 

button1 = Pin(14, Pin.IN, Pin.PULL_UP)
button2 = Pin(15, Pin.IN, Pin.PULL_UP)def shared_handler(pin):print("Interrupt from pin:", pin)button1.irq(trigger=Pin.IRQ_FALLING, handler=shared_handler)
button2.irq(trigger=Pin.IRQ_FALLING, handler=shared_handler)

4. 动态修改中断配置

# 禁用中断
button.irq(handler=None)# 重新启用中断(例如切换触发模式)
button.irq(trigger=Pin.IRQ_RISING, handler=button_handler)

三、应用实例

 接下来,我们利用今天介绍的知识来改善前面课程讲解的实例。

1、通过开发板上的boot按键来控制开发板上的GRB灯珠

def     button_handler(pin):time.sleep_ms(10)	#消除抖动if pin.value() == 0:wsled.ws2812_Change_Status()

2、通过Timer回调函数来扫描aht20温湿度值

这里我们设定1分钟扫描一次。

想要详细了解aht20及aht10的朋友,可以参考:CH592F /CH582通过硬件IIC读写AHT10 /AHT20,并将数据通过BLE发送给上位机

def monitor(t):global ahtx_intervalahtx_interval += 1if ahtx_interval >= (AHT20_Interval / MOINTOR_Interval):ahtx_interval = 0wendu = aht20_sensor.temperatureshidu = aht20_sensor.relative_humiditytft.showstring("实测温湿度:\n温度 : {:>4.1f} ℃\n湿度 : {:>4.1f} %".format(wendu,shidu),0,42,color(0,0,0xff))

3、通过Timer回调函数监控蓝牙发送控制GRB灯珠的指令

def monitor(t):command = ble.get_rec_cmd()if command == 'LED ON':wsled.ws2812_Power(1)
#            print(ble.ble_msg)ble.send('LED is ON.')
#            ble.ble_msg = ''# 关闭LEDelif command == 'LED OFF':wsled.ws2812_Power(0)
#        print('LED is OFF.')ble.send('LED is OFF.')

4、通过Timer回调函数改变GRB灯珠状态

def monitor(t):wsled.ws2812_LED_Cycle()

想要了解ws2812灯珠控制原理及代码介绍的朋友,可以参考:

MicroPython 开发基于ESP32S3控制ws2812灯带的程序

最后给出主程序的完整代码,需要各模块实现代码的朋友请参考:

MicroPythonforESP32S3Timer回调函数、GPIO中断处理函数、aht20温湿度测量及显示、BLE控制ws2812灯珠、st7735TFT显示屏驱动、中文字符支持资源-CSDN文库


from machine import I2C,SPI,Pin,Timer
from micropython import const
import time
from esp32_ble import  ESP32_BLE
from esp32_wifi import esp32_wifi
from ahtx0 import AHT20,ahtx_interval
from st7735 import ST7735,color
from ws2812 import WS2812
spi = SPI(2,baudrate=20000000,polarity=0,phase=0,sck=Pin(4),mosi=Pin(5),miso=None)# 定义控制引脚
dc = Pin(7,Pin.OUT)
cs = Pin(15,Pin.OUT)
rst= Pin(6,Pin.OUT)
#bl = Pin(9, Pin.OUT)
# 初始化显示屏 (128x160)
tft = ST7735(128, 160, spi, dc, cs, rst,None,rotate=0)i2c = I2C(0,scl=Pin(1),sda=Pin(2),freq=200000)
aht20_sensor = AHT20(i2c)pin = Pin(48, Pin.OUT)   #配置GPIO8为输出端口,控制ws2812灯珠的DIN信号
wsled = WS2812(pin,1,3,1)MOINTOR_Interval = const(100)
AHT20_Interval = const(6000)def monitor(t):global ahtx_intervalwsled.ws2812_LED_Cycle()ahtx_interval += 1if ahtx_interval >= (AHT20_Interval / MOINTOR_Interval):ahtx_interval = 0wendu = aht20_sensor.temperatureshidu = aht20_sensor.relative_humiditytft.showstring("实测温湿度:\n温度 : {:>4.1f} ℃\n湿度 : {:>4.1f} %".format(wendu,shidu),0,42,color(0,0,0xff))command = ble.get_rec_cmd()if command == 'LED ON':wsled.ws2812_Power(1)
#            print(ble.ble_msg)ble.send('LED is ON.')
#            ble.ble_msg = ''# 关闭LEDelif command == 'LED OFF':wsled.ws2812_Power(0)
#        print('LED is OFF.')ble.send('LED is OFF.')
#            ble.ble_msg = ''def     button_handler(pin):time.sleep_ms(10)	#消除抖动if pin.value() == 0:wsled.ws2812_Change_Status()if __name__ == "__main__":pbootkey = Pin(0, Pin.IN,Pin.PULL_UP) #配置GPIO0为输入端口pbootkey.irq(trigger = Pin.IRQ_FALLING,handler=button_handler)tft.clear()wendu = aht20_sensor.temperatureshidu = aht20_sensor.relative_humiditytft.showstring("实测温湿度:\n温度 : {:>4.1f} ℃\n湿度 : {:>4.1f} %".format(wendu,shidu),0,42,color(0,0,0xff))ble = ESP32_BLE("913 AI App")tim = Timer(0)tim.init(period = MOINTOR_Interval,mode=Timer.PERIODIC,callback=monitor)while True:time.sleep(1)        

 

相关文章:

MicroPython 开发ESP32应用教程 之 Timer、GPIO中断

随着我们课程的递进,大家会发现,我们之前课程中的例子,虽然功能都能实现,但总觉得体验感不够好,比如按键控制GRB灯珠的时候,很容易出现按键后,灯珠没有反应,还有蓝牙发送指令控制灯珠…...

【区块链安全 | 第三十七篇】合约审计之获取私有数据(一)

文章目录 私有数据访问私有数据实例存储槽Solidity 中的数据存储方式1. storage(持久化存储)定长数组变长数组 2. memory(临时内存)3. calldata 可见性关键字私有数据存储风险安全措施 私有数据 私有数据(Private Dat…...

20250408在荣品的PRO-RK3566开发板使用Rockchip原厂的buildroot系统时拿掉经常出现的list-iodomain.sh警告信息

rootrk3566-buildroot:/usr/bin# vi list-iodomain.sh rootrk3566-buildroot:/usr/bin# sync 【最后】 #chk_env #get_chip_id $1 #echo_msg "Get CHIP ID: $CHIP_ID" #get_iodomain_val 20250408在荣品的PRO-RK3566开发板使用Rockchip原厂的buildroot系统时拿掉经常…...

上下拉电阻详解

一、基本定义 上拉电阻:连接信号线与电源(VCC),确保信号在无驱动时保持高电平。 下拉电阻:连接信号线与地(GND),确保信号在无驱动时保持低电平。 二、核心作用 电平稳定 防止悬空引…...

特权FPGA之数码管

case语句的用法: 计数器不断的计数,每一个num对应数码管一种数据的输出。实例通俗易懂,一目了然。 timescale 1ns / 1ps// Company: // Engineer: // // Create Date: // Design Name: // Module Name: // Project Name: //…...

PyTorch 学习笔记

环境:python3.8 PyTorch2.4.1cpu PyCharm 参考链接: 快速入门 — PyTorch 教程 2.6.0cu124 文档 PyTorch 文档 — PyTorch 2.4 文档 快速入门 导入库 import torch from torch import nn from torch.utils.data import DataLoader from torchvision …...

MCP基础学习计划:从MCP入门到项目构建的全面指南

文章简介 ai生成的学计划有的连接是无效的,想着边学习边找输出文章,后续会继续链接更新 在人工智能和大语言模型(LLM)的快速发展下,掌握Model Context Protocol(MCP)成为提升AI应用能力的关键。…...

NO.77十六届蓝桥杯备战|数据结构-单调队列|质量检测(C++)

什么是单调队列? 单调队列,顾名思义,就是存储的元素要么单调递增要么单调递减的队列。注意,这⾥的队列和普通的队列不⼀样,是⼀个双端队列。单调队列解决的问题 ⼀般⽤于解决滑动窗⼝内最⼤值最⼩值问题,以…...

【有啥问啥】深入浅出讲解 Teacher Forcing 技术

深入浅出讲解 Teacher Forcing 技术 在序列生成任务(例如机器翻译、文本摘要、图像字幕生成等)中,循环神经网络(RNN)以及基于 Transformer 的模型通常采用自回归(autoregressive)的方式生成输出…...

redis数据迁移之通过redis-dump镜像

这里写目录标题 一、redis-dump 镜像打包1.1 安装windows docker1.2 idea项目创建1.3 idea镜像打包 二、redis数据迁移2.1 数据导出2.2 数据导入 一、redis-dump 镜像打包 没有找到可用的redis-dump镜像,需要自己打包一下,这里我是在idea直接打包的 1.…...

Redis哨兵模式下执行sentinel failover mymaster命令可能导致什么风险,如何避免

在 Redis 哨兵模式下执行 SENTINEL FAILOVER mymaster 命令会强制触发主节点切换(手动故障转移),虽然这是合法的管理操作,但可能带来以下风险及规避方法: 一、潜在风险 数据丢失风险 原因:主节点可能在故障…...

软考案例分析实例答题模板

案例分析(全部为主观问答题, 总 5 大题, 第一题必选, 剩下 4 选 2, 每题 25 分, 共75分) 第一题: 案例分析——某企业信息架构优化项目 案例材料: 某企业是一家从事电子商务的大型企业, 随着业务规模的不断扩大, 现有的信息架 构已无法满足企业快速发展的需求。 企业…...

Docker+Jenkins+Gitee自动化项目部署

前置条件 docker安装成功 按照下面配置加速 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF {"registry-mirrors": ["https://register.librax.org"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker一、…...

olib开源图书

8.olib开源图书 该软件作者已开源&#xff0c;开源地址&#xff1a;开源地址&#xff1a;https://github.com/shiyi-0x7f/o-lib 点击该软件&#xff0c;使用管理员权限打开&#xff0c;进入界面可以搜索图书并下载pdf文件。 蓝奏云下载&#xff1a;https://wwph.lanzout.com/…...

react: styled-components实现原理 标签模版

styled-components是针对react中一个前端广泛使用的css-in-js样式库B站 利用标签模版 利用ES6中的 标签模版文档标签模板其实不是模板&#xff0c;而是函数调用的一种特殊形式。“标签”指的就是函数&#xff0c;紧跟在后面的模板字符串就是它的参数。 let a 5; let b 10;…...

AI大模型从0到1记录学习 day15

14.3.5 互斥锁 1&#xff09;线程安全问题 线程之间共享数据会存在线程安全的问题。 比如下面这段代码&#xff0c;3个线程&#xff0c;每个线程都将g_num 1 十次&#xff1a; import time import threading def func(): global g_num for _ in range(10): tmp g_num 1 # ti…...

macbook pro查询并修改命令提示符的格式

环境 MacBook Pro 描述 我的命令提示符总是&#xff1a; # 前面总是多了&#xff08;base&#xff09; (base) yutaoyutaodeMacBook-Pro ~ % vim .zshrc (base) yutaoyutaodeMacBook-Pro ~ % source .zshrc # 期望改成下面这样&#xff1a; yutaoyutaodeMacBook-Pro ~ % 找…...

Baumer工业相机堡盟工业相机如何处理偶发十万分之一或百万分之一几率出现的黑图现象(C#)

Baumer工业相机堡盟工业相机如何处理偶发十万分之一或百万分之一几率出现的黑图现象&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机出现黑图的技术背景硬件层面软件层面环境因素 实际案例演示&#xff1a;BaumerVCXG-53M.I.XT 防护相机项目使用环境项目反馈问题项目…...

基于Resemblyzer 声纹识别门禁系统设计

一、整体结构与思路 这份程序的核心目的是&#xff1a; 用麦克风录音 ➜ 识别说话人是谁 ➜ 图形化展示 ➜ 语音播报反馈 它主要由 4 个部分组成&#xff1a; 全局配置和依赖加载 语音采集和声纹提取逻辑 图形界面与交互&#xff08;PyQt5&#xff09; 语音播报反馈系统 …...

分布式数据库LSM树

LSM树的核心结构与操作流程 Log-Structured Merge Tree&#xff0c;日志 结构化 合并 树。 ​​追加写&#xff1a;永远不改&#xff0c;就算是update操作&#xff0c;也是追加写&#xff0c;一直新生成文件。 刷盘触发​​&#xff1a;追加到一定程序&#xff0c;比如到了几M…...

2143 最少刷题数

2143 最少刷题数 ⭐️难度&#xff1a;中等 &#x1f31f;考点&#xff1a;2022、前缀和、省赛、二分 &#x1f4d6; &#x1f4da; import java.util.Scanner; import java.util.Arrays;public class Main2 {public static void main(String[] args) {Scanner sc new Sca…...

Ansible:playbook 使用when和ith_items

文章目录 playbook使用 whenplaybook 使用迭代 with_items​迭代嵌套子变量 if 和 for在template中使用了&#xff0c;在playbook中加以区分&#xff0c;因此使用when进行条件判断&#xff0c;with_items进行循环迭代 playbook使用 when when语句&#xff0c;可以实现条件测试。…...

python爬取1688.item_search_best-查询榜单列表返回数据说明

在当今数字化时代&#xff0c;电商平台的数据蕴含着巨大的商业价值。1688作为国内领先的B2B电商平台&#xff0c;其商品搜索榜单数据能够为供应商、采购商以及市场研究人员提供诸多洞察。本文将详细介绍如何使用Python爬取1688的商品搜索榜单数据&#xff0c;并对返回数据进行说…...

数据结构(一)KMP+滑动窗口+链表+栈+队列

数据结构-链表 单链表 #include<iostream> using namespace std; const int N 100010; ​ int head,e[N],ne[N],idx; ​ void init() {head -1;idx 0; } void add_to_head(int x) {e[idx] x;ne[idx] head;head idx;idx; } void add(int k,int x) {e[idx] x;ne[id…...

C语言 数据结构 【队列】动态模拟实现

引言 用动态方式模拟实现队列的各个接口 一、队列的结构与概念 概念&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出FIFO(First In First Out) 入队列&#xff1a;进行插入操作的一端称为队尾 出队列…...

Python | 第十三章 | 多态 | 魔术方法 | 静态方法 | 抽象类

P130 多态练习题&#xff08;1&#xff09;2025/2/21 一、isinstance函数 基本说明&#xff1a; isinstance()用于判断对象是否为某个类或其子类的对象基本语法:isinstance(object,classinfo)解读形参&#xff1a; object:对象 classinfo:可以是类名、基本类型或者由它们组成…...

线程安全问题的原因与解决方案总结

目录 一 什么是线程安全&#xff1f; 二 线程安全问题的实例 三 线程安全问题的原因 1.多个线程修改共享数据 2.抢占式执行 3.修改操作不是原子的 4.内存可见性问题 5.指令重排序 四 解决方案 1.同步代码块 2.同步方法 3.加锁lock解决问题 一 什么是线程安全&…...

设计模式-模版方法

目录 什么是模版方法&#xff1f; 怎么理解抽象类的算法骨架&#xff1f; Burn功能骨架 战士类 法师类 什么是模版方法&#xff1f; 借助抽象类定义算法的骨架&#xff0c;再由具体子类实现算法的特定步骤。这种设计模式让算法的整体结构得以固定&#xff0c;同时又能让不…...

c# 运用策略模式与模板方法模式实例

策略模式 策略模式的核心在于定义一系列算法&#xff0c;把它们封装起来&#xff0c;并且让它们能够相互替换。策略模式让算法的变化独立于使用算法的客户端。在这个方法里&#xff0c;策略模式的体现如下&#xff1a; convertFunc 参数&#xff1a;这是一个委托类型的参数&a…...

基于51单片机的3路温度报警器proteus仿真

地址&#xff1a; https://pan.baidu.com/s/1qrCpGuzZRbeFVVjaGMffQA 提取码&#xff1a;1234 仿真图&#xff1a; 芯片/模块的特点&#xff1a; AT89C52/AT89C51简介&#xff1a; AT89C51 是一款常用的 8 位单片机&#xff0c;由 Atmel 公司&#xff08;现已被 Microchip 收…...

llama-factory微调qwen2.5-vl

本文不生产技术,只做技术的搬运工!!! 前言 目前大模型百花齐放,微调方法复杂多样,且教程复杂,工程端想要进行垂域模型适配困难重重,本篇博客详细介绍了qwen2.5-vl的全流程微调过程,包括环境配置、数据集制作、模型训练、模型导出、模型部署、模型推理等过程,希望对工…...

淘宝历史价格采集合规指南:官方 API + 轻量爬虫混合方案

在电商数据分析领域&#xff0c;获取淘宝商品的历史价格数据对于企业制定价格策略、进行竞品分析以及消费者洞察市场价格波动趋势都具有重要意义。然而&#xff0c;由于淘宝平台对数据安全和合规性的严格要求&#xff0c;历史价格采集工作需要在合法合规的框架内进行。本文将详…...

文档控件DevExpress Office File API v24.2亮点:不再支持非Windows系统

DevExpress Office File API是一个专为C#, VB.NET 和 ASP.NET等开发人员提供的非可视化.NET库。有了这个库&#xff0c;不用安装Microsoft Office&#xff0c;就可以完全自动处理Excel、Word等文档。开发人员使用一个非常易于操作的API就可以生成XLS, XLSx, DOC, DOCx, RTF, CS…...

TDengine.C/C++ 连接器

简介 C/C 开发人员可以使用 TDengine 的客户端驱动&#xff0c;即 C/C 连接器&#xff08;以下都用 TDengine 客户端驱动表示&#xff09;&#xff0c;开发自己的应用来连接 TDengine 集群完成数据存储、查询以及其他功能。TDengine 客户端驱动的 API 类似于 MySQL 的 C API。…...

什么是混合搜索Hybrid Search?

🧠 向所有学习者致敬! “学习不是装满一桶水,而是点燃一把火。” —— 叶芝 我的博客主页: https://lizheng.blog.csdn.net 🌐 欢迎点击加入AI人工智能社区! 🚀 让我们一起努力,共创AI未来! 🚀 混合搜索通常指一种结合多种搜索方法或技术的搜索策略,旨在提供更…...

滤波器:模拟滤波器和数字滤波器的区别

滤波器是一种用于从信号中去除不需要的频率成分&#xff0c;只保留所需频率成分的电子设备或算法。根据实现方式的不同&#xff0c;滤波器主要分为模拟滤波器和数字滤波器两大类。以下是对这两种滤波器的详细比较&#xff1a; 一、实现方式与原理 模拟滤波器 实现方式&#xf…...

AudioRecord 录制pcm转wav

pcm转wav PCM 格式校验pcm 添加 wav 头信息WAVWAV 格式检验小端序&#xff1f; 参考地址 PCM 格式校验 /*** 专业PCM文件验证&#xff08;支持动态参数与多格式&#xff09;* param silenceThreshold 静音检测阈值&#xff08;0.0~1.0&#xff09;&#xff0c;默认90%零值为静…...

625SJBH网上便利店的设计与实现

1前 言 目前&#xff0c;网络正以一种前所未有的冲击力在影响着人类的活动&#xff0c;包括人类的生产和日常生活。网络的诞生和发展&#xff0c;颠覆了传统的信息传播方式&#xff0c;冲破了存在于传统交流方式中时间和空间的种种壁垒&#xff0c;极大地改变了人类从物质到精…...

如何开发英语在线训练小程序:从0到1的详细步骤

在数字化学习的浪潮下&#xff0c;英语在线训练小程序凭借便捷、高效的学习模式&#xff0c;成为众多英语学习者的得力助手。如果你也想开发一款独具特色的英语在线训练小程序&#xff0c;不妨参考以下步骤&#xff0c;开启你的小程序开发之旅。 一、前期规划 &#xff08;…...

java设计模式-装饰者模式

装饰者模式(Decorator) 定义 1、动态的将新功能附加到对象上&#xff0c;在对象功能扩展方面&#xff0c;他比继承更有弹性&#xff0c;也体现了开闭原则(OCP) 2、这里提到的动态的将新功能附加到对象和OCP原则&#xff0c;在后面应用实际上会以代码的形式体现。 //饮料 // 饮…...

我提了一个 Androidx IssueTracker

问题 在运行 gradle plugin 插件的 transform R8 阶段出现了报错 Caused by: com.android.tools.r8.internal.xk: java.lang.NullPointerException: Cannot invoke “String.length()” because “” is null 报错日志 FAILURE: Build failed with an exception.* What went w…...

spring mvc @ResponseBody 注解转换为 JSON 的原理与实现详解

ResponseBody 注解转换为 JSON 的原理与实现详解 1. 核心作用 ResponseBody 是 Spring MVC 的一个注解&#xff0c;用于将方法返回的对象直接序列化为 HTTP 响应体&#xff08;如 JSON 或 XML&#xff09;&#xff0c;而不是通过视图解析器渲染为视图&#xff08;如 HTML&…...

RK3588芯片NPU的使用:Windows11 Docker中运行MobileNet模型以及部署到开发板进行目标检测

本文的目标 本文将在RKNN Docker环境&#xff08;见本系列的第二篇文章&#xff09;中练习MobileNet图像分类示例&#xff0c;并通过adb工具部署到RK3588开发板。 MobileNet简介请参考上一篇文章。 开发环境说明 主机系统&#xff1a;Windows11目标设备&#xff1a;搭载RK35…...

智能仓储数字孪生Demo(Unity实现)

一、项目背景与行业痛点 医药流通行业仓储管理面临三大核心挑战&#xff1a; 合规性风险&#xff1a;GSP&#xff08;药品经营质量管理规范&#xff09;对温湿度、药品批次追溯的严苛要求&#xff0c;传统人工记录易出错效率瓶颈&#xff1a;库区布局复杂&#xff0c;人工巡检…...

Qt上hook钩子的使用,监测键盘和鼠标。

演示平台&#xff1a;windows。 编译环境&#xff1a;Qt5.12.2 MinGW 64-bit Windows API&#xff1a; ///加载钩子 /*** SetWindowsHookEx 函数解释* int idHook 所监控的挂钩类型* HOOKPROC lpfn 监控信息的处理函数* HINSTANCEhMod 监控信息的动态链接位置 nullptr则与本线…...

Android12源码编译之预置Android Studio项目Android.mk文件编写

1、在AndroidManifest.xml文件中添加package"com.sprd.silentinstalldemo"属性&#xff0c;因为新版本的Android Studio默认生成的AndroidManifest.xml是没有这个属性值的 <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:an…...

微服务注册中心选择指南:Eureka vs Consul vs Zookeeper vs Nacos

文章目录 引言微服务注册中心概述什么是服务注册与发现选择注册中心的标准 常见的微服务注册中心1. Eureka1.1 理论基础1.2 特点1.3 示例代码 2. Consul2.1 理论基础2.2 特点2.3 示例代码 3. Zookeeper3.1 理论基础3.2 特点3.3 示例代码 4. Nacos4.1 理论基础4.2 特点4.3 示例代…...

pg_waldump无法定位WAL文件问题

目录 排查pg_waldump无法定位WAL文件问题的步骤1. 确认WAL文件路径配置2. 检查WAL文件名格式3. 验证文件存在性4. 检查文件权限5. 时间线历史文件检查6. 使用pg_controldata验证状态7. 尝试指定完整路径 典型错误场景及解决方案 排查pg_waldump无法定位WAL文件问题的步骤 1. 确…...

Mysql安装

Mysql安装 1. windows安装1.1 官网下载1.2 安装 1. windows安装 1.1 官网下载 官网下载 选择对于版本&#xff0c;然后跳转到下载页 1.2 安装...

Windows版-RabbitMQ自动化部署

一键完成Erlang环境变量配置&#xff08;ERLANG_HOME系统变量&#xff09;‌ 一键完成RabbitMQ环境变量配置&#xff08;RabbitMQ系统变量&#xff09;‌ 实现快速安装部署RabbitMQ PS&#xff1a; 需提前下载安装&#xff1a; - otp_win64_25.0.exe (Erlang) - rabbit…...