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

【ESP32 IDF快速入门】点亮第一个LED灯与流水灯

文章目录

  • 前言
  • 一、有哪些工作模式?
    • 1.1 GPIO的详细介绍
    • 1.2 GPIO的内部框图
      • 输入模式
      • 输出部分
  • 二、GPIO操作函数
    • 2.1 GPIO 汇总
    • 2.2 GPIO操作函数
      • gpio_config配置引脚
      • reset 引脚函数
      • 设置引脚电平
      • 选中对应引脚
      • 设置引脚的方向
    • 2.3 点亮第一个灯
  • 三、流水灯
  • 总结


前言

ESP32是一款功能强大的微控制器,广泛应用于物联网(IoT)和嵌入式系统开发中。ESP32的开发环境包括ESP-IDF(Espressif IoT Development Framework),它提供了丰富的工具和库,使开发人员能够充分利用ESP32的性能和功能。

本文旨在介绍ESP32 IDF的快速入门,通过简单的示例演示如何点亮第一个LED灯和实现流水灯效果。这些基础示例将帮助初学者了解如何使用ESP32 IDF进行开发,并为后续的项目打下基础。


一、有哪些工作模式?

1.1 GPIO的详细介绍

GPIO是General-purpose and alternate-function I/Os的缩写
他的含义是:通用和复用的引脚

GPIO是分组的,每一组有很多引脚
比如说PA0、PA1…PA15,一组GPIO有16个引脚
组数是由芯片决定的,具体的组数可以看对应的芯片的原理图

1.2 GPIO的内部框图

我们可以在芯片手册中找到GPIO的对应框图,他说对于某一个引脚的:
在这里插入图片描述
他可以分为两部分,上部分就是输入,下部分就是输出

输入模式

输入模式的框图如下:
在这里插入图片描述
要理解他,我们可以看下面的图:
在这里插入图片描述

我们通过配置pin1让他为输入,然后我们读某个寄存器就可以得到他的状态。
当k1按下,接到电源,那么pin肯定状态是1高电平,如果没有按下,相当于这个引脚是悬空状态
那么你读这个值,你知道他是什么状态吗,可能读出来是1,可以是0

再比如,我们配置pin2让他为输入,和上面一样,我们也去读,按下时为0,那么没有按下是什么状态呢,就和上面的是一样的了

那么我们怎么解决他这个问题呢
对于pin1我们可以加一个下拉电阻
在这里插入图片描述
那么他按下时就就会是高电平,没按就是低电平

同样的对于pin2,就需要加上拉电阻了
在这里插入图片描述
那么他按下时就就会是低电平,没按就是高电平

所以上下拉电阻是需要看实际的情况来选择的。

这些电阻集成到了芯片,我们可以直接设置他,是上拉还是下拉,我们就不用每一个都搞一个电阻了

回到框图:
在这里插入图片描述
其中,里面的VDD为上拉电阻
Vss为下拉电阻,他在芯片中已经设计好的了

还有一种输入就是 Analog Input,模拟输入,那么模拟输入的话,他需要得到具体的电压值,所以我们不能设置上下拉电阻,完全由外部电路控制,要不然模拟输入和直接输入没两样了

那么输入就是这几部分:上拉输入、下拉输入、浮空输入、模拟输入

在最后我们通过读取输入寄存器:Input data register,得到1/0

如果说他有毛刺怎么办:他会在某一个范围电压内为1,某一个电压范围为0

输出部分

在这里插入图片描述
他这个GPIO可以接到一个灯,或者其他的芯片
如果是点灯,那么电压肯定是越高越好
如果是关灯,电压肯定是越低越好

当输出1时,I/O pin连接到P-MOS的VDD,然后就能点灯了
如果输出0,P-MOS断开,连接地,所以就关灯
推挽输出:当你要高电平,就推到VDD,如果要低电平,就推到VSS这样就是推挽输出,可以输出高低电平

开漏输出:
在开漏输出中,有两种状态:开和关。当开漏输出为开启状态时,它会将电路连接到地(或负极),使得电路的输出变为低电平。而当开漏输出为关闭状态时,它不会连接到任何地方,使得电路的输出由外部设备或其他电路来控制。

开漏输出一般是用来解决两个芯片通信的问题的
不至于把两个芯片搞坏

二、GPIO操作函数

2.1 GPIO 汇总

ESP32 芯片具有 34 个物理 GPIO 管脚(GPIO0 ~ GPIO19、GPIO21 ~ GPIO23、GPIO25 ~ GPIO27 和 GPIO32 ~ GPIO39)。每个管脚都可用作一个通用 IO,或连接一个内部的外设信号。通过 IO MUX、RTC IO MUX 和 GPIO 交换矩阵,可配置外设模块的输入信号来源于任何的 IO 管脚,并且外设模块的输出信号也可连接到任意 IO 管脚。这些模块共同组成了芯片的 IO 控制。

2.2 GPIO操作函数

在使用GPIO之前,你需要加上这个头文件:#include "driver/gpio.h"

gpio_config配置引脚

我们可以使用下面这个函数对一个GPIO进行配置:

esp_err_t gpio_config(const gpio_config_t *pGPIOConfig);

他的参数是一个结构体,他的类型如下:

typedef struct {uint64_t pin_bit_mask;          /*!< GPIO pin: set with bit mask, each bit maps to a GPIO */gpio_mode_t mode;               /*!< GPIO mode: set input/output mode                     */gpio_pullup_t pull_up_en;       /*!< GPIO pull-up                                         */gpio_pulldown_t pull_down_en;   /*!< GPIO pull-down                                       */gpio_int_type_t intr_type;      /*!< GPIO interrupt type                                  */
} gpio_config_t;

pin_bit_mask:
作用:用于设置GPIO引脚。每个位(bit)对应一个GPIO引脚,通过位掩码的方式来选择要配置的GPIO引脚。
类型:uint64_t,64位的整数类型。
比如把GPIO10设置:

gpio_config_t gpio_conf;
gpio_conf.pin_bit_mask = (1ULL << 10); // 将第10位设置为1,表示选择GPIO10

mode:
作用:设置GPIO引脚的工作模式,即输入模式(input)还是输出模式(output)。
类型:gpio_mode_t,是一个枚举类型,可能的取值包括 GPIO_MODE_INPUT 和 GPIO_MODE_OUTPUT。

pull_up_en:
作用:启用或禁用GPIO引脚的上拉电阻。
类型:gpio_pullup_t,是一个枚举类型,可能的取值包括 GPIO_PULLUP_DISABLE 和 GPIO_PULLUP_ENABLE。
pull_down_en:

作用:启用或禁用GPIO引脚的下拉电阻。
类型:gpio_pulldown_t,是一个枚举类型,可能的取值包括 GPIO_PULLDOWN_DISABLE 和 GPIO_PULLDOWN_ENABLE。
intr_type:

作用:配置GPIO引脚的中断类型,即何种事件会触发中断。
类型:gpio_int_type_t,是一个枚举类型,可能的取值包括 GPIO_INTR_DISABLE、GPIO_INTR_ANYEDGE、GPIO_INTR_NEGEDGE 和 GPIO_INTR_POSEDGE。分别表示禁用中断、任意边沿触发、下降沿触发和上升沿触发。

他的放回值为esp_err_t类型,他是一个int类型

他有如下的取值

/* Definitions for error constants. */
#define ESP_OK          0       /*!< esp_err_t value indicating success (no error) */
#define ESP_FAIL        -1      /*!< Generic esp_err_t code indicating failure */#define ESP_ERR_NO_MEM              0x101   /*!< Out of memory */
#define ESP_ERR_INVALID_ARG         0x102   /*!< Invalid argument */
#define ESP_ERR_INVALID_STATE       0x103   /*!< Invalid state */
#define ESP_ERR_INVALID_SIZE        0x104   /*!< Invalid size */
#define ESP_ERR_NOT_FOUND           0x105   /*!< Requested resource not found */
#define ESP_ERR_NOT_SUPPORTED       0x106   /*!< Operation or feature not supported */
#define ESP_ERR_TIMEOUT             0x107   /*!< Operation timed out */
#define ESP_ERR_INVALID_RESPONSE    0x108   /*!< Received response was invalid */
#define ESP_ERR_INVALID_CRC         0x109   /*!< CRC or checksum was invalid */
#define ESP_ERR_INVALID_VERSION     0x10A   /*!< Version was invalid */
#define ESP_ERR_INVALID_MAC         0x10B   /*!< MAC address was invalid */#define ESP_ERR_WIFI_BASE           0x3000  /*!< Starting number of WiFi error codes */
#define ESP_ERR_MESH_BASE           0x4000  /*!< Starting number of MESH error codes */
#define ESP_ERR_FLASH_BASE          0x6000  /*!< Starting number of flash error codes */
#define ESP_ERR_HW_CRYPTO_BASE      0xc000  /*!< Starting number of HW cryptography module error codes */

reset 引脚函数

我们可以使用下面这个函数重置指定的引脚:

esp_err_t gpio_reset_pin(gpio_num_t gpio_num);

他的参数是一个枚举,里面有所有的引脚定义:

typedef enum {GPIO_NUM_NC = -1,    /*!< Use to signal not connected to S/W */GPIO_NUM_0 = 0,     /*!< GPIO0, input and output */GPIO_NUM_1 = 1,     /*!< GPIO1, input and output */GPIO_NUM_2 = 2,     /*!< GPIO2, input and output */GPIO_NUM_3 = 3,     /*!< GPIO3, input and output */GPIO_NUM_4 = 4,     /*!< GPIO4, input and output */GPIO_NUM_5 = 5,     /*!< GPIO5, input and output */GPIO_NUM_6 = 6,     /*!< GPIO6, input and output */GPIO_NUM_7 = 7,     /*!< GPIO7, input and output */GPIO_NUM_8 = 8,     /*!< GPIO8, input and output */GPIO_NUM_9 = 9,     /*!< GPIO9, input and output */GPIO_NUM_10 = 10,   /*!< GPIO10, input and output */GPIO_NUM_11 = 11,   /*!< GPIO11, input and output */GPIO_NUM_12 = 12,   /*!< GPIO12, input and output */GPIO_NUM_13 = 13,   /*!< GPIO13, input and output */GPIO_NUM_14 = 14,   /*!< GPIO14, input and output */GPIO_NUM_15 = 15,   /*!< GPIO15, input and output */GPIO_NUM_16 = 16,   /*!< GPIO16, input and output */GPIO_NUM_17 = 17,   /*!< GPIO17, input and output */GPIO_NUM_18 = 18,   /*!< GPIO18, input and output */GPIO_NUM_19 = 19,   /*!< GPIO19, input and output */GPIO_NUM_20 = 20,   /*!< GPIO20, input and output */GPIO_NUM_21 = 21,   /*!< GPIO21, input and output */GPIO_NUM_22 = 22,   /*!< GPIO22, input and output */GPIO_NUM_23 = 23,   /*!< GPIO23, input and output */GPIO_NUM_25 = 25,   /*!< GPIO25, input and output */GPIO_NUM_26 = 26,   /*!< GPIO26, input and output */GPIO_NUM_27 = 27,   /*!< GPIO27, input and output */GPIO_NUM_28 = 28,   /*!< GPIO28, input and output */GPIO_NUM_29 = 29,   /*!< GPIO29, input and output */GPIO_NUM_30 = 30,   /*!< GPIO30, input and output */GPIO_NUM_31 = 31,   /*!< GPIO31, input and output */GPIO_NUM_32 = 32,   /*!< GPIO32, input and output */GPIO_NUM_33 = 33,   /*!< GPIO33, input and output */GPIO_NUM_34 = 34,   /*!< GPIO34, input mode only */GPIO_NUM_35 = 35,   /*!< GPIO35, input mode only */GPIO_NUM_36 = 36,   /*!< GPIO36, input mode only */GPIO_NUM_37 = 37,   /*!< GPIO37, input mode only */GPIO_NUM_38 = 38,   /*!< GPIO38, input mode only */GPIO_NUM_39 = 39,   /*!< GPIO39, input mode only */GPIO_NUM_MAX,
/** @endcond */
} gpio_num_t;

你可以直接填写引脚数字即可。

设置引脚电平

我们可以使用下面这个函数来设置指定引脚的电平:

esp_err_t gpio_set_level(gpio_num_t gpio_num, uint32_t level)

参数1为设置哪个引脚,参数2为是高电平还是低电平

选中对应引脚

我们可以使用下面的函数使物理引脚转换成GPIO引脚:

void gpio_pad_select_gpio(uint8_t gpio_num);

例如:

gpio_pad_select_gpio(10);

设置引脚的方向

我们可以使用下面函数来设置引脚是输入模式还是输出模式:

esp_err_t gpio_set_direction(gpio_num_t gpio_num, gpio_mode_t mode)

其参数2为一个枚举类型,下面为他的定义:

typedef enum {GPIO_MODE_DISABLE = GPIO_MODE_DEF_DISABLE,                                                         /*!< GPIO mode : disable input and output             */GPIO_MODE_INPUT = GPIO_MODE_DEF_INPUT,                                                             /*!< GPIO mode : input only                           */GPIO_MODE_OUTPUT = GPIO_MODE_DEF_OUTPUT,                                                           /*!< GPIO mode : output only mode                     */GPIO_MODE_OUTPUT_OD = ((GPIO_MODE_DEF_OUTPUT) | (GPIO_MODE_DEF_OD)),                               /*!< GPIO mode : output only with open-drain mode     */GPIO_MODE_INPUT_OUTPUT_OD = ((GPIO_MODE_DEF_INPUT) | (GPIO_MODE_DEF_OUTPUT) | (GPIO_MODE_DEF_OD)), /*!< GPIO mode : output and input with open-drain mode*/GPIO_MODE_INPUT_OUTPUT = ((GPIO_MODE_DEF_INPUT) | (GPIO_MODE_DEF_OUTPUT)),                         /*!< GPIO mode : output and input mode                */
} gpio_mode_t;

2.3 点亮第一个灯

gpio_reset_pin(22);
gpio_pad_select_gpio(22);
gpio_set_direction(22,GPIO_MODE_OUTPUT);for(int i = 0;i<10;i++)
{gpio_set_level(22,1);vTaskDelay(100);gpio_set_level(22,0);vTaskDelay(100);
}

三、流水灯

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"#define LED_GPIO_1  GPIO_NUM_25
#define LED_GPIO_2  GPIO_NUM_26
#define LED_GPIO_3  GPIO_NUM_27void app_main() {// 配置GPIO引脚gpio_pad_select_gpio(LED_GPIO_1);gpio_pad_select_gpio(LED_GPIO_2);gpio_pad_select_gpio(LED_GPIO_3);gpio_set_direction(LED_GPIO_1, GPIO_MODE_OUTPUT);gpio_set_direction(LED_GPIO_2, GPIO_MODE_OUTPUT);gpio_set_direction(LED_GPIO_3, GPIO_MODE_OUTPUT);while (1) {// 依次点亮LEDgpio_set_level(LED_GPIO_1, 1);vTaskDelay(500 / portTICK_PERIOD_MS);gpio_set_level(LED_GPIO_1, 0);gpio_set_level(LED_GPIO_2, 1);vTaskDelay(500 / portTICK_PERIOD_MS);gpio_set_level(LED_GPIO_2, 0);gpio_set_level(LED_GPIO_3, 1);vTaskDelay(500 / portTICK_PERIOD_MS);gpio_set_level(LED_GPIO_3, 0);}
}

总结

通过本文的介绍,读者可以快速了解如何在ESP32上使用ESP-IDF进行开发。我们首先介绍了如何点亮第一个LED灯,通过简单的代码演示了如何配置GPIO并控制LED的状态。接着,我们进一步展示了如何实现流水灯效果,通过循环控制多个LED的状态,从而创建动态的灯光效果。

这些示例不仅帮助读者熟悉ESP32的开发流程和基本操作,还为他们提供了一个良好的起点,使他们能够深入学习ESP32的更高级功能和应用。ESP32 IDF提供了丰富的文档和示例代码,读者可以进一步探索和实践,开发出更加复杂和功能丰富的项目。

相关文章:

【ESP32 IDF快速入门】点亮第一个LED灯与流水灯

文章目录 前言一、有哪些工作模式&#xff1f;1.1 GPIO的详细介绍1.2 GPIO的内部框图输入模式输出部分 二、GPIO操作函数2.1 GPIO 汇总2.2 GPIO操作函数gpio_config配置引脚reset 引脚函数设置引脚电平选中对应引脚设置引脚的方向 2.3 点亮第一个灯 三、流水灯总结 前言 ESP32…...

再见,Visual Basic——曾经风靡一时的编程语言

2020年3月&#xff0c;微软团队宣布了对Visual Basic&#xff08;VB&#xff09;的“终审判决”&#xff1a;不再进行开发或增加新功能。这意味着曾经风光无限的VB正式退出了历史舞台。 VB是微软推出的首款可视化编程软件&#xff0c;自1991年问世以来&#xff0c;便受到了广大…...

【C++精简版回顾】18.文件操作

1.文件操作头文件 2.操作文件所用到的函数 1.文件io 1.头文件 #include<fstream> 2.打开文件 &#xff08;1&#xff09;函数名 文件对象.open &#xff08;2&#xff09;函数参数 /* ios::out 可读 ios::in 可…...

【解决方案】ArcGIS Engine二次开发时,运行后出现“正尝试在 OS 加载程序锁内执行托管代码。不要尝试在 DllMain...”

我们在做ArcGIS Engine二次开发时&#xff0c;特别是新手&#xff0c;安装好了开发环境&#xff0c;满怀信心的准备将按照教程搭建好的框架在Visual Studio中进行运行。点击运行后&#xff0c;却出现了“正尝试在 OS 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化…...

新项目,Linux上一键安装MySQL,Redis,Nacos,Minio

大家好&#xff0c;我是 jonssonyan 分享一个我的一个开源项目&#xff0c;这是一个在 Linux 平台上一键安装各种软件的脚本项目&#xff0c;脚本使用 Shell 语言编写&#xff0c;后续还会增加更多软件的一键安装&#xff0c;代码在 GitHub 上全部开源的&#xff0c;开源地址如…...

Rust 从 PyTorch 到 Burn

一、性能轮盘赌 机器码相同&#xff0c;但放置在不同的地址上&#xff0c;性能可能截然不同。 作为软件开发人员&#xff0c;我们经常假设特定代码的性能仅由代码本身和运行它的硬件决定。这种假设让我们在优化代码以获得更好性能时感到有控制力。虽然在大多数情况下这种假设…...

Swin-Transformer网络代码实现

还是参考导师级别博主霹雳吧啦Wz的个人空间-霹雳吧啦Wz个人主页-哔哩哔哩视频 博主写的博客Swin-Transformer网络结构详解_swin transformer-CSDN博客 视频理论讲解12.1 Swin-Transformer网络结构详解_哔哩哔哩_bilibili pytorch实现12.2 使用Pytorch搭建Swin-Transformer网…...

Java ZooKeeper-RocketMQ 面试题

Java ZooKeeper-RocketMQ 面试题 前言1、谈谈你对ZooKeeper的理解 &#xff1f;2、Zookeeper的工作原理&#xff08;Zab协议&#xff09;3、谈谈你对分布式锁的理解&#xff0c;以及分布式锁的实现&#xff1f;4、 zookeeper 是如何保证事务的顺序一致性的&#xff1f;5、 zook…...

css制作瀑布流布局

CSS制作瀑布流布局的步骤如下&#xff1a; HTML结构&#xff1a;使用无序列表ul和列表项li来创建网格布局。 <ul class"grid"><li><img src"image1.jpg"></li><li><img src"image2.jpg"></li><li…...

Redis 的哨兵模式配置

1.配置 vim sentinel.conf# mymaster 给主机起的名字 # 192.168.205.128 主机的ip地址 # 6379 端口号 # 2 当几个哨兵发现主观宕机&#xff0c;则判定为客观宕机。 原则上是大于一半。比如三个哨兵&#xff0c;则设置为 2 sentinel monitor mymaster 192.168.205.128 63…...

基于单片机的继电器参数测试系统设计

摘要:由于原有测试系统在参数设置上过于单一,在对继电器测试过程中需要多次进行器件连接,导致对其测试准确度下降,会造成继电器的二次损伤,基于单片机研究继电器参数测试系统的设计方法。在硬件设计上,构建二级模式集散控制框架,利用单片机进行数据采集和处理,满足实时…...

unity 数学 空间四个点是否在同一个平面

问题&#xff1a;已知三维空间中四点A、B、C、D&#xff0c;如何知道四个点是否在同一个平面呢 首先我们知道三点确定一个平面&#xff0c;所以可以由上面四个点其中任意三点组成一个平面p&#xff08;A,B,C&#xff09;&#xff0c;另外一个点和三个任意点的形成线&#xff0…...

数据卷dockerfile

目录 一、数据卷 1. 简介 2. 数据卷和数据卷容器 1. 数据卷&#xff1a; 2. 数据卷容器&#xff1a; 二、自定义镜像 1. 作用 2. 自定义centos 3. 自定义tomcat8 一、数据卷 1. 简介 数据卷是一个可供一个或多个容器使用的特殊目录&#xff0c;它将主机操作系统目录直…...

AOP的介绍与使用

文章目录 AOP的概念AOP术语AOP的实现AspectJSpring AOP Spring AOP原理JDK动态代理CGLib动态代理 SpringAOP代码编写规则自定义切面自定义切点自定义通知在通知中获取当前请求代码实例 一些选择题 AOP的概念 • Aspect Oriented Programing&#xff0c;即面向方面&#xff08;…...

金融行业专题|期货超融合架构转型与场景探索合集(2023版)

更新内容&#xff1a; 更新 SmartX 超融合在期货行业的覆盖范围、部署规模与应用场景。新增 CTP 主席系统实践与评测、容器云资源池等场景实践。更多超融合金融核心生产业务场景实践&#xff0c;欢迎下载阅读电子书《SmartX 金融核心生产业务场景探索文章合集》。 面对不断变…...

08 yum和git

什么是软件包 安装软件&#xff0c;一个通常的办法就是下载程序的源代码进行编译。这种太麻烦&#xff0c;于是一些人把常用软件编译好&#xff0c;做成软件包放在服务器上&#xff0c;通过包管理器可以很方便的得到这个软件包安装&#xff0c;就好比手机上的应用商店 yum&am…...

JMeter元件和采样器一览

Apache JMeter是一个强大的开源负载测试工具&#xff0c;用于性能和功能测试。JMeter提供了丰富的元件和采样器&#xff0c;使得它能够模拟复杂的测试场景和高并发的用户请求。以下是JMeter中常用的一些元件和采样器的介绍和讲解&#xff1a; 测试计划元件 测试计划&#xff0…...

BF算法的优化之SPFA算法

介绍 全称Shortest Path Faster Algorithm. 优化思想&#xff1a; 1.由int path[maxn]定义的记录最短距离的容器&#xff0c;只有在path[i]value<path[j]时才会更新&#xff0c;它们两者的值相等时path的值仍保持不变。由此优化容器&#xff0c;选择用一个队列来替path数…...

java 基础(核心知识搭配代码)

前言 java的学习分为了上部分以及下部分进行学习&#xff0c;上部分就是对于java的基础知识&#xff0c;面向对象上&#xff0c;面向对象下&#xff0c;异常操作&#xff0c;javaApi&#xff1b;下部主要是集合&#xff0c;泛型&#xff0c;反射&#xff0c;IO流&#xff0c;J…...

ctf_show笔记篇(web入门---信息收集)

目录 信息收集 1-2&#xff1a;查看源代码 3&#xff1a;bp抓包 4&#xff1a;robots.txt&#xff08;这个文件里会写有网站管理者不想让爬虫的页面或其他&#xff09; 5&#xff1a;网站源代码泄露index.phps 6&#xff1a;同样也是源码泄露&#xff0c;&#xff08;拿到…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...

「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案

在移动互联网营销竞争白热化的当下&#xff0c;推客小程序系统凭借其裂变传播、精准营销等特性&#xff0c;成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径&#xff0c;助力开发者打造具有市场竞争力的营销工具。​ 一、系统核心功能架构&…...

LOOI机器人的技术实现解析:从手势识别到边缘检测

LOOI机器人作为一款创新的AI硬件产品&#xff0c;通过将智能手机转变为具有情感交互能力的桌面机器人&#xff0c;展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家&#xff0c;我将全面解析LOOI的技术实现架构&#xff0c;特别是其手势识别、物体识别和环境…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积

1.题目介绍 给定一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O…...