diff --git a/UserManual.md b/UserManual.md index ab3a9cf..f5a1f3b 100644 --- a/UserManual.md +++ b/UserManual.md @@ -16,7 +16,7 @@ git clone "https://github.com/rymcu/forest" - `Redis v7.x +` ### 手动搭建 MySQL 和 Redis 环境 -> 手动安装 MySQL 时,需初始化数据库。 +> 手动安装 MySQL 时,需初始化数据库, sql 文件创建的用户密码都是 admin。 在配置好 MySQL 和 Redis 的环境之后,在运行项目前,你还需要初始化好数据库中数据。通过执行 `src/main/resources/static` 目录下的 `forest.sql` 文件进行数据库初始化操作。 diff --git a/docker/dev/forest.sql b/docker/dev/forest.sql index ff72ce3..7b321eb 100644 --- a/docker/dev/forest.sql +++ b/docker/dev/forest.sql @@ -481,15 +481,15 @@ create index forest_topic_tag_id_topic_index create table forest_transaction_record ( - id bigint auto_increment comment '交易主键' + id bigint auto_increment comment '交易主键' primary key, - transaction_no varchar(32) null comment '交易流水号', - funds varchar(32) null comment '款项', - form_bank_account varchar(32) null comment '交易发起方', - to_bank_account varchar(32) null comment '交易收款方', - money decimal(32, 8) null comment '交易金额', - transaction_type char default '0' null comment '交易类型', - transaction_time datetime null comment '交易时间' + transaction_no varchar(32) null comment '交易流水号', + funds varchar(32) null comment '款项', + form_bank_account varchar(32) null comment '交易发起方', + to_bank_account varchar(32) null comment '交易收款方', + money decimal(32, 8) null comment '交易金额', + transaction_type char default '0' null comment '交易类型', + transaction_time datetime null comment '交易时间' ) comment '交易记录表 ' collate = utf8mb4_unicode_ci; create table forest_user @@ -591,7 +591,8 @@ INSERT INTO `forest`.`forest_user` (`id`, `account`, `password`, `nickname`, `re `avatar_url`, `email`, `phone`, `status`, `created_time`, `updated_time`, `last_login_time`, `signature`, `last_online_time`, `bg_img_url`) VALUES (65001, 'testUser1', '8ce2dd866238958ac4f07870766813cdaa39a9b83a8c75e26aa50f23', 'testUser', 'testUser1', '0', - '0', NULL, 'testUser@rymcu.com', NULL, '0', '2021-01-25 18:21:51', '2021-01-25 18:21:54', '2021-01-25 18:21:54', + '0', NULL, 'testUser1@rymcu.com', NULL, '0', '2021-01-25 18:21:51', '2021-01-25 18:21:54', + '2021-01-25 18:21:54', NULL, NULL, NULL); insert into forest.forest_user_role (id_user, id_role, created_time) @@ -603,11 +604,11 @@ create table forest_file md5_value varchar(40) not null comment '文件md5值', file_path varchar(255) not null comment '文件上传路径', file_url varchar(255) not null comment '网络访问路径', - created_time datetime null comment '创建时间', - updated_time datetime null comment '更新时间', - created_by int null comment '创建人', - file_size int null comment '文件大小', - file_type varchar(10) null comment '文件类型' + created_time datetime null comment '创建时间', + updated_time datetime null comment '更新时间', + created_by int null comment '创建人', + file_size int null comment '文件大小', + file_type varchar(10) null comment '文件类型' ) comment '文件上传记录表' collate = utf8mb4_unicode_ci; create index index_md5_value_created_by @@ -646,6 +647,8 @@ create table forest_product weights tinyint default 50 null comment '权重,数值越小权限越大;0:无权限', created_time datetime null comment '创建时间', updated_time datetime null comment '更新时间', + tags varchar(64) null comment '标签集合', + status tinyint default 0 not null comment '状态', constraint forest_product_id_uindex unique (id) ) @@ -662,13 +665,32 @@ create table forest_product_content comment '产品详情表'; INSERT INTO forest.forest_product (id, product_title, product_price, product_img_url, product_description, weights, - created_time, updated_time) -VALUES (1, 'Nebula Pi', 2000000, 'https://static.rymcu.com/article/1648960741563.jpg', '产品描述', 20, - '2022-06-13 22:35:33', '2022-06-13 22:35:33'); + created_time, updated_time, tags, status) +VALUES (1, 'Nebula Pi 51', 2000000, 'https://static.rymcu.com/article/1648960741563.jpg', + 'Nebula Pi 51 是社区独家设计的一款一机双芯、资源丰富的 51 单片机入门级开发板, 也是社区的第一款产品。', 20, + '2022-06-13 22:35:33', '2022-06-13 22:35:33', '51 单片机', 1); +INSERT INTO forest.forest_product (id, product_title, product_price, product_img_url, product_description, weights, + created_time, updated_time, tags, status) +VALUES (2, 'ESP32-S3-DevKitC-1', 398000, 'https://static.rymcu.com/article/1706094905846.png', + 'ESP32-S3-DevKitC-1 是社区在乐鑫官方设计方案上进行升级后推出的一款基于 ESP32-S3-WROOM-1/1U 或 ESP32-S3-WROOM-2/2U 模组的入门级开发板。', + 60, '2023-05-14 08:01:12', '2023-05-14 08:01:16', 'ESP32,ESP32S3', 1); +INSERT INTO forest.forest_product (id, product_title, product_price, product_img_url, product_description, weights, + created_time, updated_time, tags, status) +VALUES (3, 'RYDAPLink', 2000000, 'https://static.rymcu.com/article/1706081416691.png', + 'RYDAPLink 是社区独家设计的一款集 下载、调试、串口、3.3V/5V 供电、串口 ISP 功能于一身的 DAPLink 下载器。', 80, + '2024-01-24 19:28:43', '2024-01-24 19:28:43', '开源,DAPLink', 1); +INSERT INTO forest.forest_product (id, product_title, product_price, product_img_url, product_description, weights, + created_time, updated_time, tags, status) +VALUES (4, 'ESP32-DevKitC', 398000, 'https://static.rymcu.com/article/1706922435052.png', + 'ESP32-DevKitC 是社区在乐鑫官方设计方案上进行升级后推出的一款基于 ESP32 模组的入门级开发板。', 40, + '2024-02-03 09:10:49', '2024-02-03 09:10:49', '开源,ESP32', 1); +INSERT INTO forest.forest_product (id, product_title, product_price, product_img_url, product_description, weights, + created_time, updated_time, tags, status) +VALUES (5, 'ESP32-C3-DevKitM-1', 398000, 'https://static.rymcu.com/article/1706922639664.png', + 'ESP32-C3-DevKitM-1 是社区在乐鑫官方设计方案上进行升级后推出的一款基于 ESP32-C3-MINI-1 模组的入门级开发板。', 50, + '2024-02-03 09:10:49', '2024-02-03 09:10:49', 'ESP32,ESP32C3', 1); -INSERT INTO forest.forest_product_content (id_product, product_content, product_content_html, created_time, - updated_time) -VALUES (1, '![nebula pi](https://static.rymcu.com/article/1640531590770) +INSERT INTO forest.forest_product_content (id_product, product_content, product_content_html, created_time, updated_time) VALUES (1, '![nebula pi](https://static.rymcu.com/article/1640531590770) Nebula-Pi 开发板平台 @@ -827,6 +849,1275 @@ Nebula-Pi 开发板平台

表 1-1 主板元器件说明

', '2022-06-13 22:35:34', '2022-06-13 22:35:34'); +INSERT INTO forest.forest_product_content (id_product, product_content, product_content_html, created_time, updated_time) VALUES (2, 'ESP32-S3-DevKitC-1 —— 是社区在乐鑫官方设计方案上进行升级后推出的一款基于 ESP32S3 模组的入门级开发板。 + +> 获取地址: [GitHub](https://github.com/rymcu/ESP32-Open) | [Gitee](https://gitee.com/rymcu/ESP32-Open) | [RYMCU](https://rymcu.com/product/4) + +![](https://static.rymcu.com/article/1706094905846.png) + +## 功能介绍 + +ESP32-S3-DevKitC-1 开发板的主要组件、接口及控制方式见下。 + +| 主要组件 | 介绍 | +|------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| ESP32-S3-WROOM-1/1U/2 | ESP32-S3-WROOM-1、ESP32-S3-WROOM-1U 和 ESP32-S3-WROOM-2 是通用型 Wi-Fi + 低功耗蓝牙 MCU 模组,具有丰富的外设接口、强大的神经网络运算能力和信号处理能力,专为人工智能和 AIoT 市场打造。ESP32-S3-WROOM-1 和 ESP32-S3-WROOM-2 采用 PCB 板载天线,ESP32-S3-WROOM-1U 采用连接器连接外部天线。 | +| 5 V to 3.3 V LDO(5 V 转 3.3 V LDO) | 电源转换器,输入 5 V,输出 3.3 V。 | +| Pin Headers(排针) | 所有可用 GPIO 管脚(除 flash 的 SPI 总线)均已引出至开发板的排针。请查看 排针 获取更多信息。 | +| USB-to-UART Port(USB 转 UART 接口) | USB Type-C 接口,可用作开发板的供电接口,可烧录固件至芯片,也可作为通信接口,通过板载 USB 转 UART 桥接器与芯片通信。 | +| Boot Button(Boot 键) | 下载按键。按住 Boot 键的同时按一下 Reset 键进入“固件下载”模式,通过串口下载固件。 | +| Reset Button(Reset 键) | 复位按键。 | +| USB Port(USB 接口) | ESP32-S3 USB OTG 接口,支持全速 USB 1.1 标准。ESP32-S3 USB 接口可用作开发板的供电接口,可烧录固件至芯片,可通过 USB 协议与芯片通信,也可用于 JTAG 调试。 | +| USB-to-UART Bridge(USB 转 UART 桥接器) | 单芯片 USB 至 UART 桥接器,可提供高达 3 Mbps 的传输速率。 | +| RGB LED | 可寻址 RGB 发光二极管,由 GPIO38 驱动。 | +| 3.3 V Power On LED(3.3 V 电源指示灯) | 开发板连接 USB 电源后,该指示灯亮起。 | + +> 在板载 ESP32-S3-WROOM-1/1U 模组系列(使用 8 线 SPI flash/PSRAM)的开发板和板载 ESP32-S3-WROOM-2 模组系列的开发板中,管脚 GPIO35、GPIO36 和 GPIO37 已用于内部 ESP32-S3 芯片与 SPI flash/PSRAM 之间的通信,外部不可使用。 + +## 排针 + +下表列出了开发板两侧排针(J1 和 J3)的名称和功能,排针名称如图 ESP32-S3-DevKitC-1(板载 ESP32-S3-WROOM-1) 中所示。 + +### J1 + +| 序号 | 名称 | 类型 [^1] | 功能 | +|----|-----|-------|--------------------------------------------------------------------| +| 1 | 3V3 | P | 3.3 V 电源 | +| 2 | 3V3 | P | 3.3 V 电源 | +| 3 | RST | I | EN | +| 4 | 4 | I/O/T | RTC_GPIO4, GPIO4, TOUCH4, ADC1_CH3 | +| 5 | 5 | I/O/T | RTC_GPIO5, GPIO5, TOUCH5, ADC1_CH4 | +| 6 | 6 | I/O/T | RTC_GPIO6, GPIO6, TOUCH6, ADC1_CH5 | +| 7 | 7 | I/O/T | RTC_GPIO7, GPIO7, TOUCH7, ADC1_CH6 | +| 8 | 15 | I/O/T | RTC_GPIO15, GPIO15, U0RTS, ADC2_CH4, XTAL_32K_P | +| 9 | 16 | I/O/T | RTC_GPIO16, GPIO16, U0CTS, ADC2_CH5, XTAL_32K_N | +| 10 | 17 | I/O/T | RTC_GPIO17, GPIO17, U1TXD, ADC2_CH6 | +| 11 | 18 | I/O/T | RTC_GPIO18, GPIO18, U1RXD, ADC2_CH7, CLK_OUT3 | +| 12 | 8 | I/O/T | RTC_GPIO8, GPIO8, TOUCH8, ADC1_CH7, SUBSPICS1 | +| 13 | 3 | I/O/T | RTC_GPIO3, GPIO3, TOUCH3, ADC1_CH2 | +| 14 | 46 | I/O/T | GPIO46 | +| 15 | 9 | I/O/T | RTC_GPIO9, GPIO9, TOUCH9, ADC1_CH8, FSPIHD, SUBSPIHD | +| 16 | 10 | I/O/T | RTC_GPIO10, GPIO10, TOUCH10, ADC1_CH9, FSPICS0, FSPIIO4, SUBSPICS0 | +| 17 | 11 | I/O/T | RTC_GPIO11, GPIO11, TOUCH11, ADC2_CH0, FSPID, FSPIIO5, SUBSPID | +| 18 | 12 | I/O/T | RTC_GPIO12, GPIO12, TOUCH12, ADC2_CH1, FSPICLK, FSPIIO6, SUBSPICLK | +| 19 | 13 | I/O/T | RTC_GPIO13, GPIO13, TOUCH13, ADC2_CH2, FSPIQ, FSPIIO7, SUBSPIQ | +| 20 | 14 | I/O/T | RTC_GPIO14, GPIO14, TOUCH14, ADC2_CH3, FSPIWP, FSPIDQS, SUBSPIWP | +| 21 | 5V | P | 5 V 电源 | +| 22 | G | G | 接地 | + +### J3 + +| 序号 | 名称 | 类型 | 功能 | +|----|----|-------|-------------------------------------------------------| +| 1 | G | G | 接地 | +| 2 | TX | I/O/T | U0TXD, GPIO43, CLK_OUT1 | +| 3 | RX | I/O/T | U0RXD, GPIO44, CLK_OUT2 | +| 4 | 1 | I/O/T | RTC_GPIO1, GPIO1, TOUCH1, ADC1_CH0 | +| 5 | 2 | I/O/T | RTC_GPIO2, GPIO2, TOUCH2, ADC1_CH1 | +| 6 | 42 | I/O/T | MTMS, GPIO42 | +| 7 | 41 | I/O/T | MTDI, GPIO41, CLK_OUT1 | +| 8 | 40 | I/O/T | MTDO, GPIO40, CLK_OUT2 | +| 9 | 39 | I/O/T | MTCK, GPIO39, CLK_OUT3, SUBSPICS1 | +| 10 | 38 | I/O/T | GPIO38, FSPIWP, SUBSPIWP, RGB LED | +| 11 | 37 | I/O/T | SPIDQS, GPIO37, FSPIQ, SUBSPIQ | +| 12 | 36 | I/O/T | SPIIO7, GPIO36, FSPICLK, SUBSPICLK | +| 13 | 35 | I/O/T | SPIIO6, GPIO35, FSPID, SUBSPID | +| 14 | 0 | I/O/T | RTC_GPIO0, GPIO0 | +| 15 | 45 | I/O/T | GPIO45 | +| 16 | 48 | I/O/T | GPIO48, SPICLK_N, SUBSPICLK_N_DIFF | +| 17 | 47 | I/O/T | GPIO47, SPICLK_P, SUBSPICLK_P_DIFF | +| 18 | 21 | I/O/T | RTC_GPIO21, GPIO21 | +| 19 | 20 | I/O/T | RTC_GPIO20, GPIO20, U1CTS, ADC2_CH9, CLK_OUT1, USB_D+ | +| 20 | 19 | I/O/T | RTC_GPIO19, GPIO19, U1RTS, ADC2_CH8, CLK_OUT2, USB_D- | +| 21 | G | G | 接地 | +| 22 | G | G | 接地 | + +## 管脚布局 + +![ESP32S3DevKitC1pinlayoutv1.1.jpg](https://static.rymcu.com/article/1708056462709.jpg) + +## 相关文档 + +- [电路原理图](https://static.rymcu.com/article/1686045860275.pdf) + +[^1]: P:电源;I:输入;O:输出;T:可设置为高阻。 + +', '

ESP32-S3-DevKitC-1 —— 是社区在乐鑫官方设计方案上进行升级后推出的一款基于 ESP32S3 模组的入门级开发板。

+
+

获取地址: GitHub | Gitee | RYMCU

+
+

+

功能介绍

+

ESP32-S3-DevKitC-1 开发板的主要组件、接口及控制方式见下。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
主要组件介绍
ESP32-S3-WROOM-1/1U/2ESP32-S3-WROOM-1、ESP32-S3-WROOM-1U 和 ESP32-S3-WROOM-2 是通用型 Wi-Fi + 低功耗蓝牙 MCU 模组,具有丰富的外设接口、强大的神经网络运算能力和信号处理能力,专为人工智能和 AIoT 市场打造。ESP32-S3-WROOM-1 和 ESP32-S3-WROOM-2 采用 PCB 板载天线,ESP32-S3-WROOM-1U 采用连接器连接外部天线。
5 V to 3.3 V LDO(5 V 转 3.3 V LDO)电源转换器,输入 5 V,输出 3.3 V。
Pin Headers(排针)所有可用 GPIO 管脚(除 flash 的 SPI 总线)均已引出至开发板的排针。请查看 排针 获取更多信息。
USB-to-UART Port(USB 转 UART 接口)USB Type-C 接口,可用作开发板的供电接口,可烧录固件至芯片,也可作为通信接口,通过板载 USB 转 UART 桥接器与芯片通信。
Boot Button(Boot 键)下载按键。按住 Boot 键的同时按一下 Reset 键进入“固件下载”模式,通过串口下载固件。
Reset Button(Reset 键)复位按键。
USB Port(USB 接口)ESP32-S3 USB OTG 接口,支持全速 USB 1.1 标准。ESP32-S3 USB 接口可用作开发板的供电接口,可烧录固件至芯片,可通过 USB 协议与芯片通信,也可用于 JTAG 调试。
USB-to-UART Bridge(USB 转 UART 桥接器)单芯片 USB 至 UART 桥接器,可提供高达 3 Mbps 的传输速率。
RGB LED可寻址 RGB 发光二极管,由 GPIO38 驱动。
3.3 V Power On LED(3.3 V 电源指示灯)开发板连接 USB 电源后,该指示灯亮起。
+
+

在板载 ESP32-S3-WROOM-1/1U 模组系列(使用 8 线 SPI flash/PSRAM)的开发板和板载 ESP32-S3-WROOM-2 模组系列的开发板中,管脚 GPIO35、GPIO36 和 GPIO37 已用于内部 ESP32-S3 芯片与 SPI flash/PSRAM 之间的通信,外部不可使用。

+
+

排针

+

下表列出了开发板两侧排针(J1 和 J3)的名称和功能,排针名称如图 ESP32-S3-DevKitC-1(板载 ESP32-S3-WROOM-1) 中所示。

+

J1

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
序号名称类型 1功能
13V3P3.3 V 电源
23V3P3.3 V 电源
3RSTIEN
44I/O/TRTC_GPIO4, GPIO4, TOUCH4, ADC1_CH3
55I/O/TRTC_GPIO5, GPIO5, TOUCH5, ADC1_CH4
66I/O/TRTC_GPIO6, GPIO6, TOUCH6, ADC1_CH5
77I/O/TRTC_GPIO7, GPIO7, TOUCH7, ADC1_CH6
815I/O/TRTC_GPIO15, GPIO15, U0RTS, ADC2_CH4, XTAL_32K_P
916I/O/TRTC_GPIO16, GPIO16, U0CTS, ADC2_CH5, XTAL_32K_N
1017I/O/TRTC_GPIO17, GPIO17, U1TXD, ADC2_CH6
1118I/O/TRTC_GPIO18, GPIO18, U1RXD, ADC2_CH7, CLK_OUT3
128I/O/TRTC_GPIO8, GPIO8, TOUCH8, ADC1_CH7, SUBSPICS1
133I/O/TRTC_GPIO3, GPIO3, TOUCH3, ADC1_CH2
1446I/O/TGPIO46
159I/O/TRTC_GPIO9, GPIO9, TOUCH9, ADC1_CH8, FSPIHD, SUBSPIHD
1610I/O/TRTC_GPIO10, GPIO10, TOUCH10, ADC1_CH9, FSPICS0, FSPIIO4, SUBSPICS0
1711I/O/TRTC_GPIO11, GPIO11, TOUCH11, ADC2_CH0, FSPID, FSPIIO5, SUBSPID
1812I/O/TRTC_GPIO12, GPIO12, TOUCH12, ADC2_CH1, FSPICLK, FSPIIO6, SUBSPICLK
1913I/O/TRTC_GPIO13, GPIO13, TOUCH13, ADC2_CH2, FSPIQ, FSPIIO7, SUBSPIQ
2014I/O/TRTC_GPIO14, GPIO14, TOUCH14, ADC2_CH3, FSPIWP, FSPIDQS, SUBSPIWP
215VP5 V 电源
22GG接地
+

J3

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
序号名称类型功能
1GG接地
2TXI/O/TU0TXD, GPIO43, CLK_OUT1
3RXI/O/TU0RXD, GPIO44, CLK_OUT2
41I/O/TRTC_GPIO1, GPIO1, TOUCH1, ADC1_CH0
52I/O/TRTC_GPIO2, GPIO2, TOUCH2, ADC1_CH1
642I/O/TMTMS, GPIO42
741I/O/TMTDI, GPIO41, CLK_OUT1
840I/O/TMTDO, GPIO40, CLK_OUT2
939I/O/TMTCK, GPIO39, CLK_OUT3, SUBSPICS1
1038I/O/TGPIO38, FSPIWP, SUBSPIWP, RGB LED
1137I/O/TSPIDQS, GPIO37, FSPIQ, SUBSPIQ
1236I/O/TSPIIO7, GPIO36, FSPICLK, SUBSPICLK
1335I/O/TSPIIO6, GPIO35, FSPID, SUBSPID
140I/O/TRTC_GPIO0, GPIO0
1545I/O/TGPIO45
1648I/O/TGPIO48, SPICLK_N, SUBSPICLK_N_DIFF
1747I/O/TGPIO47, SPICLK_P, SUBSPICLK_P_DIFF
1821I/O/TRTC_GPIO21, GPIO21
1920I/O/TRTC_GPIO20, GPIO20, U1CTS, ADC2_CH9, CLK_OUT1, USB_D+
2019I/O/TRTC_GPIO19, GPIO19, U1RTS, ADC2_CH8, CLK_OUT2, USB_D-
21GG接地
22GG接地
+

管脚布局

+

ESP32S3DevKitC1pinlayoutv1.1.jpg

+

相关文档

+ +

+
  1. P:电源;I:输入;O:输出;T:可设置为高阻。

    +
  2. +
', '2023-05-14 08:14:23', '2023-05-14 08:14:27'); +INSERT INTO forest.forest_product_content (id_product, product_content, product_content_html, created_time, updated_time) VALUES (3, 'RYDAPLink —— 集`下载`、`调试`、`串口`、`3.3V/5V 供电`、`串口 ISP` 功能于一身的 DAPLink 下载器, 由 RYMCU 社区 ( https://rymcu.com ) 倾情打造。 + +> 获取地址: [GitHub](https://github.com/rymcu/RYDAPLink) | [Gitee](https://gitee.com/rymcu/RYDAPLink) | [RYMCU](https://rymcu.com/article/21) + +## 背景 + +在开发 STM32 等基于 ARM 内核的单片机时,几乎所有人都会遇到同一个问题。[那就是选择一款什么样的下载调试器呢?](https://rymcu.com/article/22) 市面上有各式各样的下载调试器可供我们选择,我觉得选择一款最合适自己的,才是重要的。常用的下载器包括 J-Link ,ST-Link ,J-Link0B ,CMSIS-DAP ,DAPLink 等。 + +当接触到 DAPLink 这个方案后,我们根据官方开源的原理图,设计了一版下载调试并且开始了一段时间的试用。实物非常的小巧,尺寸为:50mm x 50mm ,实物长下面这样了。 + +![RYDAPLink.png](https://static.rymcu.com/article/1706081416691.png) + +同时,我们在源码的基础上进行了一些改进,实现了串口 ISP 功能。另外,原来方案的基础上,增加了板载自恢复保险丝,保证即使短路也不会烧坏主板,这样心里踏实多了。项目经过了长时间的使用测试,固件非常稳定。五合一功能:下载、调试、串口、3.3V/5V 供电,串口 ISP 。 + +本文基于 ARMmebed 官方开源代码打造了一款 DAPLink 下载调试器,并做了些许改进,无论初学与否,跟随下面教程,你也可以打造属于你自己的 DAPLink! + +## RYDAPLink 项目简介 + +### 功能介绍 + +这是一款 ARM 官方开源的仿真器,可以实现全系列 Cortex-M0/M3/M4/M7 内核芯片的程序下载和调试。特性如下: + +* 官方开源,无版权限制,稳定不丢失固件 +* SWD 接口,全系列 Cortex-M0/M3/M4/M7 下载和调试( HID ) +* 自带 USB 虚拟串口,方便程序调试( CDC ) +* 拖拽下载功能,模拟 U 盘,将 Hex 或 bin 格式文件拖拽或拷贝至 U 盘完成下载(MSC) +* 串口下载程序,改进官方程序实现(串口 ISP ) +* 输出 5.0V 电源,可供电目标电路 +* 输出 3.3V 电源,可供电目标器件 +* 板载自恢复保险丝,短路自保护 +* Win10 即插即用,无需驱动 + +', '

RYDAPLink —— 集 下载调试串口3.3V/5V 供电串口 ISP 功能于一身的 DAPLink 下载器, 由 RYMCU 社区 ( https://rymcu.com ) 倾情打造。

+
+

获取地址: GitHub | Gitee | RYMCU

+
+

背景

+

在开发 STM32 等基于 ARM 内核的单片机时,几乎所有人都会遇到同一个问题。那就是选择一款什么样的下载调试器呢? 市面上有各式各样的下载调试器可供我们选择,我觉得选择一款最合适自己的,才是重要的。常用的下载器包括 J-Link ,ST-Link ,J-Link0B ,CMSIS-DAP ,DAPLink 等。

+

当接触到 DAPLink 这个方案后,我们根据官方开源的原理图,设计了一版下载调试并且开始了一段时间的试用。实物非常的小巧,尺寸为:50mm x 50mm ,实物长下面这样了。

+

RYDAPLink.png

+

同时,我们在源码的基础上进行了一些改进,实现了串口 ISP 功能。另外,原来方案的基础上,增加了板载自恢复保险丝,保证即使短路也不会烧坏主板,这样心里踏实多了。项目经过了长时间的使用测试,固件非常稳定。五合一功能:下载、调试、串口、3.3V/5V 供电,串口 ISP 。

+

本文基于 ARMmebed 官方开源代码打造了一款 DAPLink 下载调试器,并做了些许改进,无论初学与否,跟随下面教程,你也可以打造属于你自己的 DAPLink!

+ +

功能介绍

+

这是一款 ARM 官方开源的仿真器,可以实现全系列 Cortex-M0/M3/M4/M7 内核芯片的程序下载和调试。特性如下:

+ +', '2024-01-24 19:31:43', '2024-01-24 19:31:46'); +INSERT INTO forest.forest_product_content (id_product, product_content, product_content_html, created_time, updated_time) VALUES (4, 'ESP32-DevKitC —— 是社区在乐鑫官方设计方案上进行升级后推出的一款基于 ESP32 模组的入门级开发板。 + +> 获取地址: [GitHub](https://github.com/rymcu/ESP32-Open) | [Gitee](https://gitee.com/rymcu/ESP32-Open) | [RYMCU](https://rymcu.com/product/4/#相关文档) + +![](https://static.rymcu.com/article/1706922435052.png) + +## 功能介绍 + +ESP32-DevKitC V4 开发板的主要组件、接口及控制方式见下。 + +| 主要组件 | 基本介绍 | +|-----------------|---------------------------------------------------------------------------| +| ESP32-WROOM-32 | 基于 ESP32 的模组。更多详情,请见 [《ESP32-WROOM-32 技术规格书》](https://espressif.com/sites/default/files/documentation/esp32-wroom-32_datasheet_cn.pdf)。 | +| EN | 复位按键。 | +| Boot | 下载按键。按下 Boot 键并保持,同时按一下 EN 键(此时不要松开 Boot 键)进入“固件下载”模式,通过串口下载固件。 | +| USB-to-UART 桥接器 | 单芯片 USB-UART 桥接器,可提供高达 3 Mbps 的传输速率。 | +| USB Type-C 接口 | USB 接口,可用作电路板的供电电源,或连接 PC 和 ESP32-WROOM-32 模组的通信接口。 | +| 5V Power On LED | 开发板通电后(USB 或外部 5 V),该指示灯将亮起。更多信息,请见 相关文档 中的原理图。 | +| I/O | 板上模组的绝大部分管脚均已引出至开发板的排针。用户可以对 ESP32 进行编程,实现 PWM、ADC、DAC、I2C、I2S、SPI 等多种功能。 | + +## 排针 + +下表列出了开发板两侧排针(J1 和 J3)的名称和功能,排针名称如图 ESP32-DevKitC V4(板载 ESP32-WROOM-32) 中所示。 + +### J1 + +| 编号 | 名称 | 类型[^1] | 功能 | +|----|------|--------|-----------------------------------------| +| 1 | 3V3 | P | 3.3 V 电源 | +| 2 | EN | I | CHIP_PU, Reset | +| 3 | VP | I | GPIO36, ADC1_CH0, S_VP | +| 4 | VN | I | GPIO39, ADC1_CH3, S_VN | +| 5 | IO34 | I | GPIO34, ADC1_CH6, VDET_1 | +| 6 | IO35 | I | GPIO35, ADC1_CH7, VDET_2 | +| 7 | IO32 | I/O | GPIO32, ADC1_CH4, TOUCH_CH9, XTAL_32K_P | +| 8 | IO33 | I/O | GPIO33, ADC1_CH5, TOUCH_CH8, XTAL_32K_N | +| 9 | IO25 | I/O | GPIO25, ADC1_CH8, DAC_1 | +| 10 | IO26 | I/O | GPIO26, ADC2_CH9, DAC_2 | +| 11 | IO27 | I/O | GPIO27, ADC2_CH7, TOUCH_CH7 | +| 12 | IO14 | I/O | GPIO14, ADC2_CH6, TOUCH_CH6, MTMS | +| 13 | IO12 | I/O | GPIO12, ADC2_CH5, TOUCH_CH5, MTDI | +| 14 | GND | G | 接地 | +| 15 | IO13 | I/O | GPIO13, ADC2_CH4, TOUCH_CH4, MTCK | +| 16 | D2 | I/O | GPIO9, D2 [^2] | +| 17 | D3 | I/O | GPIO10, D3 [^2] | +| 18 | CMD | I/O | GPIO11, CMD [^2] | +| 19 | 5V | P | 5 V 电源 | + +### J3 + +| 编号 | 名称 | 类型 [^1] | 功能 | +|----|------|---------|-----------------------------------| +| 1 | GND | G | 接地 | +| 2 | IO23 | I/O | GPIO23 | +| 3 | IO22 | I/O | GPIO22 | +| 4 | TX | I/O | GPIO1, U0TXD | +| 5 | RX | I/O | GPIO3, U0RXD | +| 6 | IO21 | I/O | GPIO21 | +| 7 | GND | G | 接地 | +| 8 | IO19 | I/O | GPIO19 | +| 9 | IO18 | I/O | GPIO18 | +| 10 | IO5 | I/O | GPIO5 | +| 11 | IO17 | I/O | GPIO17 [^3] | +| 12 | IO16 | I/O | GPIO16 [^3] | +| 13 | IO4 | I/O | GPIO4, ADC2_CH0, TOUCH_CH0 | +| 14 | IO0 | I/O | GPIO0, ADC2_CH1, TOUCH_CH1, Boot | +| 15 | IO2 | I/O | GPIO2, ADC2_CH2, TOUCH_CH2 | +| 16 | IO15 | I/O | GPIO15, ADC2_CH3, TOUCH_CH3, MTDO | +| 17 | D1 | I/O | GPIO8, D1 [^2] | +| 18 | D0 | I/O | GPIO7, D0 [^2] | +| 19 | CLK | I/O | GPIO6, CLK [^2] | + +[^1]: P:电源;I:输入;O:输出。 + +[^2]: 管脚 D0、D1、D2、D3、CMD 和 CLK 用于 ESP32 芯片与 SPI flash 间的内部通信,集中分布在开发板两侧靠近 USB 端口的位置。通常而言,这些管脚最好不连,否则可能影响 SPI flash/SPI RAM 的工作。 + +[^3]: 管脚 GPIO16 和 GPIO17 仅适用于板载 ESP32-WROOM 系列和 ESP32-SOLO-1 的开发板,板载 ESP32-WROVER 系列开发板的管脚 GPIO16 和 GPIO17 保留内部使用。 + +## 管脚布局 + +![](https://static.rymcu.com/article/1706927881092.png) + +## 相关文档 + +- [电路原理图](https://static.rymcu.com/article/1686043415890.pdf) +- [PCB 源文件](https://static.rymcu.com/article/1691599744950.epro) + + +', '

ESP32-DevKitC —— 是社区在乐鑫官方设计方案上进行升级后推出的一款基于 ESP32 模组的入门级开发板。

+
+

获取地址: GitHub | Gitee | RYMCU

+
+

+

功能介绍

+

ESP32-DevKitC V4 开发板的主要组件、接口及控制方式见下。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
主要组件基本介绍
ESP32-WROOM-32基于 ESP32 的模组。更多详情,请见 《ESP32-WROOM-32 技术规格书》
EN复位按键。
Boot下载按键。按下 Boot 键并保持,同时按一下 EN 键(此时不要松开 Boot 键)进入“固件下载”模式,通过串口下载固件。
USB-to-UART 桥接器单芯片 USB-UART 桥接器,可提供高达 3 Mbps 的传输速率。
USB Type-C 接口USB 接口,可用作电路板的供电电源,或连接 PC 和 ESP32-WROOM-32 模组的通信接口。
5V Power On LED开发板通电后(USB 或外部 5 V),该指示灯将亮起。更多信息,请见 相关文档 中的原理图。
I/O板上模组的绝大部分管脚均已引出至开发板的排针。用户可以对 ESP32 进行编程,实现 PWM、ADC、DAC、I2C、I2S、SPI 等多种功能。
+

排针

+

下表列出了开发板两侧排针(J1 和 J3)的名称和功能,排针名称如图 ESP32-DevKitC V4(板载 ESP32-WROOM-32) 中所示。

+

J1

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
编号名称类型1功能
13V3P3.3 V 电源
2ENICHIP_PU, Reset
3VPIGPIO36, ADC1_CH0, S_VP
4VNIGPIO39, ADC1_CH3, S_VN
5IO34IGPIO34, ADC1_CH6, VDET_1
6IO35IGPIO35, ADC1_CH7, VDET_2
7IO32I/OGPIO32, ADC1_CH4, TOUCH_CH9, XTAL_32K_P
8IO33I/OGPIO33, ADC1_CH5, TOUCH_CH8, XTAL_32K_N
9IO25I/OGPIO25, ADC1_CH8, DAC_1
10IO26I/OGPIO26, ADC2_CH9, DAC_2
11IO27I/OGPIO27, ADC2_CH7, TOUCH_CH7
12IO14I/OGPIO14, ADC2_CH6, TOUCH_CH6, MTMS
13IO12I/OGPIO12, ADC2_CH5, TOUCH_CH5, MTDI
14GNDG接地
15IO13I/OGPIO13, ADC2_CH4, TOUCH_CH4, MTCK
16D2I/OGPIO9, D2 2
17D3I/OGPIO10, D3 2
18CMDI/OGPIO11, CMD 2
195VP5 V 电源
+

J3

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
编号名称类型 1功能
1GNDG接地
2IO23I/OGPIO23
3IO22I/OGPIO22
4TXI/OGPIO1, U0TXD
5RXI/OGPIO3, U0RXD
6IO21I/OGPIO21
7GNDG接地
8IO19I/OGPIO19
9IO18I/OGPIO18
10IO5I/OGPIO5
11IO17I/OGPIO17 3
12IO16I/OGPIO16 3
13IO4I/OGPIO4, ADC2_CH0, TOUCH_CH0
14IO0I/OGPIO0, ADC2_CH1, TOUCH_CH1, Boot
15IO2I/OGPIO2, ADC2_CH2, TOUCH_CH2
16IO15I/OGPIO15, ADC2_CH3, TOUCH_CH3, MTDO
17D1I/OGPIO8, D1 2
18D0I/OGPIO7, D0 2
19CLKI/OGPIO6, CLK 2
+

管脚布局

+

+

相关文档

+ +

+
  1. P:电源;I:输入;O:输出。

    +
  2. +
  3. 管脚 D0、D1、D2、D3、CMD 和 CLK 用于 ESP32 芯片与 SPI flash 间的内部通信,集中分布在开发板两侧靠近 USB 端口的位置。通常而言,这些管脚最好不连,否则可能影响 SPI flash/SPI RAM 的工作。

    +
  4. +
  5. 管脚 GPIO16 和 GPIO17 仅适用于板载 ESP32-WROOM 系列和 ESP32-SOLO-1 的开发板,板载 ESP32-WROVER 系列开发板的管脚 GPIO16 和 GPIO17 保留内部使用。

    +
  6. +
', '2024-02-03 10:43:43', '2024-02-03 10:43:45'); +INSERT INTO forest.forest_product_content (id_product, product_content, product_content_html, created_time, updated_time) VALUES (5, 'ESP32-C3-DevKitM-1 —— 是社区在乐鑫官方设计方案上进行升级后推出的一款基于 ESP32C3 模组的入门级开发板。 + +> 获取地址: [GitHub](https://github.com/rymcu/ESP32-Open) | [Gitee](https://gitee.com/rymcu/ESP32-Open) | [RYMCU](https://rymcu.com/product/4) + +![](https://static.rymcu.com/article/1706922639664.png) + +## 功能介绍 + +ESP32-C3-DevKitM-1 开发板的主要组件、接口及控制方式见下。 + +| 主要组件 | 介绍 | +|------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------| +| ESP32-C3-MINI-1 | ESP32-C3-MINI-1 是一款通用型 Wi-Fi 和低功耗蓝牙双模模组,采用 PCB 板载天线。该款模组集成配置 4 MB 嵌入式 flash 的 ESP32-C3FN4 芯片。由于 flash 直接封装在芯片中,ESP32-C3-MINI-1 模组具有更小的封装尺寸。 | +| 5 V to 3.3 V LDO(5 V 转 3.3 V LDO) | 电源转换器,输入 5 V,输出 3.3 V。 | +| 5 V Power On LED(5 V 电源指示灯) | 开发板连接 USB 电源后,该指示灯亮起。 | +| Pin Headers(排针) | 所有可用 GPIO 管脚(除 flash 的 SPI 总线)均已引出至开发板的排针。请查看 排针 获取更多信息。 | +| Boot Button(Boot 键) | 下载按键。按住 Boot 键的同时按一下 Reset 键进入“固件下载”模式,通过串口下载固件。 | +| Micro-USB Port(Micro-USB 接口) | USB 接口。可用作开发板的供电电源或 PC 和 ESP32-C3FN4 芯片的通信接口。 | +| Reset Button(Reset 键) | 复位按键。 | +| USB-to-UART Bridge(USB 至 UART 桥接器) | 单芯片 USB 至 UART 桥接器,可提供高达 3 Mbps 的传输速率。 | +| RGB LED | 可寻址 RGB 发光二极管,由 GPIO8 驱动。 | + +## 排针 + +下表列出了开发板两侧排针(J1 和 J3)的名称和功能,排针名称如图 ESP32-C3-DevKitM-1 中所示。 + +### J1 + +| 序号 | 名称 | 类型 [^1] | 功能 | +|----|------|-------|-----------------------------| +| 1 | GND | G | 接地 | +| 2 | 3V3 | P | 3.3 V 电源 | +| 3 | 3V3 | P | 3.3 V 电源 | +| 4 | IO2 | I/O/T | GPIO2 2 , ADC1_CH2, FSPIQ | +| 5 | IO3 | I/O/T | GPIO3, ADC1_CH3 | +| 6 | GND | G | 接地 | +| 7 | RST | I | CHIP_PU | +| 8 | GND | G | 接地 | +| 9 | IO0 | I/O/T | GPIO0, ADC1_CH0, XTAL_32K_P | +| 10 | IO1 | I/O/T | GPIO1, ADC1_CH1, XTAL_32K_N | +| 11 | IO10 | I/O/T | GPIO10, FSPICS0 | +| 12 | GND | G | 接地 | +| 13 | 5V | P | 5 V 电源 | +| 14 | 5V | P | 5 V 电源 | +| 15 | GND | G | 接地 | + +### J3 + +| 序号 | 名称 | 类型 [^1] | 功能 | +|----|------|-------|-------------------------------| +| 1 | GND | G | 接地 | +| 2 | TX | I/O/T | GPIO21, U0TXD | +| 3 | RX | I/O/T | GPIO20, U0RXD | +| 4 | GND | G | 接地 | +| 5 | IO9 | I/O/T | GPIO9 [^2] | +| 6 | IO8 | I/O/T | GPIO8 [^2], RGB LED | +| 7 | GND | G | 接地 | +| 8 | IO7 | I/O/T | GPIO7, FSPID, MTDO | +| 9 | IO6 | I/O/T | GPIO6, FSPICLK, MTCK | +| 10 | IO5 | I/O/T | GPIO5, ADC2_CH0, FSPIWP, MTDI | +| 11 | IO4 | I/O/T | GPIO4, ADC1_CH4, FSPIHD, MTMS | +| 12 | GND | G | 接地 | +| 13 | IO18 | I/O/T | GPIO18 | +| 14 | IO19 | I/O/T | GPIO19 | +| 15 | GND | G | 接地 | + +## 管脚布局 + +![esp32c3devkitm1v1pinout.png](https://static.rymcu.com/article/1708083360388.png) + +## 相关文档 + +- [电路原理图](https://static.rymcu.com/article/1686045790604.pdf) + +[^1]: P:电源;I:输入;O:输出;T:可设置为高阻。 + +[^2]: GPIO2、GPIO8、GPIO9 为 ESP32-C3FN4 芯片的 Strapping 管脚。在芯片上电和系统复位过程中,Strapping 管脚根据管脚的二进制电压值控制芯片功能。Strapping 管脚的具体描述和应用,请参考 [ESP32-C3 技术规格书](https://www.espressif.com/sites/default/files/documentation/esp32-c3_datasheet_cn.pdf) 的 Strapping 管脚章节。 + +', '

ESP32-C3-DevKitM-1 —— 是社区在乐鑫官方设计方案上进行升级后推出的一款基于 ESP32C3 模组的入门级开发板。

+
+

获取地址: GitHub | Gitee | RYMCU

+
+

+

功能介绍

+

ESP32-C3-DevKitM-1 开发板的主要组件、接口及控制方式见下。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
主要组件介绍
ESP32-C3-MINI-1ESP32-C3-MINI-1 是一款通用型 Wi-Fi 和低功耗蓝牙双模模组,采用 PCB 板载天线。该款模组集成配置 4 MB 嵌入式 flash 的 ESP32-C3FN4 芯片。由于 flash 直接封装在芯片中,ESP32-C3-MINI-1 模组具有更小的封装尺寸。
5 V to 3.3 V LDO(5 V 转 3.3 V LDO)电源转换器,输入 5 V,输出 3.3 V。
5 V Power On LED(5 V 电源指示灯)开发板连接 USB 电源后,该指示灯亮起。
Pin Headers(排针)所有可用 GPIO 管脚(除 flash 的 SPI 总线)均已引出至开发板的排针。请查看 排针 获取更多信息。
Boot Button(Boot 键)下载按键。按住 Boot 键的同时按一下 Reset 键进入“固件下载”模式,通过串口下载固件。
Micro-USB Port(Micro-USB 接口)USB 接口。可用作开发板的供电电源或 PC 和 ESP32-C3FN4 芯片的通信接口。
Reset Button(Reset 键)复位按键。
USB-to-UART Bridge(USB 至 UART 桥接器)单芯片 USB 至 UART 桥接器,可提供高达 3 Mbps 的传输速率。
RGB LED可寻址 RGB 发光二极管,由 GPIO8 驱动。
+

排针

+

下表列出了开发板两侧排针(J1 和 J3)的名称和功能,排针名称如图 ESP32-C3-DevKitM-1 中所示。

+

J1

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
序号名称类型 1功能
1GNDG接地
23V3P3.3 V 电源
33V3P3.3 V 电源
4IO2I/O/TGPIO2 2 , ADC1_CH2, FSPIQ
5IO3I/O/TGPIO3, ADC1_CH3
6GNDG接地
7RSTICHIP_PU
8GNDG接地
9IO0I/O/TGPIO0, ADC1_CH0, XTAL_32K_P
10IO1I/O/TGPIO1, ADC1_CH1, XTAL_32K_N
11IO10I/O/TGPIO10, FSPICS0
12GNDG接地
135VP5 V 电源
145VP5 V 电源
15GNDG接地
+

J3

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
序号名称类型 1功能
1GNDG接地
2TXI/O/TGPIO21, U0TXD
3RXI/O/TGPIO20, U0RXD
4GNDG接地
5IO9I/O/TGPIO9 2
6IO8I/O/TGPIO8 2, RGB LED
7GNDG接地
8IO7I/O/TGPIO7, FSPID, MTDO
9IO6I/O/TGPIO6, FSPICLK, MTCK
10IO5I/O/TGPIO5, ADC2_CH0, FSPIWP, MTDI
11IO4I/O/TGPIO4, ADC1_CH4, FSPIHD, MTMS
12GNDG接地
13IO18I/O/TGPIO18
14IO19I/O/TGPIO19
15GNDG接地
+

管脚布局

+

esp32c3devkitm1v1pinout.png

+

相关文档

+ +

+
  1. P:电源;I:输入;O:输出;T:可设置为高阻。

    +
  2. +
  3. GPIO2、GPIO8、GPIO9 为 ESP32-C3FN4 芯片的 Strapping 管脚。在芯片上电和系统复位过程中,Strapping 管脚根据管脚的二进制电压值控制芯片功能。Strapping 管脚的具体描述和应用,请参考 ESP32-C3 技术规格书 的 Strapping 管脚章节。

    +
  4. +
', '2024-02-03 10:54:25', '2024-02-03 10:54:27'); + + INSERT INTO forest.forest_bank (id, bank_name, bank_owner, bank_description, created_by, created_time) VALUES (1, '社区中央银行', 1, '社区中央银行', 1, '2020-11-26 21:24:19'); diff --git a/src/main/java/com/rymcu/forest/enumerate/FileDataType.java b/src/main/java/com/rymcu/forest/enumerate/FileDataType.java new file mode 100644 index 0000000..1d9c342 --- /dev/null +++ b/src/main/java/com/rymcu/forest/enumerate/FileDataType.java @@ -0,0 +1,14 @@ +package com.rymcu.forest.enumerate; + +/** + * Created on 2024/3/6 10:07. + * + * @author ronger + * @email ronger-x@outlook.com + * @desc : com.rymcu.forest.enumerate + */ +public class FileDataType { + public final static String URL = "0"; + public final static String BASE64 = "1"; + +} diff --git a/src/main/java/com/rymcu/forest/enumerate/FilePath.java b/src/main/java/com/rymcu/forest/enumerate/FilePath.java new file mode 100644 index 0000000..b924bc3 --- /dev/null +++ b/src/main/java/com/rymcu/forest/enumerate/FilePath.java @@ -0,0 +1,38 @@ +package com.rymcu.forest.enumerate; + +import java.util.Arrays; + +/** + * Created on 2024/3/6 10:51. + * + * @author ronger + * @email ronger-x@outlook.com + * @desc : com.rymcu.forest.enumerate + */ +public enum FilePath { + AVATAR, + ARTICLE, + TAG, + TOPIC, + PORTFOLIO, + PRODUCT, + IMAGES; + + public static FilePath getFilePath(int type) { + for (FilePath filePath : FilePath.values()) { + if (filePath.ordinal() == type) { + return filePath; + } + } + return FilePath.IMAGES; + } + + public static String getPath(int type) { + for (FilePath filePath : FilePath.values()) { + if (filePath.ordinal() == type) { + return filePath.name().toLowerCase(); + } + } + return FilePath.IMAGES.name().toLowerCase(); + } +} diff --git a/src/main/java/com/rymcu/forest/service/impl/PortfolioServiceImpl.java b/src/main/java/com/rymcu/forest/service/impl/PortfolioServiceImpl.java index 7d417fb..5edcdb3 100644 --- a/src/main/java/com/rymcu/forest/service/impl/PortfolioServiceImpl.java +++ b/src/main/java/com/rymcu/forest/service/impl/PortfolioServiceImpl.java @@ -8,6 +8,8 @@ import com.rymcu.forest.core.exception.UltraViresException; import com.rymcu.forest.core.service.AbstractService; import com.rymcu.forest.dto.*; import com.rymcu.forest.entity.Portfolio; +import com.rymcu.forest.enumerate.FilePath; +import com.rymcu.forest.enumerate.FileDataType; import com.rymcu.forest.lucene.model.PortfolioLucene; import com.rymcu.forest.lucene.util.PortfolioIndexUtil; import com.rymcu.forest.mapper.PortfolioMapper; @@ -16,7 +18,6 @@ import com.rymcu.forest.service.PortfolioService; import com.rymcu.forest.service.UserService; import com.rymcu.forest.util.XssUtils; import com.rymcu.forest.web.api.common.UploadController; -import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -63,8 +64,8 @@ public class PortfolioServiceImpl extends AbstractService implements @Override public Portfolio postPortfolio(Portfolio portfolio) { - if (StringUtils.isNotBlank(portfolio.getHeadImgType())) { - String headImgUrl = UploadController.uploadBase64File(portfolio.getHeadImgUrl(), 0); + if (FileDataType.BASE64.equals(portfolio.getHeadImgType())) { + String headImgUrl = UploadController.uploadBase64File(portfolio.getHeadImgUrl(), FilePath.PORTFOLIO); portfolio.setHeadImgUrl(headImgUrl); } if (portfolio.getIdPortfolio() == null || portfolio.getIdPortfolio() == 0) { diff --git a/src/main/java/com/rymcu/forest/service/impl/ProductServiceImpl.java b/src/main/java/com/rymcu/forest/service/impl/ProductServiceImpl.java index 789cf93..8c7152e 100644 --- a/src/main/java/com/rymcu/forest/service/impl/ProductServiceImpl.java +++ b/src/main/java/com/rymcu/forest/service/impl/ProductServiceImpl.java @@ -3,11 +3,12 @@ package com.rymcu.forest.service.impl; import com.rymcu.forest.core.service.AbstractService; import com.rymcu.forest.dto.ProductDTO; import com.rymcu.forest.entity.Product; +import com.rymcu.forest.enumerate.FilePath; +import com.rymcu.forest.enumerate.FileDataType; import com.rymcu.forest.mapper.ProductMapper; import com.rymcu.forest.service.ProductService; import com.rymcu.forest.util.BeanCopierUtil; import com.rymcu.forest.web.api.common.UploadController; -import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -49,8 +50,8 @@ public class ProductServiceImpl extends AbstractService implements Prod @Override public Product postProduct(ProductDTO product) { boolean isUpdate = product.getIdProduct() > 0; - if (StringUtils.isNotBlank(product.getProductImgType())) { - String headImgUrl = UploadController.uploadBase64File(product.getProductImgUrl(), 0); + if (FileDataType.BASE64.equals(product.getProductImgType())) { + String headImgUrl = UploadController.uploadBase64File(product.getProductImgUrl(), FilePath.PRODUCT); product.setProductImgUrl(headImgUrl); } Product newProduct; @@ -67,6 +68,7 @@ public class ProductServiceImpl extends AbstractService implements Prod newProduct = new Product(); BeanCopierUtil.convert(product, newProduct); newProduct.setCreatedTime(new Date()); + productMapper.insertSelective(newProduct); // 创建产品详情 productMapper.insertProductContent(newProduct.getIdProduct(), product.getProductContent(), product.getProductContentHtml()); } diff --git a/src/main/java/com/rymcu/forest/service/impl/TagServiceImpl.java b/src/main/java/com/rymcu/forest/service/impl/TagServiceImpl.java index 0f53f6f..d060687 100644 --- a/src/main/java/com/rymcu/forest/service/impl/TagServiceImpl.java +++ b/src/main/java/com/rymcu/forest/service/impl/TagServiceImpl.java @@ -10,6 +10,7 @@ import com.rymcu.forest.dto.ArticleTagDTO; import com.rymcu.forest.dto.LabelModel; import com.rymcu.forest.entity.Article; import com.rymcu.forest.entity.Tag; +import com.rymcu.forest.enumerate.FilePath; import com.rymcu.forest.mapper.ArticleMapper; import com.rymcu.forest.mapper.TagMapper; import com.rymcu.forest.service.TagService; @@ -126,7 +127,7 @@ public class TagServiceImpl extends AbstractService implements TagService { } } if (StringUtils.isNotBlank(tag.getTagIconPath()) && tag.getTagIconPath().contains("base64")) { - String tagIconPath = UploadController.uploadBase64File(tag.getTagIconPath(), 2); + String tagIconPath = UploadController.uploadBase64File(tag.getTagIconPath(), FilePath.TAG); tag.setTagIconPath(tagIconPath); } else { tag.setTagIconPath(tag.getTagIconPath()); @@ -137,7 +138,7 @@ public class TagServiceImpl extends AbstractService implements TagService { } else { tag.setUpdatedTime(new Date()); if (StringUtils.isNotBlank(tag.getTagIconPath()) && tag.getTagIconPath().contains("base64")) { - String tagIconPath = UploadController.uploadBase64File(tag.getTagIconPath(), 2); + String tagIconPath = UploadController.uploadBase64File(tag.getTagIconPath(), FilePath.TAG); tag.setTagIconPath(tagIconPath); } result = tagMapper.update(tag.getIdTag(), tag.getTagUri(), tag.getTagIconPath(), tag.getTagStatus(), tag.getTagDescription(), tag.getTagReservation()); diff --git a/src/main/java/com/rymcu/forest/service/impl/TopicServiceImpl.java b/src/main/java/com/rymcu/forest/service/impl/TopicServiceImpl.java index 450f4cf..787d9df 100644 --- a/src/main/java/com/rymcu/forest/service/impl/TopicServiceImpl.java +++ b/src/main/java/com/rymcu/forest/service/impl/TopicServiceImpl.java @@ -8,6 +8,7 @@ import com.rymcu.forest.dto.admin.TopicDTO; import com.rymcu.forest.dto.admin.TopicTagDTO; import com.rymcu.forest.entity.Tag; import com.rymcu.forest.entity.Topic; +import com.rymcu.forest.enumerate.FilePath; import com.rymcu.forest.mapper.TopicMapper; import com.rymcu.forest.service.TopicService; import com.rymcu.forest.util.XssUtils; @@ -59,7 +60,7 @@ public class TopicServiceImpl extends AbstractService implements TopicSer } } if (StringUtils.isNotBlank(topic.getTopicIconPath()) && topic.getTopicIconPath().contains("base64")) { - String topicIconPath = UploadController.uploadBase64File(topic.getTopicIconPath(), 3); + String topicIconPath = UploadController.uploadBase64File(topic.getTopicIconPath(), FilePath.TOPIC); topic.setTopicIconPath(topicIconPath); } else { topic.setTopicIconPath(topic.getTopicIconPath()); @@ -74,7 +75,7 @@ public class TopicServiceImpl extends AbstractService implements TopicSer result = topicMapper.insertSelective(topic); } else { if (StringUtils.isNotBlank(topic.getTopicIconPath()) && topic.getTopicIconPath().contains("base64")) { - String topicIconPath = UploadController.uploadBase64File(topic.getTopicIconPath(), 3); + String topicIconPath = UploadController.uploadBase64File(topic.getTopicIconPath(), FilePath.TOPIC); topic.setTopicIconPath(topicIconPath); } topic.setUpdatedTime(new Date()); diff --git a/src/main/java/com/rymcu/forest/service/impl/UserServiceImpl.java b/src/main/java/com/rymcu/forest/service/impl/UserServiceImpl.java index aaa674c..bae90bf 100644 --- a/src/main/java/com/rymcu/forest/service/impl/UserServiceImpl.java +++ b/src/main/java/com/rymcu/forest/service/impl/UserServiceImpl.java @@ -9,6 +9,8 @@ import com.rymcu.forest.dto.*; import com.rymcu.forest.entity.Role; import com.rymcu.forest.entity.User; import com.rymcu.forest.entity.UserExtend; +import com.rymcu.forest.enumerate.FilePath; +import com.rymcu.forest.enumerate.FileDataType; import com.rymcu.forest.lucene.model.UserLucene; import com.rymcu.forest.lucene.util.UserIndexUtil; import com.rymcu.forest.mapper.RoleMapper; @@ -191,8 +193,8 @@ public class UserServiceImpl extends AbstractService implements UserServic if (number > 0) { throw new NicknameOccupyException("该昵称已使用!"); } - if (StringUtils.isNotBlank(user.getAvatarType()) && AVATAR_SVG_TYPE.equals(user.getAvatarType())) { - String avatarUrl = UploadController.uploadBase64File(user.getAvatarUrl(), 0); + if (FileDataType.BASE64.equals(user.getAvatarType())) { + String avatarUrl = UploadController.uploadBase64File(user.getAvatarUrl(), FilePath.AVATAR); user.setAvatarUrl(avatarUrl); user.setAvatarType("0"); } diff --git a/src/main/java/com/rymcu/forest/web/api/common/UploadController.java b/src/main/java/com/rymcu/forest/web/api/common/UploadController.java index 376f655..5d5d30d 100644 --- a/src/main/java/com/rymcu/forest/web/api/common/UploadController.java +++ b/src/main/java/com/rymcu/forest/web/api/common/UploadController.java @@ -6,6 +6,7 @@ import com.rymcu.forest.core.result.GlobalResult; import com.rymcu.forest.core.result.GlobalResultGenerator; import com.rymcu.forest.dto.LinkToImageUrlDTO; import com.rymcu.forest.dto.TokenUser; +import com.rymcu.forest.enumerate.FilePath; import com.rymcu.forest.service.ForestFileService; import com.rymcu.forest.util.FileUtils; import com.rymcu.forest.util.SpringContextHolder; @@ -29,6 +30,7 @@ import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import java.util.*; + import com.rymcu.forest.util.SSRFUtil; /** @@ -48,38 +50,18 @@ public class UploadController { @Resource private ForestFileService forestFileService; - private static String getTypePath(Integer type) { - String typePath; - switch (type) { - case 0: - typePath = "avatar"; - break; - case 1: - typePath = "article"; - break; - case 2: - typePath = "tag"; - break; - case 3: - typePath = "topic"; - break; - default: - typePath = "images"; - } - return typePath; - } - - public static String uploadBase64File(String fileStr, Integer type) { + public static String uploadBase64File(String fileStr, FilePath filePath) { if (StringUtils.isBlank(fileStr)) { return ""; } - String typePath = getTypePath(type); + String typePath = filePath.name().toLowerCase(); //图片存储路径 String ctxHeadPicPath = env.getProperty("resource.pic-path"); String dir = ctxHeadPicPath + "/" + typePath; File file = new File(dir); if (!file.exists()) { - file.mkdirs();// 创建文件根目录 + // 创建文件根目录 + file.mkdirs(); } String localPath = Utils.getProperty("resource.file-path") + "/" + typePath + "/"; @@ -98,9 +80,9 @@ public class UploadController { /** * 从输入流中获取字节数组 * - * @param inputStream - * @return - * @throws IOException + * @param inputStream 输入流 + * @return byte[] + * @throws IOException IO 异常 */ public static byte[] readInputStream(InputStream inputStream) throws IOException { byte[] buffer = new byte[1024]; @@ -134,20 +116,10 @@ public class UploadController { data.put("url", fileUrl); return GlobalResultGenerator.genSuccessResult(data); } - String typePath = getTypePath(type); - //图片存储路径 - String ctxHeadPicPath = env.getProperty("resource.pic-path"); - String dir = ctxHeadPicPath + "/" + typePath; - File file = new File(dir); - if (!file.exists()) { - file.mkdirs();// 创建文件根目录 - } - + File file = genFile(type); + String typePath = FilePath.getPath(type); String localPath = Utils.getProperty("resource.file-path") + "/" + typePath + "/"; - - String fileName = System.currentTimeMillis() + fileType; - String savePath = file.getPath() + File.separator + fileName; fileUrl = localPath + fileName; File saveFile = new File(savePath); @@ -162,11 +134,8 @@ public class UploadController { } - @PostMapping("/file/batch") - @Transactional(rollbackFor = Exception.class) - public GlobalResult batchFileUpload(@RequestParam(value = "file[]", required = false) MultipartFile[] multipartFiles, @RequestParam(defaultValue = "1") Integer type, HttpServletRequest request) { - TokenUser tokenUser = getTokenUser(request); - String typePath = getTypePath(type); + private File genFile(Integer type) { + String typePath = FilePath.getPath(type); //图片存储路径 String ctxHeadPicPath = env.getProperty("resource.pic-path"); String dir = ctxHeadPicPath + "/" + typePath; @@ -174,13 +143,20 @@ public class UploadController { if (!file.exists()) { file.mkdirs();// 创建文件根目录 } + return file; + } + @PostMapping("/file/batch") + @Transactional(rollbackFor = Exception.class) + public GlobalResult batchFileUpload(@RequestParam(value = "file[]", required = false) MultipartFile[] multipartFiles, @RequestParam(defaultValue = "1") Integer type, HttpServletRequest request) { + TokenUser tokenUser = getTokenUser(request); + File file = genFile(type); + String typePath = FilePath.getPath(type); String localPath = Utils.getProperty("resource.file-path") + "/" + typePath + "/"; - Map successMap = new HashMap(16); - Set errFiles = new HashSet(); + Map successMap = new HashMap<>(16); + Set errFiles = new HashSet<>(); - for (int i = 0, len = multipartFiles.length; i < len; i++) { - MultipartFile multipartFile = multipartFiles[i]; + for (MultipartFile multipartFile : multipartFiles) { String orgName = multipartFile.getOriginalFilename(); if (multipartFile.getSize() == 0) { @@ -247,12 +223,10 @@ public class UploadController { @PostMapping("/file/link") @Transactional(rollbackFor = Exception.class) - public GlobalResult linkToImageUrl(@RequestBody LinkToImageUrlDTO linkToImageUrlDTO, HttpServletRequest request) throws IOException { - + public GlobalResult> linkToImageUrl(@RequestBody LinkToImageUrlDTO linkToImageUrlDTO, HttpServletRequest request) throws IOException { TokenUser tokenUser = getTokenUser(request); String url = linkToImageUrlDTO.getUrl(); - Map data = new HashMap(2); - + Map data = new HashMap<>(2); if (StringUtils.isBlank(url)) { data.put("message", "文件为空!"); return GlobalResultGenerator.genSuccessResult(data); @@ -293,19 +267,12 @@ public class UploadController { data.put("url", fileUrl); return GlobalResultGenerator.genSuccessResult(data); } - Integer type = linkToImageUrlDTO.getType(); if (Objects.isNull(type)) { type = 1; } - String typePath = getTypePath(type); - //图片存储路径 - String ctxHeadPicPath = env.getProperty("resource.pic-path"); - String dir = ctxHeadPicPath + "/" + typePath; - File file = new File(dir); - if (!file.exists()) { - file.mkdirs();// 创建文件根目录 - } + File file = genFile(type); + String typePath = FilePath.getPath(type); String fileName = System.currentTimeMillis() + fileType; fileUrl = Utils.getProperty("resource.file-path") + "/" + typePath + "/" + fileName; @@ -318,9 +285,7 @@ public class UploadController { data.put("url", fileUrl); return GlobalResultGenerator.genSuccessResult(data); } catch (IOException e) { - /** - * 上传失败返回原链接 - */ + // 上传失败返回原链接 logger.error("link: {},\nmessage: {}", url, e.getMessage()); data.put("originalURL", url); data.put("url", url); diff --git a/src/main/resources/static/forest.sql b/src/main/resources/static/forest.sql index 954df42..7b321eb 100644 --- a/src/main/resources/static/forest.sql +++ b/src/main/resources/static/forest.sql @@ -6,31 +6,38 @@ create table forest_article ( id bigint auto_increment comment '主键' primary key, - article_title varchar(128) null comment '文章标题', - article_thumbnail_url varchar(128) null comment '文章缩略图', - article_author_id bigint null comment '文章作者id', + article_title varchar(128) null comment '文章标题', + article_thumbnail_url varchar(128) null comment '文章缩略图', + article_author_id bigint null comment '文章作者id', article_type char default '0' null comment '文章类型', - article_tags varchar(128) null comment '文章标签', - article_view_count int default 1 null comment '浏览总数', - article_preview_content varchar(256) null comment '预览内容', - article_comment_count int default 0 null comment '评论总数', - article_permalink varchar(128) null comment '文章永久链接', - article_link varchar(32) null comment '站内链接', - created_time datetime null comment '创建时间', - updated_time datetime null comment '更新时间', + article_tags varchar(128) null comment '文章标签', + article_view_count int default 1 null comment '浏览总数', + article_preview_content varchar(256) null comment '预览内容', + article_comment_count int default 0 null comment '评论总数', + article_permalink varchar(128) null comment '文章永久链接', + article_link varchar(32) null comment '站内链接', + created_time datetime null comment '创建时间', + updated_time datetime null comment '更新时间', article_perfect char default '0' null comment '0:非优选1:优选', article_status char default '0' null comment '文章状态', - article_thumbs_up_count int default 0 null comment '点赞总数', - article_sponsor_count int default 0 null comment '赞赏总数' + article_thumbs_up_count int default 0 null comment '点赞总数', + article_sponsor_count int default 0 null comment '赞赏总数' ) comment '文章表 ' collate = utf8mb4_unicode_ci; -INSERT INTO forest.forest_article (id, article_title, article_thumbnail_url, article_author_id, article_type, article_tags, article_view_count, article_preview_content, article_comment_count, article_permalink, article_link, created_time, updated_time, article_perfect, article_status, article_thumbs_up_count, article_sponsor_count) VALUES (1, '给新人的一封信', null, 1, '0', '公告,新手信', 3275, '您好,欢迎来到 RYMCU 社区,RYMCU 是一个嵌入式知识学习交流平台。RY 取自”容易”的首字母,寓意为让电子设计变得 so easy。新手的疑问初学者都有很多疑问,在这里对这些疑问进行一一解答。我英语不好,可以学习编程吗?对于初学者来说,英语不是主要的障碍,国内有着充足的中文教程。但在接下来的学习过程中,需要阅读大量的英文文档,所以还是需要有一些英语基础和理解学习能力,配合翻译工具(如百度', 0, 'http://localhost:3000/article/1', '/article/1', '2020-01-03 01:27:25', '2022-09-26 15:33:03', '0', '0', 7, 3); +INSERT INTO forest.forest_article (id, article_title, article_thumbnail_url, article_author_id, article_type, + article_tags, article_view_count, article_preview_content, article_comment_count, + article_permalink, article_link, created_time, updated_time, article_perfect, + article_status, article_thumbs_up_count, article_sponsor_count) +VALUES (1, '给新人的一封信', null, 1, '0', '公告,新手信', 3275, + '您好,欢迎来到 RYMCU 社区,RYMCU 是一个嵌入式知识学习交流平台。RY 取自”容易”的首字母,寓意为让电子设计变得 so easy。新手的疑问初学者都有很多疑问,在这里对这些疑问进行一一解答。我英语不好,可以学习编程吗?对于初学者来说,英语不是主要的障碍,国内有着充足的中文教程。但在接下来的学习过程中,需要阅读大量的英文文档,所以还是需要有一些英语基础和理解学习能力,配合翻译工具(如百度', + 0, 'http://localhost:3000/article/1', '/article/1', '2020-01-03 01:27:25', '2022-09-26 15:33:03', '0', '0', 7, + 3); create table forest_article_content ( - id_article bigint not null comment '主键', - article_content text null comment '文章内容原文', - article_content_html text null comment '文章内容Html', + id_article bigint not null comment '主键', + article_content text null comment '文章内容原文', + article_content_html text null comment '文章内容Html', created_time datetime null comment '创建时间', updated_time datetime null comment '更新时间' ) comment ' ' collate = utf8mb4_unicode_ci; @@ -38,7 +45,9 @@ create table forest_article_content create index forest_article_content_id_article_index on forest_article_content (id_article); -INSERT INTO forest.forest_article_content (id_article, article_content, article_content_html, created_time, updated_time) VALUES (1, '您好,欢迎来到 RYMCU 社区,RYMCU 是一个嵌入式知识学习交流平台。RY 取自”容易”的首字母,寓意为让电子设计变得 so easy。 +INSERT INTO forest.forest_article_content (id_article, article_content, article_content_html, created_time, + updated_time) +VALUES (1, '您好,欢迎来到 RYMCU 社区,RYMCU 是一个嵌入式知识学习交流平台。RY 取自”容易”的首字母,寓意为让电子设计变得 so easy。 ## 新手的疑问 @@ -267,8 +276,8 @@ create table forest_article_thumbs_up ( id bigint auto_increment comment '主键' primary key, - id_article bigint null comment '文章表主键', - id_user bigint null comment '用户表主键', + id_article bigint null comment '文章表主键', + id_user bigint null comment '用户表主键', thumbs_up_time datetime null comment '点赞时间' ) comment '文章点赞表 ' collate = utf8mb4_unicode_ci; @@ -276,22 +285,22 @@ create table forest_bank ( id bigint auto_increment comment '主键' primary key, - bank_name varchar(64) null comment '银行名称', - bank_owner bigint null comment '银行负责人', + bank_name varchar(64) null comment '银行名称', + bank_owner bigint null comment '银行负责人', bank_description varchar(512) null comment '银行描述', - created_by bigint null comment '创建人', - created_time datetime null comment '创建时间' + created_by bigint null comment '创建人', + created_time datetime null comment '创建时间' ) comment '银行表 ' collate = utf8mb4_unicode_ci; create table forest_bank_account ( id bigint auto_increment comment '主键' primary key, - id_bank bigint null comment '所属银行', - bank_account varchar(32) null comment '银行账户', - account_balance decimal(32, 8) null comment '账户余额', - account_owner bigint null comment '账户所有者', - created_time datetime null comment '创建时间', + id_bank bigint null comment '所属银行', + bank_account varchar(32) null comment '银行账户', + account_balance decimal(32, 8) null comment '账户余额', + account_owner bigint null comment '账户所有者', + created_time datetime null comment '创建时间', account_type char default '0' null comment '0: 普通账户 1: 银行账户' ) comment '银行账户表 ' collate = utf8mb4_unicode_ci; @@ -302,18 +311,18 @@ create table forest_comment ( id bigint auto_increment comment '主键' primary key, - comment_content text null comment '评论内容', - comment_author_id bigint null comment '作者 id', - comment_article_id bigint null comment '文章 id', - comment_sharp_url varchar(256) null comment '锚点 url', - comment_original_comment_id bigint null comment '父评论 id', + comment_content text null comment '评论内容', + comment_author_id bigint null comment '作者 id', + comment_article_id bigint null comment '文章 id', + comment_sharp_url varchar(256) null comment '锚点 url', + comment_original_comment_id bigint null comment '父评论 id', comment_status char default '0' null comment '状态', - comment_ip varchar(128) null comment '评论 IP', - comment_ua varchar(512) null comment 'User-Agent', - comment_anonymous char null comment '0:公开回帖,1:匿名回帖', - comment_reply_count int null comment '回帖计数', - comment_visible char null comment '0:所有人可见,1:仅楼主和自己可见', - created_time datetime null comment '创建时间' + comment_ip varchar(128) null comment '评论 IP', + comment_ua varchar(512) null comment 'User-Agent', + comment_anonymous char null comment '0:公开回帖,1:匿名回帖', + comment_reply_count int null comment '回帖计数', + comment_visible char null comment '0:所有人可见,1:仅楼主和自己可见', + created_time datetime null comment '创建时间' ) comment '评论表 ' collate = utf8mb4_unicode_ci; create table forest_currency_issue @@ -321,21 +330,21 @@ create table forest_currency_issue id bigint auto_increment comment '主键' primary key, issue_value decimal(32, 8) null comment '发行数额', - created_by bigint null comment '发行人', - created_time datetime null comment '发行时间' + created_by bigint null comment '发行人', + created_time datetime null comment '发行时间' ) comment '货币发行表 ' collate = utf8mb4_unicode_ci; create table forest_currency_rule ( id bigint auto_increment comment '主键' primary key, - rule_name varchar(128) null comment '规则名称', - rule_sign varchar(64) null comment '规则标志(与枚举变量对应)', - rule_description varchar(1024) null comment '规则描述', - money decimal(32, 8) null comment '金额', + rule_name varchar(128) null comment '规则名称', + rule_sign varchar(64) null comment '规则标志(与枚举变量对应)', + rule_description varchar(1024) null comment '规则描述', + money decimal(32, 8) null comment '金额', award_status char default '0' null comment '奖励(0)/消耗(1)状态', - maximum_money decimal(32, 8) null comment '上限金额', - repeat_days int default 0 null comment '重复(0: 不重复,单位:天)', + maximum_money decimal(32, 8) null comment '上限金额', + repeat_days int default 0 null comment '重复(0: 不重复,单位:天)', status char default '0' null comment '状态' ) comment '货币规则表 ' collate = utf8mb4_unicode_ci; @@ -345,31 +354,31 @@ create table forest_follow primary key, follower_id bigint null comment '关注者 id', following_id bigint null comment '关注数据 id', - following_type char null comment '0:用户,1:标签,2:帖子收藏,3:帖子关注' + following_type char null comment '0:用户,1:标签,2:帖子收藏,3:帖子关注' ) comment '关注表 ' collate = utf8mb4_unicode_ci; create table forest_notification ( id bigint auto_increment comment '主键' primary key, - id_user bigint null comment '用户id', - data_type char null comment '数据类型', - data_id bigint null comment '数据id', + id_user bigint null comment '用户id', + data_type char null comment '数据类型', + data_id bigint null comment '数据id', has_read char default '0' null comment '是否已读', - data_summary varchar(256) null comment '数据摘要', - created_time datetime null comment '创建时间' + data_summary varchar(256) null comment '数据摘要', + created_time datetime null comment '创建时间' ) comment '通知表 ' collate = utf8mb4_unicode_ci; create table forest_portfolio ( id bigint auto_increment comment '主键' primary key, - portfolio_head_img_url varchar(500) null comment '作品集头像', - portfolio_title varchar(32) null comment '作品集名称', - portfolio_author_id bigint null comment '作品集作者', + portfolio_head_img_url varchar(500) null comment '作品集头像', + portfolio_title varchar(32) null comment '作品集名称', + portfolio_author_id bigint null comment '作品集作者', portfolio_description varchar(1024) null comment '作品集介绍', - created_time datetime null comment '创建时间', - updated_time datetime null comment '更新时间', + created_time datetime null comment '创建时间', + updated_time datetime null comment '更新时间', portfolio_description_html varchar(1024) null comment ' 作品集介绍HTML' ) comment '作品集表' collate = utf8mb4_unicode_ci; @@ -379,29 +388,29 @@ create table forest_portfolio_article primary key, id_portfolio bigint null comment '作品集表主键', id_article bigint null comment '文章表主键', - sort_no int null comment '排序号' + sort_no int null comment '排序号' ) comment '作品集与文章关系表' collate = utf8mb4_unicode_ci; create table forest_role ( id bigint auto_increment comment '主键' primary key, - name varchar(32) null comment '名称', - input_code varchar(32) null comment '拼音码', + name varchar(32) null comment '名称', + input_code varchar(32) null comment '拼音码', status char default '0' null comment '状态', - created_time datetime null comment '创建时间', - updated_time datetime null comment '更新时间', - weights tinyint default 0 null comment '权重,数值越小权限越大;0:无权限' + created_time datetime null comment '创建时间', + updated_time datetime null comment '更新时间', + weights tinyint default 0 null comment '权重,数值越小权限越大;0:无权限' ) comment ' ' collate = utf8mb4_unicode_ci; create table forest_sponsor ( id bigint auto_increment comment '主键' primary key, - data_type char null comment '数据类型', - data_id bigint null comment '数据主键', - sponsor bigint null comment '赞赏人', - sponsorship_time datetime null comment '赞赏日期', + data_type char null comment '数据类型', + data_id bigint null comment '数据主键', + sponsor bigint null comment '赞赏人', + sponsorship_time datetime null comment '赞赏日期', sponsorship_money decimal(32, 8) null comment '赞赏金额' ) comment '赞赏表 ' collate = utf8mb4_unicode_ci; @@ -409,31 +418,31 @@ create table forest_tag ( id bigint auto_increment comment '主键' primary key, - tag_title varchar(32) null comment '标签名', - tag_icon_path varchar(512) null comment '标签图标', - tag_uri varchar(128) null comment '标签uri', - tag_description text null comment '描述', - tag_view_count int default 0 null comment '浏览量', - tag_article_count int default 0 null comment '关联文章总数', - tag_ad char null comment '标签广告', - tag_show_side_ad char null comment '是否显示全站侧边栏广告', - created_time datetime null comment '创建时间', - updated_time datetime null comment '更新时间', + tag_title varchar(32) null comment '标签名', + tag_icon_path varchar(512) null comment '标签图标', + tag_uri varchar(128) null comment '标签uri', + tag_description text null comment '描述', + tag_view_count int default 0 null comment '浏览量', + tag_article_count int default 0 null comment '关联文章总数', + tag_ad char null comment '标签广告', + tag_show_side_ad char null comment '是否显示全站侧边栏广告', + created_time datetime null comment '创建时间', + updated_time datetime null comment '更新时间', tag_status char default '0' null comment '标签状态', tag_reservation char default '0' null comment '保留标签', - tag_description_html text null + tag_description_html text null ) comment '标签表 ' collate = utf8mb4_unicode_ci; create table forest_tag_article ( id bigint auto_increment comment '主键' primary key, - id_tag bigint null comment '标签 id', - id_article varchar(32) null comment '帖子 id', + id_tag bigint null comment '标签 id', + id_article varchar(32) null comment '帖子 id', article_comment_count int default 0 null comment '帖子评论计数 0', article_perfect int default 0 null comment '0:非优选1:优选 0', - created_time datetime null comment '创建时间', - updated_time datetime null comment '更新时间' + created_time datetime null comment '创建时间', + updated_time datetime null comment '更新时间' ) comment '标签 - 帖子关联表 ' collate = utf8mb4_unicode_ci; create index forest_tag_article_id_tag_index @@ -443,26 +452,26 @@ create table forest_topic ( id bigint auto_increment comment '主键' primary key, - topic_title varchar(32) null comment '专题标题', - topic_uri varchar(32) null comment '专题路径', - topic_description text null comment '专题描述', - topic_type varchar(32) null comment '专题类型', - topic_sort int default 10 null comment '专题序号 10', - topic_icon_path varchar(128) null comment '专题图片路径', + topic_title varchar(32) null comment '专题标题', + topic_uri varchar(32) null comment '专题路径', + topic_description text null comment '专题描述', + topic_type varchar(32) null comment '专题类型', + topic_sort int default 10 null comment '专题序号 10', + topic_icon_path varchar(128) null comment '专题图片路径', topic_nva char default '0' null comment '0:作为导航1:不作为导航 0', - topic_tag_count int default 0 null comment '专题下标签总数 0', + topic_tag_count int default 0 null comment '专题下标签总数 0', topic_status char default '0' null comment '0:正常1:禁用 0', - created_time datetime null comment '创建时间', - updated_time datetime null comment '更新时间', - topic_description_html text null comment '专题描述 Html' + created_time datetime null comment '创建时间', + updated_time datetime null comment '更新时间', + topic_description_html text null comment '专题描述 Html' ) comment '主题表' collate = utf8mb4_unicode_ci; create table forest_topic_tag ( id bigint auto_increment comment '主键' primary key, - id_topic bigint null comment '专题id', - id_tag bigint null comment '标签id', + id_topic bigint null comment '专题id', + id_tag bigint null comment '标签id', created_time datetime null comment '创建时间', updated_time datetime null comment '更新时间' ) comment '专题- 标签关联表 ' collate = utf8mb4_unicode_ci; @@ -474,51 +483,51 @@ create table forest_transaction_record ( id bigint auto_increment comment '交易主键' primary key, - transaction_no varchar(32) null comment '交易流水号', - funds varchar(32) null comment '款项', - form_bank_account varchar(32) null comment '交易发起方', - to_bank_account varchar(32) null comment '交易收款方', - money decimal(32, 8) null comment '交易金额', + transaction_no varchar(32) null comment '交易流水号', + funds varchar(32) null comment '款项', + form_bank_account varchar(32) null comment '交易发起方', + to_bank_account varchar(32) null comment '交易收款方', + money decimal(32, 8) null comment '交易金额', transaction_type char default '0' null comment '交易类型', - transaction_time datetime null comment '交易时间' + transaction_time datetime null comment '交易时间' ) comment '交易记录表 ' collate = utf8mb4_unicode_ci; create table forest_user ( - id bigint auto_increment comment '用户ID' + id bigint auto_increment comment '用户ID' primary key, - account varchar(32) null comment '账号', - password varchar(64) not null comment '密码', - nickname varchar(128) null comment '昵称', - real_name varchar(32) null comment '真实姓名', - sex char default '0' null comment '性别', - avatar_type char default '0' null comment '头像类型', - avatar_url varchar(512) null comment '头像路径', - email varchar(64) null comment '邮箱', - phone varchar(11) null comment '电话', - status char default '0' null comment '状态', - created_time datetime null comment '创建时间', - updated_time datetime null comment '更新时间', - last_login_time datetime null comment '最后登录时间', - signature varchar(128) null comment '签名', - last_online_time datetime null comment '最后在线时间', + account varchar(32) null comment '账号', + password varchar(64) not null comment '密码', + nickname varchar(128) null comment '昵称', + real_name varchar(32) null comment '真实姓名', + sex char default '0' null comment '性别', + avatar_type char default '0' null comment '头像类型', + avatar_url varchar(512) null comment '头像路径', + email varchar(64) null comment '邮箱', + phone varchar(11) null comment '电话', + status char default '0' null comment '状态', + created_time datetime null comment '创建时间', + updated_time datetime null comment '更新时间', + last_login_time datetime null comment '最后登录时间', + signature varchar(128) null comment '签名', + last_online_time datetime null comment '最后在线时间', bg_img_url varchar(512) null comment '背景图片' ) comment '用户表 ' collate = utf8mb4_unicode_ci; create table forest_user_extend ( - id_user bigint not null comment '用户表主键', - github varchar(64) null comment 'github', - weibo varchar(32) null comment '微博', - weixin varchar(32) null comment '微信', - qq varchar(32) null comment 'qq', + id_user bigint not null comment '用户表主键', + github varchar(64) null comment 'github', + weibo varchar(32) null comment '微博', + weixin varchar(32) null comment '微信', + qq varchar(32) null comment 'qq', blog varchar(500) null comment '博客' ) comment '用户扩展表 ' collate = utf8mb4_unicode_ci; create table forest_user_role ( - id_user bigint not null comment '用户表主键', - id_role bigint not null comment '角色表主键', + id_user bigint not null comment '用户表主键', + id_role bigint not null comment '角色表主键', created_time datetime null comment '创建时间' ) comment '用户权限表 ' collate = utf8mb4_unicode_ci; @@ -526,11 +535,11 @@ create table forest_user_tag ( id bigint auto_increment comment '主键' primary key, - id_user bigint null comment '用户 id', + id_user bigint null comment '用户 id', id_tag varchar(32) null comment '标签 id', - type char null comment '0:创建者,1:帖子使用,2:用户自评标签', - created_time datetime null comment '创建时间', - updated_time datetime null comment '更新时间' + type char null comment '0:创建者,1:帖子使用,2:用户自评标签', + created_time datetime null comment '创建时间', + updated_time datetime null comment '更新时间' ) comment '用户 - 标签关联表 ' collate = utf8mb4_unicode_ci; create table forest_visit @@ -540,12 +549,12 @@ create table forest_visit visit_url varchar(256) null comment '浏览链接', visit_ip varchar(128) null comment 'IP', visit_ua varchar(512) null comment 'User-Agent', - visit_city varchar(32) null comment '城市', + visit_city varchar(32) null comment '城市', visit_device_id varchar(256) null comment '设备唯一标识', - visit_user_id bigint null comment '浏览者 id', + visit_user_id bigint null comment '浏览者 id', visit_referer_url varchar(256) null comment '上游链接', - created_time datetime null comment '创建时间', - expired_time datetime null comment '过期时间' + created_time datetime null comment '创建时间', + expired_time datetime null comment '过期时间' ) comment '浏览表' collate = utf8mb4_unicode_ci; create table forest_lucene_user_dic @@ -570,28 +579,36 @@ values (4, '普通用户', 'user', '0', '2019-12-05 03:10:59', '2020-03-12 15:13 insert into forest.forest_user (id, account, password, nickname, real_name, sex, avatar_type, avatar_url, email, phone, status, created_time, updated_time, last_login_time, signature) -values (1, 'admin', '8ce2dd866238958ac4f07870766813cdaa39a9b83a8c75e26aa50f23', 'admin', 'admin', '0', '0', null, 'admin@rymcu.com', - null, '0', '2021-01-25 18:21:51', '2021-01-25 18:21:54', null, null); +values (1, 'admin', '8ce2dd866238958ac4f07870766813cdaa39a9b83a8c75e26aa50f23', 'admin', 'admin', '0', '0', null, + 'admin@rymcu.com', + null, '0', '2021-01-25 18:21:51', '2021-01-25 18:21:54', '2021-01-25 18:21:54', null); insert into forest.forest_user (id, account, password, nickname, real_name, sex, avatar_type, avatar_url, email, phone, status, created_time, updated_time, last_login_time, signature) -values (2, 'testUser', '8ce2dd866238958ac4f07870766813cdaa39a9b83a8c75e26aa50f23', 'testUser', 'testUser', '0', '0', null, 'testUser@rymcu.com', - null, '0', '2021-01-25 18:21:51', '2021-01-25 18:21:54', null, null); +values (2, 'testUser', '8ce2dd866238958ac4f07870766813cdaa39a9b83a8c75e26aa50f23', 'testUser', 'testUser', '0', '0', + null, 'testUser@rymcu.com', + null, '0', '2021-01-25 18:21:51', '2021-01-25 18:21:54', '2021-01-25 18:21:54', null); +INSERT INTO `forest`.`forest_user` (`id`, `account`, `password`, `nickname`, `real_name`, `sex`, `avatar_type`, + `avatar_url`, `email`, `phone`, `status`, `created_time`, `updated_time`, + `last_login_time`, `signature`, `last_online_time`, `bg_img_url`) +VALUES (65001, 'testUser1', '8ce2dd866238958ac4f07870766813cdaa39a9b83a8c75e26aa50f23', 'testUser', 'testUser1', '0', + '0', NULL, 'testUser1@rymcu.com', NULL, '0', '2021-01-25 18:21:51', '2021-01-25 18:21:54', + '2021-01-25 18:21:54', + NULL, NULL, NULL); insert into forest.forest_user_role (id_user, id_role, created_time) values (1, 1, '2021-01-25 18:22:12'); create table forest_file ( - id int unsigned auto_increment comment 'id' - primary key, + id int unsigned auto_increment comment 'id' primary key, md5_value varchar(40) not null comment '文件md5值', file_path varchar(255) not null comment '文件上传路径', file_url varchar(255) not null comment '网络访问路径', - created_time datetime null comment '创建时间', - updated_time datetime null comment '更新时间', - created_by int null comment '创建人', - file_size int null comment '文件大小', - file_type varchar(10) null comment '文件类型' + created_time datetime null comment '创建时间', + updated_time datetime null comment '更新时间', + created_by int null comment '创建人', + file_size int null comment '文件大小', + file_type varchar(10) null comment '文件类型' ) comment '文件上传记录表' collate = utf8mb4_unicode_ci; create index index_md5_value_created_by @@ -607,13 +624,13 @@ create table forest_login_record ( id bigint auto_increment comment '主键' primary key, - id_user bigint not null comment '用户表主键', + id_user bigint not null comment '用户表主键', login_ip varchar(128) null comment '登录设备IP', login_ua varchar(512) null comment '登录设备UA', login_city varchar(128) null comment '登录设备所在城市', - login_os varchar(64) null comment '登录设备操作系统', - login_browser varchar(64) null comment '登录设备浏览器', - created_time datetime null comment '登录时间', + login_os varchar(64) null comment '登录设备操作系统', + login_browser varchar(64) null comment '登录设备浏览器', + created_time datetime null comment '登录时间', login_device_id varchar(512) null comment '登录设备/浏览器指纹', constraint forest_login_record_id_uindex unique (id) @@ -630,6 +647,8 @@ create table forest_product weights tinyint default 50 null comment '权重,数值越小权限越大;0:无权限', created_time datetime null comment '创建时间', updated_time datetime null comment '更新时间', + tags varchar(64) null comment '标签集合', + status tinyint default 0 not null comment '状态', constraint forest_product_id_uindex unique (id) ) @@ -645,11 +664,33 @@ create table forest_product_content ) comment '产品详情表'; -INSERT INTO forest.forest_product (id, product_title, product_price, product_img_url, product_description, weights, created_time, updated_time) VALUES (1, 'Nebula Pi', 2000000, 'https://static.rymcu.com/article/1648960741563.jpg', '产品描述', 20, '2022-06-13 22:35:33', '2022-06-13 22:35:33'); +INSERT INTO forest.forest_product (id, product_title, product_price, product_img_url, product_description, weights, + created_time, updated_time, tags, status) +VALUES (1, 'Nebula Pi 51', 2000000, 'https://static.rymcu.com/article/1648960741563.jpg', + 'Nebula Pi 51 是社区独家设计的一款一机双芯、资源丰富的 51 单片机入门级开发板, 也是社区的第一款产品。', 20, + '2022-06-13 22:35:33', '2022-06-13 22:35:33', '51 单片机', 1); +INSERT INTO forest.forest_product (id, product_title, product_price, product_img_url, product_description, weights, + created_time, updated_time, tags, status) +VALUES (2, 'ESP32-S3-DevKitC-1', 398000, 'https://static.rymcu.com/article/1706094905846.png', + 'ESP32-S3-DevKitC-1 是社区在乐鑫官方设计方案上进行升级后推出的一款基于 ESP32-S3-WROOM-1/1U 或 ESP32-S3-WROOM-2/2U 模组的入门级开发板。', + 60, '2023-05-14 08:01:12', '2023-05-14 08:01:16', 'ESP32,ESP32S3', 1); +INSERT INTO forest.forest_product (id, product_title, product_price, product_img_url, product_description, weights, + created_time, updated_time, tags, status) +VALUES (3, 'RYDAPLink', 2000000, 'https://static.rymcu.com/article/1706081416691.png', + 'RYDAPLink 是社区独家设计的一款集 下载、调试、串口、3.3V/5V 供电、串口 ISP 功能于一身的 DAPLink 下载器。', 80, + '2024-01-24 19:28:43', '2024-01-24 19:28:43', '开源,DAPLink', 1); +INSERT INTO forest.forest_product (id, product_title, product_price, product_img_url, product_description, weights, + created_time, updated_time, tags, status) +VALUES (4, 'ESP32-DevKitC', 398000, 'https://static.rymcu.com/article/1706922435052.png', + 'ESP32-DevKitC 是社区在乐鑫官方设计方案上进行升级后推出的一款基于 ESP32 模组的入门级开发板。', 40, + '2024-02-03 09:10:49', '2024-02-03 09:10:49', '开源,ESP32', 1); +INSERT INTO forest.forest_product (id, product_title, product_price, product_img_url, product_description, weights, + created_time, updated_time, tags, status) +VALUES (5, 'ESP32-C3-DevKitM-1', 398000, 'https://static.rymcu.com/article/1706922639664.png', + 'ESP32-C3-DevKitM-1 是社区在乐鑫官方设计方案上进行升级后推出的一款基于 ESP32-C3-MINI-1 模组的入门级开发板。', 50, + '2024-02-03 09:10:49', '2024-02-03 09:10:49', 'ESP32,ESP32C3', 1); -INSERT INTO forest.forest_product_content (id_product, product_content, product_content_html, created_time, - updated_time) -VALUES (1, '![nebula pi](https://static.rymcu.com/article/1640531590770) +INSERT INTO forest.forest_product_content (id_product, product_content, product_content_html, created_time, updated_time) VALUES (1, '![nebula pi](https://static.rymcu.com/article/1640531590770) Nebula-Pi 开发板平台 @@ -808,10 +849,1291 @@ Nebula-Pi 开发板平台

表 1-1 主板元器件说明

', '2022-06-13 22:35:34', '2022-06-13 22:35:34'); +INSERT INTO forest.forest_product_content (id_product, product_content, product_content_html, created_time, updated_time) VALUES (2, 'ESP32-S3-DevKitC-1 —— 是社区在乐鑫官方设计方案上进行升级后推出的一款基于 ESP32S3 模组的入门级开发板。 -INSERT INTO forest.forest_bank (id, bank_name, bank_owner, bank_description, created_by, created_time) VALUES (1, '社区中央银行', 1, '社区中央银行', 1, '2020-11-26 21:24:19'); -INSERT INTO forest.forest_bank (id, bank_name, bank_owner, bank_description, created_by, created_time) VALUES (2, '社区发展与改革银行', 1, '社区发展与改革银行', 1, '2020-11-26 21:31:27'); +> 获取地址: [GitHub](https://github.com/rymcu/ESP32-Open) | [Gitee](https://gitee.com/rymcu/ESP32-Open) | [RYMCU](https://rymcu.com/product/4) + +![](https://static.rymcu.com/article/1706094905846.png) + +## 功能介绍 + +ESP32-S3-DevKitC-1 开发板的主要组件、接口及控制方式见下。 + +| 主要组件 | 介绍 | +|------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| ESP32-S3-WROOM-1/1U/2 | ESP32-S3-WROOM-1、ESP32-S3-WROOM-1U 和 ESP32-S3-WROOM-2 是通用型 Wi-Fi + 低功耗蓝牙 MCU 模组,具有丰富的外设接口、强大的神经网络运算能力和信号处理能力,专为人工智能和 AIoT 市场打造。ESP32-S3-WROOM-1 和 ESP32-S3-WROOM-2 采用 PCB 板载天线,ESP32-S3-WROOM-1U 采用连接器连接外部天线。 | +| 5 V to 3.3 V LDO(5 V 转 3.3 V LDO) | 电源转换器,输入 5 V,输出 3.3 V。 | +| Pin Headers(排针) | 所有可用 GPIO 管脚(除 flash 的 SPI 总线)均已引出至开发板的排针。请查看 排针 获取更多信息。 | +| USB-to-UART Port(USB 转 UART 接口) | USB Type-C 接口,可用作开发板的供电接口,可烧录固件至芯片,也可作为通信接口,通过板载 USB 转 UART 桥接器与芯片通信。 | +| Boot Button(Boot 键) | 下载按键。按住 Boot 键的同时按一下 Reset 键进入“固件下载”模式,通过串口下载固件。 | +| Reset Button(Reset 键) | 复位按键。 | +| USB Port(USB 接口) | ESP32-S3 USB OTG 接口,支持全速 USB 1.1 标准。ESP32-S3 USB 接口可用作开发板的供电接口,可烧录固件至芯片,可通过 USB 协议与芯片通信,也可用于 JTAG 调试。 | +| USB-to-UART Bridge(USB 转 UART 桥接器) | 单芯片 USB 至 UART 桥接器,可提供高达 3 Mbps 的传输速率。 | +| RGB LED | 可寻址 RGB 发光二极管,由 GPIO38 驱动。 | +| 3.3 V Power On LED(3.3 V 电源指示灯) | 开发板连接 USB 电源后,该指示灯亮起。 | + +> 在板载 ESP32-S3-WROOM-1/1U 模组系列(使用 8 线 SPI flash/PSRAM)的开发板和板载 ESP32-S3-WROOM-2 模组系列的开发板中,管脚 GPIO35、GPIO36 和 GPIO37 已用于内部 ESP32-S3 芯片与 SPI flash/PSRAM 之间的通信,外部不可使用。 + +## 排针 + +下表列出了开发板两侧排针(J1 和 J3)的名称和功能,排针名称如图 ESP32-S3-DevKitC-1(板载 ESP32-S3-WROOM-1) 中所示。 + +### J1 + +| 序号 | 名称 | 类型 [^1] | 功能 | +|----|-----|-------|--------------------------------------------------------------------| +| 1 | 3V3 | P | 3.3 V 电源 | +| 2 | 3V3 | P | 3.3 V 电源 | +| 3 | RST | I | EN | +| 4 | 4 | I/O/T | RTC_GPIO4, GPIO4, TOUCH4, ADC1_CH3 | +| 5 | 5 | I/O/T | RTC_GPIO5, GPIO5, TOUCH5, ADC1_CH4 | +| 6 | 6 | I/O/T | RTC_GPIO6, GPIO6, TOUCH6, ADC1_CH5 | +| 7 | 7 | I/O/T | RTC_GPIO7, GPIO7, TOUCH7, ADC1_CH6 | +| 8 | 15 | I/O/T | RTC_GPIO15, GPIO15, U0RTS, ADC2_CH4, XTAL_32K_P | +| 9 | 16 | I/O/T | RTC_GPIO16, GPIO16, U0CTS, ADC2_CH5, XTAL_32K_N | +| 10 | 17 | I/O/T | RTC_GPIO17, GPIO17, U1TXD, ADC2_CH6 | +| 11 | 18 | I/O/T | RTC_GPIO18, GPIO18, U1RXD, ADC2_CH7, CLK_OUT3 | +| 12 | 8 | I/O/T | RTC_GPIO8, GPIO8, TOUCH8, ADC1_CH7, SUBSPICS1 | +| 13 | 3 | I/O/T | RTC_GPIO3, GPIO3, TOUCH3, ADC1_CH2 | +| 14 | 46 | I/O/T | GPIO46 | +| 15 | 9 | I/O/T | RTC_GPIO9, GPIO9, TOUCH9, ADC1_CH8, FSPIHD, SUBSPIHD | +| 16 | 10 | I/O/T | RTC_GPIO10, GPIO10, TOUCH10, ADC1_CH9, FSPICS0, FSPIIO4, SUBSPICS0 | +| 17 | 11 | I/O/T | RTC_GPIO11, GPIO11, TOUCH11, ADC2_CH0, FSPID, FSPIIO5, SUBSPID | +| 18 | 12 | I/O/T | RTC_GPIO12, GPIO12, TOUCH12, ADC2_CH1, FSPICLK, FSPIIO6, SUBSPICLK | +| 19 | 13 | I/O/T | RTC_GPIO13, GPIO13, TOUCH13, ADC2_CH2, FSPIQ, FSPIIO7, SUBSPIQ | +| 20 | 14 | I/O/T | RTC_GPIO14, GPIO14, TOUCH14, ADC2_CH3, FSPIWP, FSPIDQS, SUBSPIWP | +| 21 | 5V | P | 5 V 电源 | +| 22 | G | G | 接地 | + +### J3 + +| 序号 | 名称 | 类型 | 功能 | +|----|----|-------|-------------------------------------------------------| +| 1 | G | G | 接地 | +| 2 | TX | I/O/T | U0TXD, GPIO43, CLK_OUT1 | +| 3 | RX | I/O/T | U0RXD, GPIO44, CLK_OUT2 | +| 4 | 1 | I/O/T | RTC_GPIO1, GPIO1, TOUCH1, ADC1_CH0 | +| 5 | 2 | I/O/T | RTC_GPIO2, GPIO2, TOUCH2, ADC1_CH1 | +| 6 | 42 | I/O/T | MTMS, GPIO42 | +| 7 | 41 | I/O/T | MTDI, GPIO41, CLK_OUT1 | +| 8 | 40 | I/O/T | MTDO, GPIO40, CLK_OUT2 | +| 9 | 39 | I/O/T | MTCK, GPIO39, CLK_OUT3, SUBSPICS1 | +| 10 | 38 | I/O/T | GPIO38, FSPIWP, SUBSPIWP, RGB LED | +| 11 | 37 | I/O/T | SPIDQS, GPIO37, FSPIQ, SUBSPIQ | +| 12 | 36 | I/O/T | SPIIO7, GPIO36, FSPICLK, SUBSPICLK | +| 13 | 35 | I/O/T | SPIIO6, GPIO35, FSPID, SUBSPID | +| 14 | 0 | I/O/T | RTC_GPIO0, GPIO0 | +| 15 | 45 | I/O/T | GPIO45 | +| 16 | 48 | I/O/T | GPIO48, SPICLK_N, SUBSPICLK_N_DIFF | +| 17 | 47 | I/O/T | GPIO47, SPICLK_P, SUBSPICLK_P_DIFF | +| 18 | 21 | I/O/T | RTC_GPIO21, GPIO21 | +| 19 | 20 | I/O/T | RTC_GPIO20, GPIO20, U1CTS, ADC2_CH9, CLK_OUT1, USB_D+ | +| 20 | 19 | I/O/T | RTC_GPIO19, GPIO19, U1RTS, ADC2_CH8, CLK_OUT2, USB_D- | +| 21 | G | G | 接地 | +| 22 | G | G | 接地 | + +## 管脚布局 + +![ESP32S3DevKitC1pinlayoutv1.1.jpg](https://static.rymcu.com/article/1708056462709.jpg) + +## 相关文档 + +- [电路原理图](https://static.rymcu.com/article/1686045860275.pdf) + +[^1]: P:电源;I:输入;O:输出;T:可设置为高阻。 + +', '

ESP32-S3-DevKitC-1 —— 是社区在乐鑫官方设计方案上进行升级后推出的一款基于 ESP32S3 模组的入门级开发板。

+
+

获取地址: GitHub | Gitee | RYMCU

+
+

+

功能介绍

+

ESP32-S3-DevKitC-1 开发板的主要组件、接口及控制方式见下。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
主要组件介绍
ESP32-S3-WROOM-1/1U/2ESP32-S3-WROOM-1、ESP32-S3-WROOM-1U 和 ESP32-S3-WROOM-2 是通用型 Wi-Fi + 低功耗蓝牙 MCU 模组,具有丰富的外设接口、强大的神经网络运算能力和信号处理能力,专为人工智能和 AIoT 市场打造。ESP32-S3-WROOM-1 和 ESP32-S3-WROOM-2 采用 PCB 板载天线,ESP32-S3-WROOM-1U 采用连接器连接外部天线。
5 V to 3.3 V LDO(5 V 转 3.3 V LDO)电源转换器,输入 5 V,输出 3.3 V。
Pin Headers(排针)所有可用 GPIO 管脚(除 flash 的 SPI 总线)均已引出至开发板的排针。请查看 排针 获取更多信息。
USB-to-UART Port(USB 转 UART 接口)USB Type-C 接口,可用作开发板的供电接口,可烧录固件至芯片,也可作为通信接口,通过板载 USB 转 UART 桥接器与芯片通信。
Boot Button(Boot 键)下载按键。按住 Boot 键的同时按一下 Reset 键进入“固件下载”模式,通过串口下载固件。
Reset Button(Reset 键)复位按键。
USB Port(USB 接口)ESP32-S3 USB OTG 接口,支持全速 USB 1.1 标准。ESP32-S3 USB 接口可用作开发板的供电接口,可烧录固件至芯片,可通过 USB 协议与芯片通信,也可用于 JTAG 调试。
USB-to-UART Bridge(USB 转 UART 桥接器)单芯片 USB 至 UART 桥接器,可提供高达 3 Mbps 的传输速率。
RGB LED可寻址 RGB 发光二极管,由 GPIO38 驱动。
3.3 V Power On LED(3.3 V 电源指示灯)开发板连接 USB 电源后,该指示灯亮起。
+
+

在板载 ESP32-S3-WROOM-1/1U 模组系列(使用 8 线 SPI flash/PSRAM)的开发板和板载 ESP32-S3-WROOM-2 模组系列的开发板中,管脚 GPIO35、GPIO36 和 GPIO37 已用于内部 ESP32-S3 芯片与 SPI flash/PSRAM 之间的通信,外部不可使用。

+
+

排针

+

下表列出了开发板两侧排针(J1 和 J3)的名称和功能,排针名称如图 ESP32-S3-DevKitC-1(板载 ESP32-S3-WROOM-1) 中所示。

+

J1

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
序号名称类型 1功能
13V3P3.3 V 电源
23V3P3.3 V 电源
3RSTIEN
44I/O/TRTC_GPIO4, GPIO4, TOUCH4, ADC1_CH3
55I/O/TRTC_GPIO5, GPIO5, TOUCH5, ADC1_CH4
66I/O/TRTC_GPIO6, GPIO6, TOUCH6, ADC1_CH5
77I/O/TRTC_GPIO7, GPIO7, TOUCH7, ADC1_CH6
815I/O/TRTC_GPIO15, GPIO15, U0RTS, ADC2_CH4, XTAL_32K_P
916I/O/TRTC_GPIO16, GPIO16, U0CTS, ADC2_CH5, XTAL_32K_N
1017I/O/TRTC_GPIO17, GPIO17, U1TXD, ADC2_CH6
1118I/O/TRTC_GPIO18, GPIO18, U1RXD, ADC2_CH7, CLK_OUT3
128I/O/TRTC_GPIO8, GPIO8, TOUCH8, ADC1_CH7, SUBSPICS1
133I/O/TRTC_GPIO3, GPIO3, TOUCH3, ADC1_CH2
1446I/O/TGPIO46
159I/O/TRTC_GPIO9, GPIO9, TOUCH9, ADC1_CH8, FSPIHD, SUBSPIHD
1610I/O/TRTC_GPIO10, GPIO10, TOUCH10, ADC1_CH9, FSPICS0, FSPIIO4, SUBSPICS0
1711I/O/TRTC_GPIO11, GPIO11, TOUCH11, ADC2_CH0, FSPID, FSPIIO5, SUBSPID
1812I/O/TRTC_GPIO12, GPIO12, TOUCH12, ADC2_CH1, FSPICLK, FSPIIO6, SUBSPICLK
1913I/O/TRTC_GPIO13, GPIO13, TOUCH13, ADC2_CH2, FSPIQ, FSPIIO7, SUBSPIQ
2014I/O/TRTC_GPIO14, GPIO14, TOUCH14, ADC2_CH3, FSPIWP, FSPIDQS, SUBSPIWP
215VP5 V 电源
22GG接地
+

J3

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
序号名称类型功能
1GG接地
2TXI/O/TU0TXD, GPIO43, CLK_OUT1
3RXI/O/TU0RXD, GPIO44, CLK_OUT2
41I/O/TRTC_GPIO1, GPIO1, TOUCH1, ADC1_CH0
52I/O/TRTC_GPIO2, GPIO2, TOUCH2, ADC1_CH1
642I/O/TMTMS, GPIO42
741I/O/TMTDI, GPIO41, CLK_OUT1
840I/O/TMTDO, GPIO40, CLK_OUT2
939I/O/TMTCK, GPIO39, CLK_OUT3, SUBSPICS1
1038I/O/TGPIO38, FSPIWP, SUBSPIWP, RGB LED
1137I/O/TSPIDQS, GPIO37, FSPIQ, SUBSPIQ
1236I/O/TSPIIO7, GPIO36, FSPICLK, SUBSPICLK
1335I/O/TSPIIO6, GPIO35, FSPID, SUBSPID
140I/O/TRTC_GPIO0, GPIO0
1545I/O/TGPIO45
1648I/O/TGPIO48, SPICLK_N, SUBSPICLK_N_DIFF
1747I/O/TGPIO47, SPICLK_P, SUBSPICLK_P_DIFF
1821I/O/TRTC_GPIO21, GPIO21
1920I/O/TRTC_GPIO20, GPIO20, U1CTS, ADC2_CH9, CLK_OUT1, USB_D+
2019I/O/TRTC_GPIO19, GPIO19, U1RTS, ADC2_CH8, CLK_OUT2, USB_D-
21GG接地
22GG接地
+

管脚布局

+

ESP32S3DevKitC1pinlayoutv1.1.jpg

+

相关文档

+ +

+
  1. P:电源;I:输入;O:输出;T:可设置为高阻。

    +
  2. +
', '2023-05-14 08:14:23', '2023-05-14 08:14:27'); +INSERT INTO forest.forest_product_content (id_product, product_content, product_content_html, created_time, updated_time) VALUES (3, 'RYDAPLink —— 集`下载`、`调试`、`串口`、`3.3V/5V 供电`、`串口 ISP` 功能于一身的 DAPLink 下载器, 由 RYMCU 社区 ( https://rymcu.com ) 倾情打造。 + +> 获取地址: [GitHub](https://github.com/rymcu/RYDAPLink) | [Gitee](https://gitee.com/rymcu/RYDAPLink) | [RYMCU](https://rymcu.com/article/21) + +## 背景 + +在开发 STM32 等基于 ARM 内核的单片机时,几乎所有人都会遇到同一个问题。[那就是选择一款什么样的下载调试器呢?](https://rymcu.com/article/22) 市面上有各式各样的下载调试器可供我们选择,我觉得选择一款最合适自己的,才是重要的。常用的下载器包括 J-Link ,ST-Link ,J-Link0B ,CMSIS-DAP ,DAPLink 等。 + +当接触到 DAPLink 这个方案后,我们根据官方开源的原理图,设计了一版下载调试并且开始了一段时间的试用。实物非常的小巧,尺寸为:50mm x 50mm ,实物长下面这样了。 + +![RYDAPLink.png](https://static.rymcu.com/article/1706081416691.png) + +同时,我们在源码的基础上进行了一些改进,实现了串口 ISP 功能。另外,原来方案的基础上,增加了板载自恢复保险丝,保证即使短路也不会烧坏主板,这样心里踏实多了。项目经过了长时间的使用测试,固件非常稳定。五合一功能:下载、调试、串口、3.3V/5V 供电,串口 ISP 。 + +本文基于 ARMmebed 官方开源代码打造了一款 DAPLink 下载调试器,并做了些许改进,无论初学与否,跟随下面教程,你也可以打造属于你自己的 DAPLink! + +## RYDAPLink 项目简介 + +### 功能介绍 + +这是一款 ARM 官方开源的仿真器,可以实现全系列 Cortex-M0/M3/M4/M7 内核芯片的程序下载和调试。特性如下: + +* 官方开源,无版权限制,稳定不丢失固件 +* SWD 接口,全系列 Cortex-M0/M3/M4/M7 下载和调试( HID ) +* 自带 USB 虚拟串口,方便程序调试( CDC ) +* 拖拽下载功能,模拟 U 盘,将 Hex 或 bin 格式文件拖拽或拷贝至 U 盘完成下载(MSC) +* 串口下载程序,改进官方程序实现(串口 ISP ) +* 输出 5.0V 电源,可供电目标电路 +* 输出 3.3V 电源,可供电目标器件 +* 板载自恢复保险丝,短路自保护 +* Win10 即插即用,无需驱动 + +', '

RYDAPLink —— 集 下载调试串口3.3V/5V 供电串口 ISP 功能于一身的 DAPLink 下载器, 由 RYMCU 社区 ( https://rymcu.com ) 倾情打造。

+
+

获取地址: GitHub | Gitee | RYMCU

+
+

背景

+

在开发 STM32 等基于 ARM 内核的单片机时,几乎所有人都会遇到同一个问题。那就是选择一款什么样的下载调试器呢? 市面上有各式各样的下载调试器可供我们选择,我觉得选择一款最合适自己的,才是重要的。常用的下载器包括 J-Link ,ST-Link ,J-Link0B ,CMSIS-DAP ,DAPLink 等。

+

当接触到 DAPLink 这个方案后,我们根据官方开源的原理图,设计了一版下载调试并且开始了一段时间的试用。实物非常的小巧,尺寸为:50mm x 50mm ,实物长下面这样了。

+

RYDAPLink.png

+

同时,我们在源码的基础上进行了一些改进,实现了串口 ISP 功能。另外,原来方案的基础上,增加了板载自恢复保险丝,保证即使短路也不会烧坏主板,这样心里踏实多了。项目经过了长时间的使用测试,固件非常稳定。五合一功能:下载、调试、串口、3.3V/5V 供电,串口 ISP 。

+

本文基于 ARMmebed 官方开源代码打造了一款 DAPLink 下载调试器,并做了些许改进,无论初学与否,跟随下面教程,你也可以打造属于你自己的 DAPLink!

+ +

功能介绍

+

这是一款 ARM 官方开源的仿真器,可以实现全系列 Cortex-M0/M3/M4/M7 内核芯片的程序下载和调试。特性如下:

+
    +
  • 官方开源,无版权限制,稳定不丢失固件
  • +
  • SWD 接口,全系列 Cortex-M0/M3/M4/M7 下载和调试( HID )
  • +
  • 自带 USB 虚拟串口,方便程序调试( CDC )
  • +
  • 拖拽下载功能,模拟 U 盘,将 Hex 或 bin 格式文件拖拽或拷贝至 U 盘完成下载(MSC)
  • +
  • 串口下载程序,改进官方程序实现(串口 ISP )
  • +
  • 输出 5.0V 电源,可供电目标电路
  • +
  • 输出 3.3V 电源,可供电目标器件
  • +
  • 板载自恢复保险丝,短路自保护
  • +
  • Win10 即插即用,无需驱动
  • +
+', '2024-01-24 19:31:43', '2024-01-24 19:31:46'); +INSERT INTO forest.forest_product_content (id_product, product_content, product_content_html, created_time, updated_time) VALUES (4, 'ESP32-DevKitC —— 是社区在乐鑫官方设计方案上进行升级后推出的一款基于 ESP32 模组的入门级开发板。 + +> 获取地址: [GitHub](https://github.com/rymcu/ESP32-Open) | [Gitee](https://gitee.com/rymcu/ESP32-Open) | [RYMCU](https://rymcu.com/product/4/#相关文档) + +![](https://static.rymcu.com/article/1706922435052.png) + +## 功能介绍 + +ESP32-DevKitC V4 开发板的主要组件、接口及控制方式见下。 + +| 主要组件 | 基本介绍 | +|-----------------|---------------------------------------------------------------------------| +| ESP32-WROOM-32 | 基于 ESP32 的模组。更多详情,请见 [《ESP32-WROOM-32 技术规格书》](https://espressif.com/sites/default/files/documentation/esp32-wroom-32_datasheet_cn.pdf)。 | +| EN | 复位按键。 | +| Boot | 下载按键。按下 Boot 键并保持,同时按一下 EN 键(此时不要松开 Boot 键)进入“固件下载”模式,通过串口下载固件。 | +| USB-to-UART 桥接器 | 单芯片 USB-UART 桥接器,可提供高达 3 Mbps 的传输速率。 | +| USB Type-C 接口 | USB 接口,可用作电路板的供电电源,或连接 PC 和 ESP32-WROOM-32 模组的通信接口。 | +| 5V Power On LED | 开发板通电后(USB 或外部 5 V),该指示灯将亮起。更多信息,请见 相关文档 中的原理图。 | +| I/O | 板上模组的绝大部分管脚均已引出至开发板的排针。用户可以对 ESP32 进行编程,实现 PWM、ADC、DAC、I2C、I2S、SPI 等多种功能。 | + +## 排针 + +下表列出了开发板两侧排针(J1 和 J3)的名称和功能,排针名称如图 ESP32-DevKitC V4(板载 ESP32-WROOM-32) 中所示。 + +### J1 + +| 编号 | 名称 | 类型[^1] | 功能 | +|----|------|--------|-----------------------------------------| +| 1 | 3V3 | P | 3.3 V 电源 | +| 2 | EN | I | CHIP_PU, Reset | +| 3 | VP | I | GPIO36, ADC1_CH0, S_VP | +| 4 | VN | I | GPIO39, ADC1_CH3, S_VN | +| 5 | IO34 | I | GPIO34, ADC1_CH6, VDET_1 | +| 6 | IO35 | I | GPIO35, ADC1_CH7, VDET_2 | +| 7 | IO32 | I/O | GPIO32, ADC1_CH4, TOUCH_CH9, XTAL_32K_P | +| 8 | IO33 | I/O | GPIO33, ADC1_CH5, TOUCH_CH8, XTAL_32K_N | +| 9 | IO25 | I/O | GPIO25, ADC1_CH8, DAC_1 | +| 10 | IO26 | I/O | GPIO26, ADC2_CH9, DAC_2 | +| 11 | IO27 | I/O | GPIO27, ADC2_CH7, TOUCH_CH7 | +| 12 | IO14 | I/O | GPIO14, ADC2_CH6, TOUCH_CH6, MTMS | +| 13 | IO12 | I/O | GPIO12, ADC2_CH5, TOUCH_CH5, MTDI | +| 14 | GND | G | 接地 | +| 15 | IO13 | I/O | GPIO13, ADC2_CH4, TOUCH_CH4, MTCK | +| 16 | D2 | I/O | GPIO9, D2 [^2] | +| 17 | D3 | I/O | GPIO10, D3 [^2] | +| 18 | CMD | I/O | GPIO11, CMD [^2] | +| 19 | 5V | P | 5 V 电源 | + +### J3 + +| 编号 | 名称 | 类型 [^1] | 功能 | +|----|------|---------|-----------------------------------| +| 1 | GND | G | 接地 | +| 2 | IO23 | I/O | GPIO23 | +| 3 | IO22 | I/O | GPIO22 | +| 4 | TX | I/O | GPIO1, U0TXD | +| 5 | RX | I/O | GPIO3, U0RXD | +| 6 | IO21 | I/O | GPIO21 | +| 7 | GND | G | 接地 | +| 8 | IO19 | I/O | GPIO19 | +| 9 | IO18 | I/O | GPIO18 | +| 10 | IO5 | I/O | GPIO5 | +| 11 | IO17 | I/O | GPIO17 [^3] | +| 12 | IO16 | I/O | GPIO16 [^3] | +| 13 | IO4 | I/O | GPIO4, ADC2_CH0, TOUCH_CH0 | +| 14 | IO0 | I/O | GPIO0, ADC2_CH1, TOUCH_CH1, Boot | +| 15 | IO2 | I/O | GPIO2, ADC2_CH2, TOUCH_CH2 | +| 16 | IO15 | I/O | GPIO15, ADC2_CH3, TOUCH_CH3, MTDO | +| 17 | D1 | I/O | GPIO8, D1 [^2] | +| 18 | D0 | I/O | GPIO7, D0 [^2] | +| 19 | CLK | I/O | GPIO6, CLK [^2] | + +[^1]: P:电源;I:输入;O:输出。 + +[^2]: 管脚 D0、D1、D2、D3、CMD 和 CLK 用于 ESP32 芯片与 SPI flash 间的内部通信,集中分布在开发板两侧靠近 USB 端口的位置。通常而言,这些管脚最好不连,否则可能影响 SPI flash/SPI RAM 的工作。 + +[^3]: 管脚 GPIO16 和 GPIO17 仅适用于板载 ESP32-WROOM 系列和 ESP32-SOLO-1 的开发板,板载 ESP32-WROVER 系列开发板的管脚 GPIO16 和 GPIO17 保留内部使用。 + +## 管脚布局 + +![](https://static.rymcu.com/article/1706927881092.png) + +## 相关文档 + +- [电路原理图](https://static.rymcu.com/article/1686043415890.pdf) +- [PCB 源文件](https://static.rymcu.com/article/1691599744950.epro) -INSERT INTO forest.forest_bank_account (id, id_bank, bank_account, account_balance, account_owner, created_time, account_type) VALUES (2, 1, '100000002', 1207980.00000000, 2, '2020-11-26 21:37:18', '1'); -INSERT INTO forest.forest_bank_account (id, id_bank, bank_account, account_balance, account_owner, created_time, account_type) VALUES (1, 1, '100000001', 997500000.00000000, 1, '2020-11-26 21:36:21', '1'); +', '

ESP32-DevKitC —— 是社区在乐鑫官方设计方案上进行升级后推出的一款基于 ESP32 模组的入门级开发板。

+
+

获取地址: GitHub | Gitee | RYMCU

+
+

+

功能介绍

+

ESP32-DevKitC V4 开发板的主要组件、接口及控制方式见下。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
主要组件基本介绍
ESP32-WROOM-32基于 ESP32 的模组。更多详情,请见 《ESP32-WROOM-32 技术规格书》
EN复位按键。
Boot下载按键。按下 Boot 键并保持,同时按一下 EN 键(此时不要松开 Boot 键)进入“固件下载”模式,通过串口下载固件。
USB-to-UART 桥接器单芯片 USB-UART 桥接器,可提供高达 3 Mbps 的传输速率。
USB Type-C 接口USB 接口,可用作电路板的供电电源,或连接 PC 和 ESP32-WROOM-32 模组的通信接口。
5V Power On LED开发板通电后(USB 或外部 5 V),该指示灯将亮起。更多信息,请见 相关文档 中的原理图。
I/O板上模组的绝大部分管脚均已引出至开发板的排针。用户可以对 ESP32 进行编程,实现 PWM、ADC、DAC、I2C、I2S、SPI 等多种功能。
+

排针

+

下表列出了开发板两侧排针(J1 和 J3)的名称和功能,排针名称如图 ESP32-DevKitC V4(板载 ESP32-WROOM-32) 中所示。

+

J1

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
编号名称类型1功能
13V3P3.3 V 电源
2ENICHIP_PU, Reset
3VPIGPIO36, ADC1_CH0, S_VP
4VNIGPIO39, ADC1_CH3, S_VN
5IO34IGPIO34, ADC1_CH6, VDET_1
6IO35IGPIO35, ADC1_CH7, VDET_2
7IO32I/OGPIO32, ADC1_CH4, TOUCH_CH9, XTAL_32K_P
8IO33I/OGPIO33, ADC1_CH5, TOUCH_CH8, XTAL_32K_N
9IO25I/OGPIO25, ADC1_CH8, DAC_1
10IO26I/OGPIO26, ADC2_CH9, DAC_2
11IO27I/OGPIO27, ADC2_CH7, TOUCH_CH7
12IO14I/OGPIO14, ADC2_CH6, TOUCH_CH6, MTMS
13IO12I/OGPIO12, ADC2_CH5, TOUCH_CH5, MTDI
14GNDG接地
15IO13I/OGPIO13, ADC2_CH4, TOUCH_CH4, MTCK
16D2I/OGPIO9, D2 2
17D3I/OGPIO10, D3 2
18CMDI/OGPIO11, CMD 2
195VP5 V 电源
+

J3

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
编号名称类型 1功能
1GNDG接地
2IO23I/OGPIO23
3IO22I/OGPIO22
4TXI/OGPIO1, U0TXD
5RXI/OGPIO3, U0RXD
6IO21I/OGPIO21
7GNDG接地
8IO19I/OGPIO19
9IO18I/OGPIO18
10IO5I/OGPIO5
11IO17I/OGPIO17 3
12IO16I/OGPIO16 3
13IO4I/OGPIO4, ADC2_CH0, TOUCH_CH0
14IO0I/OGPIO0, ADC2_CH1, TOUCH_CH1, Boot
15IO2I/OGPIO2, ADC2_CH2, TOUCH_CH2
16IO15I/OGPIO15, ADC2_CH3, TOUCH_CH3, MTDO
17D1I/OGPIO8, D1 2
18D0I/OGPIO7, D0 2
19CLKI/OGPIO6, CLK 2
+

管脚布局

+

+

相关文档

+ +

+
  1. P:电源;I:输入;O:输出。

    +
  2. +
  3. 管脚 D0、D1、D2、D3、CMD 和 CLK 用于 ESP32 芯片与 SPI flash 间的内部通信,集中分布在开发板两侧靠近 USB 端口的位置。通常而言,这些管脚最好不连,否则可能影响 SPI flash/SPI RAM 的工作。

    +
  4. +
  5. 管脚 GPIO16 和 GPIO17 仅适用于板载 ESP32-WROOM 系列和 ESP32-SOLO-1 的开发板,板载 ESP32-WROVER 系列开发板的管脚 GPIO16 和 GPIO17 保留内部使用。

    +
  6. +
', '2024-02-03 10:43:43', '2024-02-03 10:43:45'); +INSERT INTO forest.forest_product_content (id_product, product_content, product_content_html, created_time, updated_time) VALUES (5, 'ESP32-C3-DevKitM-1 —— 是社区在乐鑫官方设计方案上进行升级后推出的一款基于 ESP32C3 模组的入门级开发板。 + +> 获取地址: [GitHub](https://github.com/rymcu/ESP32-Open) | [Gitee](https://gitee.com/rymcu/ESP32-Open) | [RYMCU](https://rymcu.com/product/4) + +![](https://static.rymcu.com/article/1706922639664.png) + +## 功能介绍 + +ESP32-C3-DevKitM-1 开发板的主要组件、接口及控制方式见下。 + +| 主要组件 | 介绍 | +|------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------| +| ESP32-C3-MINI-1 | ESP32-C3-MINI-1 是一款通用型 Wi-Fi 和低功耗蓝牙双模模组,采用 PCB 板载天线。该款模组集成配置 4 MB 嵌入式 flash 的 ESP32-C3FN4 芯片。由于 flash 直接封装在芯片中,ESP32-C3-MINI-1 模组具有更小的封装尺寸。 | +| 5 V to 3.3 V LDO(5 V 转 3.3 V LDO) | 电源转换器,输入 5 V,输出 3.3 V。 | +| 5 V Power On LED(5 V 电源指示灯) | 开发板连接 USB 电源后,该指示灯亮起。 | +| Pin Headers(排针) | 所有可用 GPIO 管脚(除 flash 的 SPI 总线)均已引出至开发板的排针。请查看 排针 获取更多信息。 | +| Boot Button(Boot 键) | 下载按键。按住 Boot 键的同时按一下 Reset 键进入“固件下载”模式,通过串口下载固件。 | +| Micro-USB Port(Micro-USB 接口) | USB 接口。可用作开发板的供电电源或 PC 和 ESP32-C3FN4 芯片的通信接口。 | +| Reset Button(Reset 键) | 复位按键。 | +| USB-to-UART Bridge(USB 至 UART 桥接器) | 单芯片 USB 至 UART 桥接器,可提供高达 3 Mbps 的传输速率。 | +| RGB LED | 可寻址 RGB 发光二极管,由 GPIO8 驱动。 | + +## 排针 + +下表列出了开发板两侧排针(J1 和 J3)的名称和功能,排针名称如图 ESP32-C3-DevKitM-1 中所示。 + +### J1 + +| 序号 | 名称 | 类型 [^1] | 功能 | +|----|------|-------|-----------------------------| +| 1 | GND | G | 接地 | +| 2 | 3V3 | P | 3.3 V 电源 | +| 3 | 3V3 | P | 3.3 V 电源 | +| 4 | IO2 | I/O/T | GPIO2 2 , ADC1_CH2, FSPIQ | +| 5 | IO3 | I/O/T | GPIO3, ADC1_CH3 | +| 6 | GND | G | 接地 | +| 7 | RST | I | CHIP_PU | +| 8 | GND | G | 接地 | +| 9 | IO0 | I/O/T | GPIO0, ADC1_CH0, XTAL_32K_P | +| 10 | IO1 | I/O/T | GPIO1, ADC1_CH1, XTAL_32K_N | +| 11 | IO10 | I/O/T | GPIO10, FSPICS0 | +| 12 | GND | G | 接地 | +| 13 | 5V | P | 5 V 电源 | +| 14 | 5V | P | 5 V 电源 | +| 15 | GND | G | 接地 | + +### J3 + +| 序号 | 名称 | 类型 [^1] | 功能 | +|----|------|-------|-------------------------------| +| 1 | GND | G | 接地 | +| 2 | TX | I/O/T | GPIO21, U0TXD | +| 3 | RX | I/O/T | GPIO20, U0RXD | +| 4 | GND | G | 接地 | +| 5 | IO9 | I/O/T | GPIO9 [^2] | +| 6 | IO8 | I/O/T | GPIO8 [^2], RGB LED | +| 7 | GND | G | 接地 | +| 8 | IO7 | I/O/T | GPIO7, FSPID, MTDO | +| 9 | IO6 | I/O/T | GPIO6, FSPICLK, MTCK | +| 10 | IO5 | I/O/T | GPIO5, ADC2_CH0, FSPIWP, MTDI | +| 11 | IO4 | I/O/T | GPIO4, ADC1_CH4, FSPIHD, MTMS | +| 12 | GND | G | 接地 | +| 13 | IO18 | I/O/T | GPIO18 | +| 14 | IO19 | I/O/T | GPIO19 | +| 15 | GND | G | 接地 | + +## 管脚布局 + +![esp32c3devkitm1v1pinout.png](https://static.rymcu.com/article/1708083360388.png) + +## 相关文档 + +- [电路原理图](https://static.rymcu.com/article/1686045790604.pdf) + +[^1]: P:电源;I:输入;O:输出;T:可设置为高阻。 + +[^2]: GPIO2、GPIO8、GPIO9 为 ESP32-C3FN4 芯片的 Strapping 管脚。在芯片上电和系统复位过程中,Strapping 管脚根据管脚的二进制电压值控制芯片功能。Strapping 管脚的具体描述和应用,请参考 [ESP32-C3 技术规格书](https://www.espressif.com/sites/default/files/documentation/esp32-c3_datasheet_cn.pdf) 的 Strapping 管脚章节。 + +', '

ESP32-C3-DevKitM-1 —— 是社区在乐鑫官方设计方案上进行升级后推出的一款基于 ESP32C3 模组的入门级开发板。

+
+

获取地址: GitHub | Gitee | RYMCU

+
+

+

功能介绍

+

ESP32-C3-DevKitM-1 开发板的主要组件、接口及控制方式见下。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
主要组件介绍
ESP32-C3-MINI-1ESP32-C3-MINI-1 是一款通用型 Wi-Fi 和低功耗蓝牙双模模组,采用 PCB 板载天线。该款模组集成配置 4 MB 嵌入式 flash 的 ESP32-C3FN4 芯片。由于 flash 直接封装在芯片中,ESP32-C3-MINI-1 模组具有更小的封装尺寸。
5 V to 3.3 V LDO(5 V 转 3.3 V LDO)电源转换器,输入 5 V,输出 3.3 V。
5 V Power On LED(5 V 电源指示灯)开发板连接 USB 电源后,该指示灯亮起。
Pin Headers(排针)所有可用 GPIO 管脚(除 flash 的 SPI 总线)均已引出至开发板的排针。请查看 排针 获取更多信息。
Boot Button(Boot 键)下载按键。按住 Boot 键的同时按一下 Reset 键进入“固件下载”模式,通过串口下载固件。
Micro-USB Port(Micro-USB 接口)USB 接口。可用作开发板的供电电源或 PC 和 ESP32-C3FN4 芯片的通信接口。
Reset Button(Reset 键)复位按键。
USB-to-UART Bridge(USB 至 UART 桥接器)单芯片 USB 至 UART 桥接器,可提供高达 3 Mbps 的传输速率。
RGB LED可寻址 RGB 发光二极管,由 GPIO8 驱动。
+

排针

+

下表列出了开发板两侧排针(J1 和 J3)的名称和功能,排针名称如图 ESP32-C3-DevKitM-1 中所示。

+

J1

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
序号名称类型 1功能
1GNDG接地
23V3P3.3 V 电源
33V3P3.3 V 电源
4IO2I/O/TGPIO2 2 , ADC1_CH2, FSPIQ
5IO3I/O/TGPIO3, ADC1_CH3
6GNDG接地
7RSTICHIP_PU
8GNDG接地
9IO0I/O/TGPIO0, ADC1_CH0, XTAL_32K_P
10IO1I/O/TGPIO1, ADC1_CH1, XTAL_32K_N
11IO10I/O/TGPIO10, FSPICS0
12GNDG接地
135VP5 V 电源
145VP5 V 电源
15GNDG接地
+

J3

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
序号名称类型 1功能
1GNDG接地
2TXI/O/TGPIO21, U0TXD
3RXI/O/TGPIO20, U0RXD
4GNDG接地
5IO9I/O/TGPIO9 2
6IO8I/O/TGPIO8 2, RGB LED
7GNDG接地
8IO7I/O/TGPIO7, FSPID, MTDO
9IO6I/O/TGPIO6, FSPICLK, MTCK
10IO5I/O/TGPIO5, ADC2_CH0, FSPIWP, MTDI
11IO4I/O/TGPIO4, ADC1_CH4, FSPIHD, MTMS
12GNDG接地
13IO18I/O/TGPIO18
14IO19I/O/TGPIO19
15GNDG接地
+

管脚布局

+

esp32c3devkitm1v1pinout.png

+

相关文档

+ +

+
  1. P:电源;I:输入;O:输出;T:可设置为高阻。

    +
  2. +
  3. GPIO2、GPIO8、GPIO9 为 ESP32-C3FN4 芯片的 Strapping 管脚。在芯片上电和系统复位过程中,Strapping 管脚根据管脚的二进制电压值控制芯片功能。Strapping 管脚的具体描述和应用,请参考 ESP32-C3 技术规格书 的 Strapping 管脚章节。

    +
  4. +
', '2024-02-03 10:54:25', '2024-02-03 10:54:27'); + + + +INSERT INTO forest.forest_bank (id, bank_name, bank_owner, bank_description, created_by, created_time) +VALUES (1, '社区中央银行', 1, '社区中央银行', 1, '2020-11-26 21:24:19'); +INSERT INTO forest.forest_bank (id, bank_name, bank_owner, bank_description, created_by, created_time) +VALUES (2, '社区发展与改革银行', 1, '社区发展与改革银行', 1, '2020-11-26 21:31:27'); + + +INSERT INTO forest.forest_bank_account (id, id_bank, bank_account, account_balance, account_owner, created_time, + account_type) +VALUES (2, 1, '100000002', 1207980.00000000, 2, '2020-11-26 21:37:18', '1'); +INSERT INTO forest.forest_bank_account (id, id_bank, bank_account, account_balance, account_owner, created_time, + account_type) +VALUES (1, 1, '100000001', 997500000.00000000, 1, '2020-11-26 21:36:21', '1'); +INSERT INTO `forest`.`forest_bank_account` (`id`, `id_bank`, `bank_account`, `account_balance`, `account_owner`, + `created_time`, `account_type`) +VALUES (3, 1, '100000061', 100.00000000, 65001, '2020-11-26 21:37:18', '0'); +INSERT INTO `forest`.`forest_bank_account` (`id`, `id_bank`, `bank_account`, `account_balance`, `account_owner`, + `created_time`, `account_type`) +VALUES (4, 1, '100000063', 100.00000000, 65003, '2020-11-26 21:37:18', '0');