<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>YoungsunLi</title>
  <subtitle>Youngsun's Blog · DEV DESIGN DIY</subtitle>
  <link href="https://lsun.net/"/>
  <link rel="self" href="https://lsun.net/feed.xml"/>
  <id>https://lsun.net/</id>
  <updated>2026-08-31T00:00:00Z</updated>
  <author><name>YoungsunLi</name></author>
  
  <entry>
    <title>ESP32-S3 GPIO 速查</title>
    <link href="https://lsun.net/posts/esp32-s3-gpio/"/>
    <id>https://lsun.net/posts/esp32-s3-gpio/</id>
    <updated>2026-08-31T00:00:00Z</updated>
    <summary>ESP32-S3 全部 45 个 GPIO 的可用性速查, 标出被 flash 占用、模组未引出和带使用前提的引脚.</summary>
    <category term="esp32"/><category term="硬件"/>
    <content type="html">&lt;h1 id=&quot;esp32-s3-gpio-速查&quot; tabindex=&quot;-1&quot;&gt;ESP32-S3 GPIO 速查 &lt;a class=&quot;header-anchor&quot; href=&quot;#esp32-s3-gpio-速查&quot; aria-label=&quot;Permalink to &amp;quot;ESP32-S3 GPIO 速查&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;GPIO 编号 &lt;code&gt;0–21&lt;/code&gt;、&lt;code&gt;26–48&lt;/code&gt; 共 45 个（&lt;code&gt;22–25&lt;/code&gt; 不存在）。&lt;code&gt;26–32&lt;/code&gt; 被 flash 占用，&lt;code&gt;33 / 34&lt;/code&gt; 模组不引出——常用的 WROOM-1 模组实际引出 36 个；八线 PSRAM 变体（型号带 R8，下文细说）还要再扣掉 &lt;code&gt;35–37&lt;/code&gt;，剩 33 个。基本自由的 26 个（绿点），其余带前提。点击引脚看说明，用筛选按钮找可用脚。&lt;/p&gt;&lt;div class=&quot;pv&quot;&gt;&lt;div class=&quot;pv-filters&quot; role=&quot;group&quot; aria-label=&quot;按功能筛选引脚&quot;&gt;&lt;button class=&quot;on&quot;&gt;全部&lt;/button&gt;&lt;button class=&quot;&quot;&gt;⚡ 80MHz SPI&lt;/button&gt;&lt;button class=&quot;&quot;&gt;✅ 自由引脚&lt;/button&gt;&lt;button class=&quot;&quot;&gt;ADC&lt;/button&gt;&lt;button class=&quot;&quot;&gt;👆 触摸&lt;/button&gt;&lt;button class=&quot;&quot;&gt;💤 深睡唤醒&lt;/button&gt;&lt;button class=&quot;&quot;&gt;Strapping&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;pv-board&quot; style=&quot;--pv-rows:19;&quot;&gt;&lt;div class=&quot;pv-chip&quot;&gt;&lt;b&gt;ESP32-S3&lt;/b&gt;&lt;span&gt;双核 LX7 · QFN56&lt;/span&gt;&lt;/div&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:1;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--caution pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO0&lt;/span&gt;&lt;span class=&quot;pv-tag--strap pv-tag&quot;&gt;Strap ↑&lt;/span&gt;&lt;span class=&quot;pv-tag--misc pv-tag&quot;&gt;BOOT 键&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:2;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO1&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;ADC1_CH0&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;T1&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:3;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO2&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;ADC1_CH1&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;T2&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:4;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO3&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;ADC1_CH2&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;T3&lt;/span&gt;&lt;span class=&quot;pv-tag--strap pv-tag&quot;&gt;Strap&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:5;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO4&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;ADC1_CH3&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;T4&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:6;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO5&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;ADC1_CH4&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;T5&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:7;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO6&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;ADC1_CH5&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;T6&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:8;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO7&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;ADC1_CH6&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;T7&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:9;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO8&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;ADC1_CH7&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;T8&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:10;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO9&lt;/span&gt;&lt;span class=&quot;pv-tag--spi pv-tag&quot;&gt;FSPIHD&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;ADC1_CH8&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;T9&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:11;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO10&lt;/span&gt;&lt;span class=&quot;pv-tag--spi pv-tag&quot;&gt;FSPICS0&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;ADC1_CH9&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;T10&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:12;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO11&lt;/span&gt;&lt;span class=&quot;pv-tag--spi pv-tag&quot;&gt;FSPID=MOSI&lt;/span&gt;&lt;span class=&quot;pv-tag--hot pv-tag&quot;&gt;80M&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;ADC2_CH0&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;T11&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:13;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO12&lt;/span&gt;&lt;span class=&quot;pv-tag--spi pv-tag&quot;&gt;FSPICLK=SCLK&lt;/span&gt;&lt;span class=&quot;pv-tag--hot pv-tag&quot;&gt;80M&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;ADC2_CH1&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;T12&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:14;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO13&lt;/span&gt;&lt;span class=&quot;pv-tag--spi pv-tag&quot;&gt;FSPIQ=MISO&lt;/span&gt;&lt;span class=&quot;pv-tag--hot pv-tag&quot;&gt;80M&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;ADC2_CH2&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;T13&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:15;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO14&lt;/span&gt;&lt;span class=&quot;pv-tag--spi pv-tag&quot;&gt;FSPIWP&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;ADC2_CH3&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;T14&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:16;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO15&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;ADC2_CH4&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:17;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO16&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;ADC2_CH5&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:18;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO17&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;ADC2_CH6&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:19;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO18&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;ADC2_CH7&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:1;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--caution pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO19&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;ADC2_CH8&lt;/span&gt;&lt;span class=&quot;pv-tag--usb pv-tag&quot;&gt;USB D−&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:2;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--caution pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO20&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;ADC2_CH9&lt;/span&gt;&lt;span class=&quot;pv-tag--usb pv-tag&quot;&gt;USB D+&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:3;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO21&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:4;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--avoid pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO22–25&lt;/span&gt;&lt;span class=&quot;pv-tag--misc pv-tag&quot;&gt;不存在&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:5;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--avoid pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO26–32&lt;/span&gt;&lt;span class=&quot;pv-tag--flash pv-tag&quot;&gt;flash 占用&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:6;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--caution pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO33–34&lt;/span&gt;&lt;span class=&quot;pv-tag--misc pv-tag&quot;&gt;模组不引出&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:7;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--caution pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO35–37&lt;/span&gt;&lt;span class=&quot;pv-tag--flash pv-tag&quot;&gt;八线 PSRAM 占用&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:8;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO38&lt;/span&gt;&lt;span class=&quot;pv-tag--misc pv-tag&quot;&gt;板载 WS2812&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:9;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO39&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:10;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO40&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:11;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO41&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:12;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO42&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:13;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--caution pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO43&lt;/span&gt;&lt;span class=&quot;pv-tag--uart pv-tag&quot;&gt;U0TXD&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:14;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--caution pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO44&lt;/span&gt;&lt;span class=&quot;pv-tag--uart pv-tag&quot;&gt;U0RXD&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:15;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--caution pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO45&lt;/span&gt;&lt;span class=&quot;pv-tag--strap pv-tag&quot;&gt;Strap ↓&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:16;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--caution pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO46&lt;/span&gt;&lt;span class=&quot;pv-tag--strap pv-tag&quot;&gt;Strap ↓&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:17;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO47&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:18;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO48&lt;/span&gt;&lt;span class=&quot;pv-tag--misc pv-tag&quot;&gt;板载 WS2812&lt;/span&gt;&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;pv-detail&quot; aria-live=&quot;polite&quot;&gt;&lt;p class=&quot;pv-hint&quot;&gt; 点击任意引脚查看说明 —— 绿点自由使用，橙点有前提，红点勿用。 &lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;h2 id=&quot;spi-80mhz&quot; tabindex=&quot;-1&quot;&gt;SPI 跑满 80MHz &lt;a class=&quot;header-anchor&quot; href=&quot;#spi-80mhz&quot; aria-label=&quot;Permalink to &amp;quot;SPI 跑满 80MHz {#spi-80mhz}&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;和 &lt;a href=&quot;https://lsun.net/posts/esp32-c3-gpio/&quot;&gt;C3&lt;/a&gt;、&lt;a href=&quot;https://lsun.net/posts/esp32-c6-gpio/&quot;&gt;C6&lt;/a&gt; 一样，SPI2 最高 80MHz 的前提是&lt;strong&gt;走 IO_MUX 直连&lt;/strong&gt;：ESP-IDF 驱动只有在 bus 引脚（SCLK / MOSI / MISO 中实际用到的）全部落在 IO_MUX 位置时才走直连；任何一个不匹配，整条总线就静默改走 GPIO 矩阵，没有任何报错或日志。矩阵路径官方只保证 40MHz 及以下的行为与直连一致 [3]，而分频不看路由，配 80MHz 引脚上照样输出 80MHz——超规格带病跑，可能点得亮，也可能间歇花屏。&lt;/p&gt;&lt;table tabindex=&quot;0&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;信号&lt;/th&gt;&lt;th style=&quot;text-align:center;&quot;&gt;IO_MUX 引脚&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;SCLK (FSPICLK)&lt;/td&gt;&lt;td style=&quot;text-align:center;&quot;&gt;GPIO12&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;MOSI (FSPID)&lt;/td&gt;&lt;td style=&quot;text-align:center;&quot;&gt;GPIO11&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;MISO (FSPIQ)&lt;/td&gt;&lt;td style=&quot;text-align:center;&quot;&gt;GPIO13&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CS0 (FSPICS0)&lt;/td&gt;&lt;td style=&quot;text-align:center;&quot;&gt;GPIO10&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;S3 有个省心的地方：Arduino 核的默认 SPI 引脚（&lt;code&gt;SS=10 / MOSI=11 / MISO=13 / SCK=12&lt;/code&gt; [6]）与 IO_MUX 位置&lt;strong&gt;完全重合&lt;/strong&gt;——不像 C3 / C6 默认走矩阵，S3 上照默认引脚接线天生就是直连。CS 不算 bus 引脚，走 GPIO 矩阵也不影响直连，但 &lt;code&gt;10&lt;/code&gt; 空着就直接用。&lt;/p&gt;&lt;p&gt;S3 还比 C3 / C6 多一条通用 &lt;strong&gt;SPI3&lt;/strong&gt;，两条总线可以同时各挂各的设备。但 IO_MUX 直连位置只有 SPI2 这一组 [3]——SPI3 接哪都走 GPIO 矩阵，按 40MHz 及以下用。典型分工：SPI2 直连 80MHz 刷屏，SPI3 慢速挂别的 SPI 设备。&lt;/p&gt;&lt;p&gt;顺带一提，80MHz SPI 并不是 S3 刷屏的天花板——它还有 C3 / C6 没有的并口 LCD 外设（i80 / RGB），一个时钟送 8 或 16 位数据，引脚同样走 GPIO 矩阵任意选 [13]。真正的门槛是引脚预算：8-bit i80 要 11 个脚起步（8 数据 + WR / DC / CS），RGB565 屏则是 19 个起步（16 数据 + PCLK + HSYNC / VSYNC），一块屏就能吃掉大半自由脚。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;接线示例&lt;/strong&gt;（以 ST7789 屏为例，只写不读，MISO 不接）：&lt;/p&gt;&lt;table tabindex=&quot;0&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align:center;&quot;&gt;SCLK&lt;/th&gt;&lt;th style=&quot;text-align:center;&quot;&gt;MOSI&lt;/th&gt;&lt;th style=&quot;text-align:center;&quot;&gt;CS&lt;/th&gt;&lt;th style=&quot;text-align:center;&quot;&gt;DC&lt;/th&gt;&lt;th style=&quot;text-align:center;&quot;&gt;RST&lt;/th&gt;&lt;th style=&quot;text-align:center;&quot;&gt;BLK&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align:center;&quot;&gt;GPIO12&lt;/td&gt;&lt;td style=&quot;text-align:center;&quot;&gt;GPIO11&lt;/td&gt;&lt;td style=&quot;text-align:center;&quot;&gt;GPIO10&lt;/td&gt;&lt;td style=&quot;text-align:center;&quot;&gt;GPIO4&lt;/td&gt;&lt;td style=&quot;text-align:center;&quot;&gt;GPIO5&lt;/td&gt;&lt;td style=&quot;text-align:center;&quot;&gt;GPIO6&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class=&quot;vp-code-group&quot;&gt;&lt;div class=&quot;tabs&quot;&gt;&lt;input type=&quot;radio&quot; name=&quot;group-OClXE&quot; id=&quot;tab-e1v8b04&quot; checked&gt;&lt;label data-title=&quot;ESP-IDF&quot; for=&quot;tab-e1v8b04&quot;&gt;ESP-IDF&lt;/label&gt;&lt;input type=&quot;radio&quot; name=&quot;group-OClXE&quot; id=&quot;tab-hqbuoKs&quot;&gt;&lt;label data-title=&quot;TFT_eSPI&quot; for=&quot;tab-hqbuoKs&quot;&gt;TFT_eSPI&lt;/label&gt;&lt;/div&gt;&lt;div class=&quot;blocks&quot;&gt;&lt;div class=&quot;language-c active line-numbers-mode&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;c&lt;/span&gt;&lt;pre class=&quot;shiki one-dark-pro vp-code&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#7F848E;font-style:italic;&quot;&gt;// bus 引脚匹配 IO_MUX 后，驱动自动走直连&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#56B6C2;&quot;&gt;spi_bus_config_t&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt; buscfg &lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;    .sclk_io_num &lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt; 12&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;    .mosi_io_num &lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt; 11&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;    .miso_io_num &lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#7F848E;font-style:italic;&quot;&gt;   // 只写不读&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;    .quadwp_io_num &lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;    .quadhd_io_num &lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#56B6C2;&quot;&gt;spi_device_interface_config_t&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt; devcfg &lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;    .clock_speed_hz &lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt; SPI_MASTER_FREQ_80M,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;    .spics_io_num &lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt; 10&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#7F848E;font-style:italic;&quot;&gt;    // ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;line-numbers-wrapper&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;language-c line-numbers-mode&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;c&lt;/span&gt;&lt;pre class=&quot;shiki one-dark-pro vp-code&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#7F848E;font-style:italic;&quot;&gt;// User_Setup.h&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;#define&lt;/span&gt;&lt;span style=&quot;color:#61AFEF;&quot;&gt; TFT_SCLK&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt; 12&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;#define&lt;/span&gt;&lt;span style=&quot;color:#61AFEF;&quot;&gt; TFT_MOSI&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt; 11&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;#define&lt;/span&gt;&lt;span style=&quot;color:#61AFEF;&quot;&gt; TFT_CS&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;   10&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;#define&lt;/span&gt;&lt;span style=&quot;color:#61AFEF;&quot;&gt; TFT_DC&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;   4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;#define&lt;/span&gt;&lt;span style=&quot;color:#61AFEF;&quot;&gt; TFT_RST&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;  5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;#define&lt;/span&gt;&lt;span style=&quot;color:#61AFEF;&quot;&gt; TFT_BL&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;   6&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;#define&lt;/span&gt;&lt;span style=&quot;color:#61AFEF;&quot;&gt; TFT_BACKLIGHT_ON&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt; HIGH&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;#define&lt;/span&gt;&lt;span style=&quot;color:#61AFEF;&quot;&gt; SPI_FREQUENCY&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt; 80000000&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;line-numbers-wrapper&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;h2 id=&quot;octal&quot; tabindex=&quot;-1&quot;&gt;八线 PSRAM 吃掉 GPIO35–37 &lt;a class=&quot;header-anchor&quot; href=&quot;#octal&quot; aria-label=&quot;Permalink to &amp;quot;八线 PSRAM 吃掉 GPIO35–37 {#octal}&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;S3 模组的型号后缀直接决定引脚数：&lt;code&gt;N&lt;/code&gt; 后面是 flash 容量，&lt;code&gt;R&lt;/code&gt; 后面是 PSRAM 容量，&lt;strong&gt;R8 表示八线（Octal）PSRAM&lt;/strong&gt;——八线多出来的数据线 SPIIO4–7 和 SPIDQS 落在 &lt;code&gt;GPIO33–37&lt;/code&gt; 上 [2]：&lt;code&gt;33 / 34&lt;/code&gt; 模组本来就不引出 [8]，真正的代价是引出来的 &lt;code&gt;35 / 36 / 37&lt;/code&gt; 也不能用了 [5]。全部 WROOM-2（八线 flash）同理。&lt;/p&gt;&lt;table tabindex=&quot;0&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;模组&lt;/th&gt;&lt;th style=&quot;text-align:center;&quot;&gt;GPIO35–37&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;WROOM-1 N8 / N16（无 PSRAM）、N8R2（四线 PSRAM）&lt;/td&gt;&lt;td style=&quot;text-align:center;&quot;&gt;✅ 可用&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;WROOM-1 N8R8 / N16R8（八线 PSRAM）、全部 WROOM-2&lt;/td&gt;&lt;td style=&quot;text-align:center;&quot;&gt;❌ 被占用&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;选型时看清后缀：市面上最常见的 DevKitC-1 大多配的是 N16R8，拿到手 &lt;code&gt;35–37&lt;/code&gt; 就是不能碰——板上画了排针不等于能用，接上去轻则数据错乱，重则 PSRAM 直接挂掉。自己画板贴 R8 模组同理，这三个脚干脆别布线。直接用裸片（QFN56）画板的话，&lt;code&gt;26–32&lt;/code&gt; 留给自己的 flash / PSRAM，&lt;code&gt;33 / 34&lt;/code&gt; 在非八线配置下则是普通可用脚。&lt;/p&gt;&lt;p&gt;后缀还有个 &lt;code&gt;V&lt;/code&gt; 要留意：代表 1.8V PSRAM（如 N16R16V），VDD_SPI 域电压跟着变 1.8V，而 &lt;code&gt;47 / 48&lt;/code&gt; 恰好由这个域供电——电平变成 1.8V，直接接 3.3V 外设不可靠 [8]。&lt;/p&gt;&lt;h2 id=&quot;ulp&quot; tabindex=&quot;-1&quot;&gt;深睡与 ULP 引脚 &lt;a class=&quot;header-anchor&quot; href=&quot;#ulp&quot; aria-label=&quot;Permalink to &amp;quot;深睡与 ULP 引脚 {#ulp}&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;S3 带 ULP RISC-V 协处理器：深度睡眠时主核断电，ULP 还能低功耗轮询传感器，有事再唤醒主核。ULP 世界只有 RTC 域的 &lt;code&gt;GPIO0–21&lt;/code&gt;，其中 RTC I2C（深睡期间 ULP 采 I2C 传感器用的那套）引脚&lt;strong&gt;固定、不可经 GPIO 矩阵改道&lt;/strong&gt; [7]：&lt;/p&gt;&lt;table tabindex=&quot;0&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;功能&lt;/th&gt;&lt;th style=&quot;text-align:center;&quot;&gt;引脚&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;深睡唤醒（EXT0 / EXT1）&lt;/td&gt;&lt;td style=&quot;text-align:center;&quot;&gt;&lt;code&gt;0–21&lt;/code&gt; 任意 [12]&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;触摸唤醒&lt;/td&gt;&lt;td style=&quot;text-align:center;&quot;&gt;&lt;code&gt;1–14&lt;/code&gt;（T1–T14）[12]&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ULP RTC I2C&lt;/td&gt;&lt;td style=&quot;text-align:center;&quot;&gt;SDA=GPIO1 或 3 / SCL=GPIO0 或 2&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;触摸能直接从深睡唤醒主核 [12]，做「摸一下才亮」的桌面小玩意不用占按键——C3 / C6 没有触摸，自然也没这个唤醒源。&lt;/p&gt;&lt;p&gt;比 C6 幸运的是：C6 的 LP I2C 钉死在 &lt;code&gt;6 / 7&lt;/code&gt;，恰好撞上 80MHz SPI 的 SCLK / MOSI；而 S3 的 RTC I2C 只占 &lt;code&gt;0–3&lt;/code&gt;，与 80MHz SPI 的 &lt;code&gt;11 / 12 / 13&lt;/code&gt; 互不冲突，「深睡采传感器」和「高速刷屏」可以共存，不用取舍。SCL 优先选 &lt;code&gt;2&lt;/code&gt;（&lt;code&gt;0&lt;/code&gt; 是 strapping 兼 BOOT 键），SDA 选 &lt;code&gt;1&lt;/code&gt; 或 &lt;code&gt;3&lt;/code&gt; 都行。&lt;/p&gt;&lt;h2 id=&quot;decision&quot; tabindex=&quot;-1&quot;&gt;选引脚决策 &lt;a class=&quot;header-anchor&quot; href=&quot;#decision&quot; aria-label=&quot;Permalink to &amp;quot;选引脚决策 {#decision}&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;&lt;li&gt;高速 SPI（屏幕 / 外部 flash）→ 固定 &lt;code&gt;12 / 11&lt;/code&gt;，要读再加 &lt;code&gt;13&lt;/code&gt;；CS 用空着的 &lt;code&gt;10&lt;/code&gt;。Arduino 默认 SPI 恰好就是这一组，照默认接即可&lt;/li&gt;&lt;li&gt;I2C / UART1 / PWM / WS2812 / TWAI(CAN) / I2S / 并口 LCD / 摄像头 / SD 卡（SDMMC，1/4/8 线）[11] → 都走 GPIO 矩阵，&lt;strong&gt;没有固定引脚&lt;/strong&gt;，任意自由脚都行——不像 C6 的 SDIO 钉死在 &lt;code&gt;18–23&lt;/code&gt;&lt;/li&gt;&lt;li&gt;USB host / 自定义 USB 设备（U 盘 / 键盘 / MSC……）→ 固定 &lt;code&gt;19 / 20&lt;/code&gt;，S3 独有的 USB OTG [1]；与 USB Serial/JTAG 共用这对脚，启用 OTG 后烧录调试改走串口&lt;/li&gt;&lt;li&gt;I2C 记得上拉。Arduino 核默认 &lt;code&gt;SDA=8&lt;/code&gt; / &lt;code&gt;SCL=9&lt;/code&gt; [6]——这两个脚本来就自由，不像 C3 还牵扯 strapping&lt;/li&gt;&lt;li&gt;ADC → 优先 &lt;code&gt;GPIO1–10&lt;/code&gt;（ADC1）；&lt;code&gt;GPIO11–20&lt;/code&gt; 的 ADC2 与 Wi-Fi 共用，Wi-Fi 忙时读取会失败 [9]&lt;/li&gt;&lt;li&gt;电容触摸 → &lt;code&gt;GPIO1–14&lt;/code&gt;（T1–T14）[6]，还可作深睡唤醒源 [12]&lt;/li&gt;&lt;li&gt;深度睡眠唤醒 → &lt;code&gt;GPIO0–21&lt;/code&gt;（RTC 域）[12]，多到不用抢&lt;/li&gt;&lt;li&gt;深睡期间跑 ULP 采 I2C → SDA=&lt;code&gt;1/3&lt;/code&gt;、SCL=&lt;code&gt;0/2&lt;/code&gt;，与高速 SPI 不冲突，见&lt;a href=&quot;#ulp&quot;&gt;深睡与 ULP 引脚&lt;/a&gt;&lt;/li&gt;&lt;li&gt;上电敏感负载（继电器 / MOS 驱动）→ 避开 &lt;code&gt;0 / 45 / 46&lt;/code&gt;（strapping，&lt;code&gt;45&lt;/code&gt; 被拉高更是直接起不来）、&lt;code&gt;19 / 20&lt;/code&gt;（USB）和 &lt;code&gt;43&lt;/code&gt;（复位后输出 ROM 日志），首选 &lt;code&gt;4–7 / 21 / 38–42&lt;/code&gt;&lt;/li&gt;&lt;li&gt;八线 PSRAM 模组（R8 / WROOM-2）→ &lt;code&gt;35–37&lt;/code&gt; 当作不存在；&lt;code&gt;22–25&lt;/code&gt; 芯片就没有，模组上 &lt;code&gt;26–34&lt;/code&gt; 也当作不存在（裸片画板时非八线配置的 &lt;code&gt;33 / 34&lt;/code&gt; 可用）；V 后缀（1.8V PSRAM）连 &lt;code&gt;47 / 48&lt;/code&gt; 都变 1.8V 电平&lt;/li&gt;&lt;/ol&gt;&lt;h2 id=&quot;sources&quot; tabindex=&quot;-1&quot;&gt;数据来源 &lt;a class=&quot;header-anchor&quot; href=&quot;#sources&quot; aria-label=&quot;Permalink to &amp;quot;数据来源 {#sources}&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;核验于 2026-08-31。文中及引脚说明里的 &lt;code&gt;[n]&lt;/code&gt; 编号对应以下来源：&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;https://documentation.espressif.com/esp32-s3_datasheet_en.html&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;ESP32-S3 Datasheet — Boot Configurations 与封装引脚表&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-reference/peripherals/gpio.html&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;ESP-IDF — GPIO &amp;amp; RTC GPIO (ESP32-S3)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-reference/peripherals/spi_master.html&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;ESP-IDF — SPI Master Driver (ESP32-S3)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://docs.espressif.com/projects/esptool/en/latest/esp32s3/advanced-topics/boot-mode-selection.html&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;esptool — Boot Mode Selection (ESP32-S3)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32s3/esp32-s3-devkitc-1/user_guide_v1.1.html&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;ESP32-S3-DevKitC-1 User Guide v1.1&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/espressif/arduino-esp32/blob/master/variants/esp32s3/pins_arduino.h&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;arduino-esp32 — variants/esp32s3/pins_arduino.h&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-reference/system/ulp-risc-v.html&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;ESP-IDF — ULP RISC-V Coprocessor (ESP32-S3)：RTC I2C 固定引脚&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://documentation.espressif.com/esp32-s3-wroom-1_wroom-1u_datasheet_en.html&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;ESP32-S3-WROOM-1/1U Datasheet：模组引出引脚&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-reference/peripherals/adc/adc_oneshot.html&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;ESP-IDF — ADC Oneshot (ESP32-S3)：ADC2 与 Wi-Fi 共用&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://docs.espressif.com/projects/esp-hardware-design-guidelines/en/latest/esp32s3/schematic-checklist.html&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;ESP Hardware Design Guidelines — ESP32-S3 Schematic Checklist：strapping 默认电平与 VDD_SPI&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-reference/peripherals/sdmmc_host.html&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;ESP-IDF — SDMMC Host (ESP32-S3)：任意 GPIO、1/4/8 线&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-reference/system/sleep_modes.html&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;ESP-IDF — Sleep Modes (ESP32-S3)：唤醒源与 RTC GPIO 范围&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-reference/peripherals/lcd/index.html&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;ESP-IDF — LCD (ESP32-S3)：i80 / RGB 并口引脚经 GPIO 矩阵任意路由&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;</content>
  </entry>
  <entry>
    <title>ESP32-C6 GPIO 速查</title>
    <link href="https://lsun.net/posts/esp32-c6-gpio/"/>
    <id>https://lsun.net/posts/esp32-c6-gpio/</id>
    <updated>2026-08-31T00:00:00Z</updated>
    <summary>ESP32-C6 各 GPIO 的可用性速查, 标出被 flash 占用、模组未引出和带使用前提的引脚.</summary>
    <category term="esp32"/><category term="硬件"/>
    <content type="html">&lt;h1 id=&quot;esp32-c6-gpio-速查&quot; tabindex=&quot;-1&quot;&gt;ESP32-C6 GPIO 速查 &lt;a class=&quot;header-anchor&quot; href=&quot;#esp32-c6-gpio-速查&quot; aria-label=&quot;Permalink to &amp;quot;ESP32-C6 GPIO 速查&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;GPIO 编号 &lt;code&gt;0–30&lt;/code&gt;，其中 &lt;code&gt;GPIO14&lt;/code&gt; 只在内置 flash 的 QFN32 变体上存在，&lt;code&gt;GPIO24–30&lt;/code&gt; 被 flash 占用——常用的 WROOM-1 模组（QFN40）实际引出 23 个，基本自由的 17 个（绿点），其余带前提。点击引脚看说明，用筛选按钮找可用脚。&lt;/p&gt;&lt;div class=&quot;pv&quot;&gt;&lt;div class=&quot;pv-filters&quot; role=&quot;group&quot; aria-label=&quot;按功能筛选引脚&quot;&gt;&lt;button class=&quot;on&quot;&gt;全部&lt;/button&gt;&lt;button class=&quot;&quot;&gt;⚡ 80MHz SPI&lt;/button&gt;&lt;button class=&quot;&quot;&gt;✅ 自由引脚&lt;/button&gt;&lt;button class=&quot;&quot;&gt;ADC&lt;/button&gt;&lt;button class=&quot;&quot;&gt;💤 深睡唤醒&lt;/button&gt;&lt;button class=&quot;&quot;&gt;Strapping&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;pv-board&quot; style=&quot;--pv-rows:13;&quot;&gt;&lt;div class=&quot;pv-chip&quot;&gt;&lt;b&gt;ESP32-C6&lt;/b&gt;&lt;span&gt;RISC-V · QFN40&lt;/span&gt;&lt;/div&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:1;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO0&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;ADC1_CH0&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:2;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO1&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;ADC1_CH1&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:3;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO2&lt;/span&gt;&lt;span class=&quot;pv-tag--spi pv-tag&quot;&gt;FSPIQ=MISO&lt;/span&gt;&lt;span class=&quot;pv-tag--hot pv-tag&quot;&gt;80M&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;ADC1_CH2&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:4;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO3&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;ADC1_CH3&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:5;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO4&lt;/span&gt;&lt;span class=&quot;pv-tag--spi pv-tag&quot;&gt;FSPIHD&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;ADC1_CH4&lt;/span&gt;&lt;span class=&quot;pv-tag--strap pv-tag&quot;&gt;Strap&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:6;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO5&lt;/span&gt;&lt;span class=&quot;pv-tag--spi pv-tag&quot;&gt;FSPIWP&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;ADC1_CH5&lt;/span&gt;&lt;span class=&quot;pv-tag--strap pv-tag&quot;&gt;Strap&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:7;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO6&lt;/span&gt;&lt;span class=&quot;pv-tag--spi pv-tag&quot;&gt;FSPICLK=SCLK&lt;/span&gt;&lt;span class=&quot;pv-tag--hot pv-tag&quot;&gt;80M&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;ADC1_CH6&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:8;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO7&lt;/span&gt;&lt;span class=&quot;pv-tag--spi pv-tag&quot;&gt;FSPID=MOSI&lt;/span&gt;&lt;span class=&quot;pv-tag--hot pv-tag&quot;&gt;80M&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:9;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--caution pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO8&lt;/span&gt;&lt;span class=&quot;pv-tag--strap pv-tag&quot;&gt;Strap ↑&lt;/span&gt;&lt;span class=&quot;pv-tag--misc pv-tag&quot;&gt;板载 WS2812&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:10;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--caution pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO9&lt;/span&gt;&lt;span class=&quot;pv-tag--strap pv-tag&quot;&gt;Strap&lt;/span&gt;&lt;span class=&quot;pv-tag--misc pv-tag&quot;&gt;BOOT 键&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:11;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO10&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:12;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO11&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:13;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--caution pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO12&lt;/span&gt;&lt;span class=&quot;pv-tag--usb pv-tag&quot;&gt;USB D−&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:1;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--caution pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO13&lt;/span&gt;&lt;span class=&quot;pv-tag--usb pv-tag&quot;&gt;USB D+&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:2;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--avoid pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO14&lt;/span&gt;&lt;span class=&quot;pv-tag--misc pv-tag&quot;&gt;仅 QFN32&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:3;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO15&lt;/span&gt;&lt;span class=&quot;pv-tag--strap pv-tag&quot;&gt;Strap&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:4;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--caution pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO16&lt;/span&gt;&lt;span class=&quot;pv-tag--spi pv-tag&quot;&gt;FSPICS0&lt;/span&gt;&lt;span class=&quot;pv-tag--uart pv-tag&quot;&gt;U0TXD&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:5;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--caution pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO17&lt;/span&gt;&lt;span class=&quot;pv-tag--uart pv-tag&quot;&gt;U0RXD&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:6;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO18&lt;/span&gt;&lt;span class=&quot;pv-tag--misc pv-tag&quot;&gt;SDIO_CMD&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:7;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO19&lt;/span&gt;&lt;span class=&quot;pv-tag--misc pv-tag&quot;&gt;SDIO_CLK&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:8;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO20&lt;/span&gt;&lt;span class=&quot;pv-tag--misc pv-tag&quot;&gt;SDIO_DATA0&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:9;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO21&lt;/span&gt;&lt;span class=&quot;pv-tag--misc pv-tag&quot;&gt;SDIO_DATA1&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:10;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO22&lt;/span&gt;&lt;span class=&quot;pv-tag--misc pv-tag&quot;&gt;SDIO_DATA2&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:11;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO23&lt;/span&gt;&lt;span class=&quot;pv-tag--misc pv-tag&quot;&gt;SDIO_DATA3&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:12;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--avoid pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO24–30&lt;/span&gt;&lt;span class=&quot;pv-tag--flash pv-tag&quot;&gt;flash 占用&lt;/span&gt;&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;pv-detail&quot; aria-live=&quot;polite&quot;&gt;&lt;p class=&quot;pv-hint&quot;&gt; 点击任意引脚查看说明 —— 绿点自由使用，橙点有前提，红点勿用。 &lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;h2 id=&quot;spi-80mhz&quot; tabindex=&quot;-1&quot;&gt;SPI 跑满 80MHz &lt;a class=&quot;header-anchor&quot; href=&quot;#spi-80mhz&quot; aria-label=&quot;Permalink to &amp;quot;SPI 跑满 80MHz {#spi-80mhz}&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;和 &lt;a href=&quot;https://lsun.net/posts/esp32-c3-gpio/&quot;&gt;C3&lt;/a&gt; 一样，SPI2 最高 80MHz 的前提是&lt;strong&gt;走 IO_MUX 直连&lt;/strong&gt;：ESP-IDF 驱动只有在 bus 引脚（SCLK / MOSI / MISO 中实际用到的）全部落在 IO_MUX 位置时才走直连；任何一个不匹配，整条总线就静默改走 GPIO 矩阵，没有任何报错或日志。矩阵路径官方只保证 40MHz 及以下的行为与直连一致 [3]，而分频不看路由，配 80MHz 引脚上照样输出 80MHz——超规格带病跑，可能点得亮，也可能间歇花屏。&lt;/p&gt;&lt;table tabindex=&quot;0&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;信号&lt;/th&gt;&lt;th style=&quot;text-align:center;&quot;&gt;IO_MUX 引脚&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;SCLK (FSPICLK)&lt;/td&gt;&lt;td style=&quot;text-align:center;&quot;&gt;GPIO6&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;MOSI (FSPID)&lt;/td&gt;&lt;td style=&quot;text-align:center;&quot;&gt;GPIO7&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;MISO (FSPIQ)&lt;/td&gt;&lt;td style=&quot;text-align:center;&quot;&gt;GPIO2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CS0 (FSPICS0)&lt;/td&gt;&lt;td style=&quot;text-align:center;&quot;&gt;GPIO16（默认串口 TX，别占）&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;CS 不算 bus 引脚，走 GPIO 矩阵也不影响直连，而 C6 的 CS0 IO_MUX 位置 &lt;code&gt;GPIO16&lt;/code&gt; 恰好是默认串口 TX——别为一个 CS 牺牲串口，随便挑个自由脚就行。注意 Arduino 核的默认 SPI 引脚（&lt;code&gt;SS=18 / MOSI=19 / MISO=20 / SCK=21&lt;/code&gt; [6]）与 IO_MUX 位置不重合，走的是矩阵，只在 40MHz 内可靠——像 TFT_eSPI 这样自己指定引脚的库，按上表填即可。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;接线示例&lt;/strong&gt;（以 ST7789 屏为例，只写不读，MISO 不接）：&lt;/p&gt;&lt;table tabindex=&quot;0&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align:center;&quot;&gt;SCLK&lt;/th&gt;&lt;th style=&quot;text-align:center;&quot;&gt;MOSI&lt;/th&gt;&lt;th style=&quot;text-align:center;&quot;&gt;CS&lt;/th&gt;&lt;th style=&quot;text-align:center;&quot;&gt;DC&lt;/th&gt;&lt;th style=&quot;text-align:center;&quot;&gt;RST&lt;/th&gt;&lt;th style=&quot;text-align:center;&quot;&gt;BLK&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align:center;&quot;&gt;GPIO6&lt;/td&gt;&lt;td style=&quot;text-align:center;&quot;&gt;GPIO7&lt;/td&gt;&lt;td style=&quot;text-align:center;&quot;&gt;GPIO18&lt;/td&gt;&lt;td style=&quot;text-align:center;&quot;&gt;GPIO10&lt;/td&gt;&lt;td style=&quot;text-align:center;&quot;&gt;GPIO11&lt;/td&gt;&lt;td style=&quot;text-align:center;&quot;&gt;GPIO3&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class=&quot;vp-code-group&quot;&gt;&lt;div class=&quot;tabs&quot;&gt;&lt;input type=&quot;radio&quot; name=&quot;group-ssAMz&quot; id=&quot;tab-vAHRf27&quot; checked&gt;&lt;label data-title=&quot;ESP-IDF&quot; for=&quot;tab-vAHRf27&quot;&gt;ESP-IDF&lt;/label&gt;&lt;input type=&quot;radio&quot; name=&quot;group-ssAMz&quot; id=&quot;tab-mwgTZ8P&quot;&gt;&lt;label data-title=&quot;TFT_eSPI&quot; for=&quot;tab-mwgTZ8P&quot;&gt;TFT_eSPI&lt;/label&gt;&lt;/div&gt;&lt;div class=&quot;blocks&quot;&gt;&lt;div class=&quot;language-c active line-numbers-mode&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;c&lt;/span&gt;&lt;pre class=&quot;shiki one-dark-pro vp-code&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#7F848E;font-style:italic;&quot;&gt;// bus 引脚匹配 IO_MUX 后，驱动自动走直连&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#56B6C2;&quot;&gt;spi_bus_config_t&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt; buscfg &lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;    .sclk_io_num &lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt; 6&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;    .mosi_io_num &lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt; 7&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;    .miso_io_num &lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#7F848E;font-style:italic;&quot;&gt;   // 只写不读&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;    .quadwp_io_num &lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;    .quadhd_io_num &lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#56B6C2;&quot;&gt;spi_device_interface_config_t&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt; devcfg &lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;    .clock_speed_hz &lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt; SPI_MASTER_FREQ_80M,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;    .spics_io_num &lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt; 18&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#7F848E;font-style:italic;&quot;&gt;    // ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;line-numbers-wrapper&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;language-c line-numbers-mode&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;c&lt;/span&gt;&lt;pre class=&quot;shiki one-dark-pro vp-code&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#7F848E;font-style:italic;&quot;&gt;// User_Setup.h&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;#define&lt;/span&gt;&lt;span style=&quot;color:#61AFEF;&quot;&gt; TFT_SCLK&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt; 6&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;#define&lt;/span&gt;&lt;span style=&quot;color:#61AFEF;&quot;&gt; TFT_MOSI&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt; 7&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;#define&lt;/span&gt;&lt;span style=&quot;color:#61AFEF;&quot;&gt; TFT_CS&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;   18&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;#define&lt;/span&gt;&lt;span style=&quot;color:#61AFEF;&quot;&gt; TFT_DC&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;   10&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;#define&lt;/span&gt;&lt;span style=&quot;color:#61AFEF;&quot;&gt; TFT_RST&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;  11&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;#define&lt;/span&gt;&lt;span style=&quot;color:#61AFEF;&quot;&gt; TFT_BL&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;   3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;#define&lt;/span&gt;&lt;span style=&quot;color:#61AFEF;&quot;&gt; TFT_BACKLIGHT_ON&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt; HIGH&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;#define&lt;/span&gt;&lt;span style=&quot;color:#61AFEF;&quot;&gt; SPI_FREQUENCY&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt; 80000000&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;line-numbers-wrapper&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;h2 id=&quot;lp&quot; tabindex=&quot;-1&quot;&gt;深睡与 LP 引脚 &lt;a class=&quot;header-anchor&quot; href=&quot;#lp&quot; aria-label=&quot;Permalink to &amp;quot;深睡与 LP 引脚 {#lp}&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;C6 比 C3 多了一个 LP（低功耗）核心：深度睡眠时主核断电，LP 核心还能继续跑——典型玩法是深睡中低功耗轮询传感器，有事再唤醒主核。但 LP 世界只有 &lt;code&gt;GPIO0–7&lt;/code&gt;，且 LP 外设走 LP IO_MUX，引脚&lt;strong&gt;固定、不可经 GPIO 矩阵改道&lt;/strong&gt; [7]：&lt;/p&gt;&lt;table tabindex=&quot;0&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;功能&lt;/th&gt;&lt;th style=&quot;text-align:center;&quot;&gt;引脚&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;深睡唤醒&lt;/td&gt;&lt;td style=&quot;text-align:center;&quot;&gt;&lt;code&gt;0–7&lt;/code&gt; 任意&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;LP I2C&lt;/td&gt;&lt;td style=&quot;text-align:center;&quot;&gt;SDA=GPIO6 / SCL=GPIO7&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;LP UART&lt;/td&gt;&lt;td style=&quot;text-align:center;&quot;&gt;RX=GPIO4 / TX=GPIO5&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;取舍点：LP I2C 的 &lt;code&gt;6 / 7&lt;/code&gt; 正是 80MHz SPI 的 SCLK / MOSI，「深睡采传感器」和「高速刷屏」在引脚上互斥，规划时先定谁优先。这个约束只管 LP 世界——主核醒着时 I2C / UART 照常走 GPIO 矩阵，任意脚都行。&lt;/p&gt;&lt;h2 id=&quot;decision&quot; tabindex=&quot;-1&quot;&gt;选引脚决策 &lt;a class=&quot;header-anchor&quot; href=&quot;#decision&quot; aria-label=&quot;Permalink to &amp;quot;选引脚决策 {#decision}&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;&lt;li&gt;高速 SPI（屏幕 / 外部 flash）→ 固定 &lt;code&gt;6 / 7&lt;/code&gt;，要读再加 &lt;code&gt;2&lt;/code&gt;；CS 任意自由脚（IO_MUX 的 CS0 在 &lt;code&gt;16&lt;/code&gt;，那是默认串口 TX，别占）&lt;/li&gt;&lt;li&gt;I2C / UART1 / PWM / WS2812 / TWAI(CAN) / I2S → 都走 GPIO 矩阵，&lt;strong&gt;没有固定引脚&lt;/strong&gt;，任意自由脚都行&lt;/li&gt;&lt;li&gt;I2C 记得上拉。Arduino 核默认 &lt;code&gt;SDA=23&lt;/code&gt; / &lt;code&gt;SCL=22&lt;/code&gt; [6]——这两个脚本来就自由，不像 C3 还牵扯 strapping&lt;/li&gt;&lt;li&gt;ADC → &lt;code&gt;GPIO0–6&lt;/code&gt;（ADC1 七个通道）；C6 没有 ADC2，也就没有 C3 那个 ADC2 硬件缺陷的坑&lt;/li&gt;&lt;li&gt;深度睡眠唤醒 → &lt;code&gt;GPIO0–7&lt;/code&gt;（LP 域），比 C3 多两个&lt;/li&gt;&lt;li&gt;深睡期间跑 LP 核心 → 引脚固定且与 80MHz SPI 抢 &lt;code&gt;6 / 7&lt;/code&gt;，见&lt;a href=&quot;#lp&quot;&gt;深睡与 LP 引脚&lt;/a&gt;&lt;/li&gt;&lt;li&gt;上电敏感负载（继电器 / MOS 驱动）→ 避开 &lt;code&gt;8 / 9&lt;/code&gt;（boot strapping）、&lt;code&gt;12 / 13&lt;/code&gt;（USB）和 &lt;code&gt;16&lt;/code&gt;（复位后输出 ROM 日志），首选 &lt;code&gt;3 / 10 / 11 / 18–23&lt;/code&gt;&lt;/li&gt;&lt;li&gt;SDIO slave 从机 → 固定 &lt;code&gt;18–23&lt;/code&gt;；不用 SDIO 时 &lt;code&gt;4 / 5&lt;/code&gt; 的 strapping 电平无影响，放心用&lt;/li&gt;&lt;li&gt;模组上 &lt;code&gt;GPIO24–30&lt;/code&gt; 当作不存在（QFN40 裸片画板时它们接自己的 flash）；&lt;code&gt;GPIO14&lt;/code&gt; 只有 QFN32 内置 flash 变体才有，QFN40 上本来就不存在&lt;/li&gt;&lt;/ol&gt;&lt;h2 id=&quot;sources&quot; tabindex=&quot;-1&quot;&gt;数据来源 &lt;a class=&quot;header-anchor&quot; href=&quot;#sources&quot; aria-label=&quot;Permalink to &amp;quot;数据来源 {#sources}&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;核验于 2026-08-31。文中及引脚说明里的 &lt;code&gt;[n]&lt;/code&gt; 编号对应以下来源：&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;https://documentation.espressif.com/esp32-c6_datasheet_en.html&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;ESP32-C6 Datasheet — Strapping Pins（表 3-4 / 3-7）与封装引脚表&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://docs.espressif.com/projects/esp-idf/en/latest/esp32c6/api-reference/peripherals/gpio.html&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;ESP-IDF — GPIO &amp;amp; RTC GPIO (ESP32-C6)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://docs.espressif.com/projects/esp-idf/en/latest/esp32c6/api-reference/peripherals/spi_master.html&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;ESP-IDF — SPI Master Driver (ESP32-C6)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://docs.espressif.com/projects/esptool/en/latest/esp32c6/advanced-topics/boot-mode-selection.html&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;esptool — Boot Mode Selection (ESP32-C6)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32c6/esp32-c6-devkitc-1/user_guide.html&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;ESP32-C6-DevKitC-1 User Guide&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/espressif/arduino-esp32/blob/master/variants/esp32c6/pins_arduino.h&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;arduino-esp32 — variants/esp32c6/pins_arduino.h&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://docs.espressif.com/projects/esp-idf/en/latest/esp32c6/api-reference/system/ulp-lp-core.html&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;ESP-IDF — ULP LP Core (ESP32-C6)：LP I2C / LP UART 固定引脚&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;</content>
  </entry>
  <entry>
    <title>ESP32-C3 GPIO 速查</title>
    <link href="https://lsun.net/posts/esp32-c3-gpio/"/>
    <id>https://lsun.net/posts/esp32-c3-gpio/</id>
    <updated>2026-08-31T00:00:00Z</updated>
    <summary>ESP32-C3 全部 22 个 GPIO 的可用性速查, 哪些完全自由, 哪些带前提, 点击引脚看说明.</summary>
    <category term="esp32"/><category term="硬件"/>
    <content type="html">&lt;h1 id=&quot;esp32-c3-gpio-速查&quot; tabindex=&quot;-1&quot;&gt;ESP32-C3 GPIO 速查 &lt;a class=&quot;header-anchor&quot; href=&quot;#esp32-c3-gpio-速查&quot; aria-label=&quot;Permalink to &amp;quot;ESP32-C3 GPIO 速查&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;共 22 个 GPIO（&lt;code&gt;0–21&lt;/code&gt;），模组实际引出 15 个，其中完全自由的 8 个（绿点），其余带前提。点击引脚看说明，用筛选按钮找可用脚。&lt;/p&gt;&lt;div class=&quot;pv&quot;&gt;&lt;div class=&quot;pv-filters&quot; role=&quot;group&quot; aria-label=&quot;按功能筛选引脚&quot;&gt;&lt;button class=&quot;on&quot;&gt;全部&lt;/button&gt;&lt;button class=&quot;&quot;&gt;⚡ 80MHz SPI&lt;/button&gt;&lt;button class=&quot;&quot;&gt;✅ 自由引脚&lt;/button&gt;&lt;button class=&quot;&quot;&gt;ADC&lt;/button&gt;&lt;button class=&quot;&quot;&gt;💤 深睡唤醒&lt;/button&gt;&lt;button class=&quot;&quot;&gt;Strapping&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;pv-board&quot; style=&quot;--pv-rows:8;&quot;&gt;&lt;div class=&quot;pv-chip&quot;&gt;&lt;b&gt;ESP32-C3&lt;/b&gt;&lt;span&gt;RISC-V · QFN32&lt;/span&gt;&lt;/div&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:1;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO0&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;ADC1_CH0&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:2;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO1&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;ADC1_CH1&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:3;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--caution pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO2&lt;/span&gt;&lt;span class=&quot;pv-tag--spi pv-tag&quot;&gt;FSPIQ=MISO&lt;/span&gt;&lt;span class=&quot;pv-tag--hot pv-tag&quot;&gt;80M&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;ADC1_CH2&lt;/span&gt;&lt;span class=&quot;pv-tag--strap pv-tag&quot;&gt;Strap&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:4;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO3&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;ADC1_CH3&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:5;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO4&lt;/span&gt;&lt;span class=&quot;pv-tag--spi pv-tag&quot;&gt;FSPIHD&lt;/span&gt;&lt;span class=&quot;pv-tag--adc pv-tag&quot;&gt;ADC1_CH4&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:6;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO5&lt;/span&gt;&lt;span class=&quot;pv-tag--spi pv-tag&quot;&gt;FSPIWP&lt;/span&gt;&lt;span class=&quot;pv-tag--misc pv-tag&quot;&gt;ADC2 ✗&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:7;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO6&lt;/span&gt;&lt;span class=&quot;pv-tag--spi pv-tag&quot;&gt;FSPICLK=SCLK&lt;/span&gt;&lt;span class=&quot;pv-tag--hot pv-tag&quot;&gt;80M&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--left pv-row&quot; style=&quot;--pv-row:8;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO7&lt;/span&gt;&lt;span class=&quot;pv-tag--spi pv-tag&quot;&gt;FSPID=MOSI&lt;/span&gt;&lt;span class=&quot;pv-tag--hot pv-tag&quot;&gt;80M&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:1;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--caution pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO8&lt;/span&gt;&lt;span class=&quot;pv-tag--strap pv-tag&quot;&gt;Strap ↑&lt;/span&gt;&lt;span class=&quot;pv-tag--misc pv-tag&quot;&gt;板载 WS2812&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:2;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--caution pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO9&lt;/span&gt;&lt;span class=&quot;pv-tag--strap pv-tag&quot;&gt;Strap&lt;/span&gt;&lt;span class=&quot;pv-tag--misc pv-tag&quot;&gt;BOOT 键&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:3;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--free pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO10&lt;/span&gt;&lt;span class=&quot;pv-tag--spi pv-tag&quot;&gt;FSPICS0=CS&lt;/span&gt;&lt;span class=&quot;pv-tag--hot pv-tag&quot;&gt;80M&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:4;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--avoid pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO11–17&lt;/span&gt;&lt;span class=&quot;pv-tag--flash pv-tag&quot;&gt;flash 占用&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:5;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--caution pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO18&lt;/span&gt;&lt;span class=&quot;pv-tag--usb pv-tag&quot;&gt;USB D−&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:6;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--caution pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO19&lt;/span&gt;&lt;span class=&quot;pv-tag--usb pv-tag&quot;&gt;USB D+&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:7;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--caution pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO20&lt;/span&gt;&lt;span class=&quot;pv-tag--uart pv-tag&quot;&gt;U0RXD&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;pv-row--right pv-row&quot; style=&quot;--pv-row:8;&quot; aria-pressed=&quot;false&quot;&gt;&lt;span class=&quot;pv-pin--caution pv-pin&quot;&gt;&lt;i class=&quot;pv-dot&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;GPIO21&lt;/span&gt;&lt;span class=&quot;pv-tag--uart pv-tag&quot;&gt;U0TXD&lt;/span&gt;&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;pv-detail&quot; aria-live=&quot;polite&quot;&gt;&lt;p class=&quot;pv-hint&quot;&gt; 点击任意引脚查看说明 —— 绿点自由使用，橙点有前提，红点勿用。 &lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;h2 id=&quot;spi-80mhz&quot; tabindex=&quot;-1&quot;&gt;SPI 跑满 80MHz &lt;a class=&quot;header-anchor&quot; href=&quot;#spi-80mhz&quot; aria-label=&quot;Permalink to &amp;quot;SPI 跑满 80MHz {#spi-80mhz}&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;SPI2 最高能跑 80MHz，前提是&lt;strong&gt;走 IO_MUX 直连&lt;/strong&gt;：ESP-IDF 驱动只有在 bus 引脚（SCLK / MOSI / MISO 中实际用到的）全部落在 IO_MUX 位置时才走直连；任何一个不匹配，整条总线就静默改走 GPIO 矩阵，没有任何报错或日志。矩阵路径官方只保证 40MHz 及以下的行为与直连一致 [3]，而分频不看路由，配 80MHz 引脚上照样输出 80MHz——超规格带病跑，可能点得亮，也可能间歇花屏。&lt;/p&gt;&lt;table tabindex=&quot;0&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;信号&lt;/th&gt;&lt;th style=&quot;text-align:center;&quot;&gt;IO_MUX 引脚&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;SCLK (FSPICLK)&lt;/td&gt;&lt;td style=&quot;text-align:center;&quot;&gt;GPIO6&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;MOSI (FSPID)&lt;/td&gt;&lt;td style=&quot;text-align:center;&quot;&gt;GPIO7&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;MISO (FSPIQ)&lt;/td&gt;&lt;td style=&quot;text-align:center;&quot;&gt;GPIO2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CS0 (FSPICS0)&lt;/td&gt;&lt;td style=&quot;text-align:center;&quot;&gt;GPIO10&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;CS 不算 bus 引脚，走 GPIO 矩阵也不影响直连，但 &lt;code&gt;GPIO10&lt;/code&gt; 空着就直接用。注意 Arduino 核的默认 SPI 引脚（&lt;code&gt;SCK=4 / MOSI=6 / MISO=5 / SS=7&lt;/code&gt; [7]）与 IO_MUX 位置不重合，走的是矩阵，只在 40MHz 内可靠——像 TFT_eSPI 这样自己指定引脚的库，按上表填即可。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;接线示例&lt;/strong&gt;（以 ST7789 屏为例，只写不读，MISO 不接）：&lt;/p&gt;&lt;table tabindex=&quot;0&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align:center;&quot;&gt;SCLK&lt;/th&gt;&lt;th style=&quot;text-align:center;&quot;&gt;MOSI&lt;/th&gt;&lt;th style=&quot;text-align:center;&quot;&gt;CS&lt;/th&gt;&lt;th style=&quot;text-align:center;&quot;&gt;DC&lt;/th&gt;&lt;th style=&quot;text-align:center;&quot;&gt;RST&lt;/th&gt;&lt;th style=&quot;text-align:center;&quot;&gt;BLK&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align:center;&quot;&gt;GPIO6&lt;/td&gt;&lt;td style=&quot;text-align:center;&quot;&gt;GPIO7&lt;/td&gt;&lt;td style=&quot;text-align:center;&quot;&gt;GPIO10&lt;/td&gt;&lt;td style=&quot;text-align:center;&quot;&gt;GPIO4&lt;/td&gt;&lt;td style=&quot;text-align:center;&quot;&gt;GPIO5&lt;/td&gt;&lt;td style=&quot;text-align:center;&quot;&gt;GPIO3&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class=&quot;vp-code-group&quot;&gt;&lt;div class=&quot;tabs&quot;&gt;&lt;input type=&quot;radio&quot; name=&quot;group-3RTpD&quot; id=&quot;tab-lgRfBm8&quot; checked&gt;&lt;label data-title=&quot;ESP-IDF&quot; for=&quot;tab-lgRfBm8&quot;&gt;ESP-IDF&lt;/label&gt;&lt;input type=&quot;radio&quot; name=&quot;group-3RTpD&quot; id=&quot;tab-ze4mBVF&quot;&gt;&lt;label data-title=&quot;TFT_eSPI&quot; for=&quot;tab-ze4mBVF&quot;&gt;TFT_eSPI&lt;/label&gt;&lt;/div&gt;&lt;div class=&quot;blocks&quot;&gt;&lt;div class=&quot;language-c active line-numbers-mode&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;c&lt;/span&gt;&lt;pre class=&quot;shiki one-dark-pro vp-code&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#7F848E;font-style:italic;&quot;&gt;// bus 引脚匹配 IO_MUX 后，驱动自动走直连&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#56B6C2;&quot;&gt;spi_bus_config_t&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt; buscfg &lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;    .sclk_io_num &lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt; 6&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;    .mosi_io_num &lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt; 7&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;    .miso_io_num &lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#7F848E;font-style:italic;&quot;&gt;   // 只写不读&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;    .quadwp_io_num &lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;    .quadhd_io_num &lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#56B6C2;&quot;&gt;spi_device_interface_config_t&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt; devcfg &lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;    .clock_speed_hz &lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt; SPI_MASTER_FREQ_80M,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;    .spics_io_num &lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt; 10&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#7F848E;font-style:italic;&quot;&gt;    // ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;line-numbers-wrapper&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;language-c line-numbers-mode&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;c&lt;/span&gt;&lt;pre class=&quot;shiki one-dark-pro vp-code&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#7F848E;font-style:italic;&quot;&gt;// User_Setup.h&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;#define&lt;/span&gt;&lt;span style=&quot;color:#61AFEF;&quot;&gt; TFT_SCLK&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt; 6&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;#define&lt;/span&gt;&lt;span style=&quot;color:#61AFEF;&quot;&gt; TFT_MOSI&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt; 7&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;#define&lt;/span&gt;&lt;span style=&quot;color:#61AFEF;&quot;&gt; TFT_CS&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;   10&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;#define&lt;/span&gt;&lt;span style=&quot;color:#61AFEF;&quot;&gt; TFT_DC&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;   4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;#define&lt;/span&gt;&lt;span style=&quot;color:#61AFEF;&quot;&gt; TFT_RST&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;  5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;#define&lt;/span&gt;&lt;span style=&quot;color:#61AFEF;&quot;&gt; TFT_BL&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;   3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;#define&lt;/span&gt;&lt;span style=&quot;color:#61AFEF;&quot;&gt; TFT_BACKLIGHT_ON&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt; HIGH&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;#define&lt;/span&gt;&lt;span style=&quot;color:#61AFEF;&quot;&gt; SPI_FREQUENCY&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt; 80000000&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;line-numbers-wrapper&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;h2 id=&quot;decision&quot; tabindex=&quot;-1&quot;&gt;选引脚决策 &lt;a class=&quot;header-anchor&quot; href=&quot;#decision&quot; aria-label=&quot;Permalink to &amp;quot;选引脚决策 {#decision}&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;&lt;li&gt;高速 SPI（屏幕 / 外部 flash）→ 固定 &lt;code&gt;6 / 7&lt;/code&gt;，要读再加 &lt;code&gt;2&lt;/code&gt;；CS 不挑脚，&lt;code&gt;10&lt;/code&gt; 空着就直接用&lt;/li&gt;&lt;li&gt;I2C / UART1 / PWM / WS2812 / CAN / I2S → 都走 GPIO 矩阵，&lt;strong&gt;没有固定引脚&lt;/strong&gt;，任意自由脚都行&lt;/li&gt;&lt;li&gt;I2C 记得上拉。Arduino 核默认 &lt;code&gt;SDA=8&lt;/code&gt; / &lt;code&gt;SCL=9&lt;/code&gt; [7]——I2C 的上拉正好满足这两个 strapping 脚的要求，把它们让给 I2C 等于省出两个自由脚&lt;/li&gt;&lt;li&gt;ADC → 只用 &lt;code&gt;GPIO0–4&lt;/code&gt;（ADC1）；&lt;code&gt;GPIO5&lt;/code&gt; 的 ADC2 有硬件缺陷，官方已放弃支持&lt;/li&gt;&lt;li&gt;深度睡眠唤醒 → 只有 &lt;code&gt;GPIO0–5&lt;/code&gt;（RTC 域）&lt;/li&gt;&lt;li&gt;上电敏感负载（继电器 / MOS 驱动）→ 避开 &lt;code&gt;2 / 8 / 9&lt;/code&gt;（strapping）、&lt;code&gt;18 / 19&lt;/code&gt;（USB）和 &lt;code&gt;21&lt;/code&gt;（复位后输出 ROM 日志），首选 &lt;code&gt;3 / 4 / 5 / 6 / 7 / 10&lt;/code&gt;&lt;/li&gt;&lt;li&gt;模组上 &lt;code&gt;GPIO11–17&lt;/code&gt; 当作不存在；裸片画板时 &lt;code&gt;12–17&lt;/code&gt; 接自己的 flash，&lt;code&gt;11&lt;/code&gt;（VDD_SPI）在 flash 由 3.3V 直供时还能当普通 GPIO 用 [8]&lt;/li&gt;&lt;/ol&gt;&lt;h2 id=&quot;sources&quot; tabindex=&quot;-1&quot;&gt;数据来源 &lt;a class=&quot;header-anchor&quot; href=&quot;#sources&quot; aria-label=&quot;Permalink to &amp;quot;数据来源 {#sources}&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;核验于 2026-08-31。文中及引脚说明里的 &lt;code&gt;[n]&lt;/code&gt; 编号对应以下来源：&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;https://documentation.espressif.com/esp32-c3_datasheet_en.html&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;ESP32-C3 Datasheet — Strapping Pins（表 3-1 / 3-3 / 3-4）&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/api-reference/peripherals/gpio.html&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;ESP-IDF — GPIO &amp;amp; RTC GPIO (ESP32-C3)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/api-reference/peripherals/spi_master.html&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;ESP-IDF — SPI Master Driver (ESP32-C3)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/api-reference/peripherals/adc/adc_oneshot.html&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;ESP-IDF — ADC Oneshot：ADC2 errata&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://docs.espressif.com/projects/esptool/en/latest/esp32c3/advanced-topics/boot-mode-selection.html&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;esptool — Boot Mode Selection (ESP32-C3)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32c3/esp32-c3-devkitm-1/user_guide.html&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;ESP32-C3-DevKitM-1 User Guide&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/espressif/arduino-esp32/blob/master/variants/esp32c3/pins_arduino.h&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;arduino-esp32 — variants/esp32c3/pins_arduino.h&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://docs.espressif.com/projects/esp-hardware-design-guidelines/en/latest/esp32c3/schematic-checklist.html&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;ESP Hardware Design Guidelines — ESP32-C3 Schematic Checklist：VDD_SPI 作 GPIO 与 flash 走线&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;</content>
  </entry>
  <entry>
    <title>迷你 USB HUB 切换器</title>
    <link href="https://lsun.net/posts/usb-hub-switcher/"/>
    <id>https://lsun.net/posts/usb-hub-switcher/</id>
    <updated>2023-08-31T00:00:00Z</updated>
    <summary>2 台主机之间一键切换 4 个 USB 设备的 USB 2.0 HUB, 单侧出线, 小到能直接放桌面.</summary>
    <category term="硬件"/>
    <content type="html">&lt;h1 id=&quot;迷你-usb-hub-切换器&quot; tabindex=&quot;-1&quot;&gt;迷你 USB HUB 切换器 &lt;a class=&quot;header-anchor&quot; href=&quot;#迷你-usb-hub-切换器&quot; aria-label=&quot;Permalink to &amp;quot;迷你 USB HUB 切换器&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;一个支持在 &lt;strong&gt;2 台主机设备&lt;/strong&gt; 之间一键切换 &lt;strong&gt;4 个 USB 设备&lt;/strong&gt; 的 USB 2.0 HUB 切换器 (2 进 4 出).&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://lsun.net/assets/usb-hub-switcher_0.B6FUUUBZ.jpg&quot; alt=&quot;USB HUB 切换器&quot;&gt;&lt;/p&gt;&lt;h2 id=&quot;特点&quot; tabindex=&quot;-1&quot;&gt;特点 &lt;a class=&quot;header-anchor&quot; href=&quot;#特点&quot; aria-label=&quot;Permalink to &amp;quot;特点&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;体积小巧精致, &lt;strong&gt;💡单侧出线💡&lt;/strong&gt;, 比四面八方出线的, 更适合直接放在桌面, 不需要延长按钮也可以让桌面保持整洁.&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://lsun.net/assets/usb-hub-switcher_1.DiPqftPm.jpg&quot; alt=&quot;单板正面&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://lsun.net/assets/usb-hub-switcher_2.B3HeZVX-.jpg&quot; alt=&quot;接口面&quot;&gt;&lt;/p&gt;&lt;h2 id=&quot;原理图与-pcb&quot; tabindex=&quot;-1&quot;&gt;原理图与 PCB &lt;a class=&quot;header-anchor&quot; href=&quot;#原理图与-pcb&quot; aria-label=&quot;Permalink to &amp;quot;原理图与 PCB&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;完整工程已开源到立创开源硬件平台: &lt;a href=&quot;https://oshwhub.com/youngsunli/USB-HUB-qie-huan-qi&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;USB HUB 切换器&lt;/a&gt; (GPL 3.0), 可以直接打开或复刻.&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://lsun.net/assets/usb-hub-switcher_sch.COTPuuvY.webp&quot; alt=&quot;原理图&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://lsun.net/assets/usb-hub-switcher_pcb.Bzq8IJet.webp&quot; alt=&quot;PCB 布局&quot;&gt;&lt;/p&gt;&lt;h2 id=&quot;其他说明&quot; tabindex=&quot;-1&quot;&gt;其他说明 &lt;a class=&quot;header-anchor&quot; href=&quot;#其他说明&quot; aria-label=&quot;Permalink to &amp;quot;其他说明&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;原理图个人喜欢把器件尽量按实际 PCB 布局来摆放, 特别是滤波电容.&lt;/li&gt;&lt;li&gt;不计划考虑 &lt;code&gt;TVS&lt;/code&gt;, 但是芯片自带 &lt;code&gt;ESD&lt;/code&gt; 保护 (HBM 级别).&lt;/li&gt;&lt;li&gt;不计划考虑独立供电, 因为双主机接入时, 供电是充足的; 单主机时, 另一个 &lt;code&gt;Type-C&lt;/code&gt; 可以接供电, 不过注意选择压降低的二极管, 我这里是 &lt;code&gt;SS34F&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;自恢复保险丝 &lt;code&gt;F1&lt;/code&gt; 可以选择封装大小差不多, 保持电流小一点, 动作时间快一点的, 这样更安全, 我这里考虑到需要给 USB 设备充电才选的 3A; 不建议一堆锡连过来, 因为 &lt;code&gt;F1&lt;/code&gt; 可以预防大电流短路烧坏电脑主板.&lt;/li&gt;&lt;li&gt;&lt;code&gt;SL2.1A&lt;/code&gt; 的外置晶振不需要加额外的负载电容.&lt;/li&gt;&lt;li&gt;&lt;code&gt;LED&lt;/code&gt; 指示灯建议使用雾状的或者灯珠带颜色的; 另外 &lt;code&gt;R2&lt;/code&gt; 使用 &lt;code&gt;5K1&lt;/code&gt; 阻值是为了亮度低点不那么刺眼, 同时避免发热影响 &lt;code&gt;F1&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;&lt;code&gt;SW1&lt;/code&gt; 裸板使用的建议选用平头的; 另外不要问我为什么 &lt;code&gt;SW1&lt;/code&gt; 就可以实现 2 路单刀双掷还要加一个开关芯片🤣.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;img src=&quot;https://lsun.net/assets/usb-hub-switcher_3.Cq8MXVN9.jpg&quot; alt=&quot;通电使用&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://lsun.net/assets/usb-hub-switcher_4.CRYWlQaU.jpg&quot; alt=&quot;3D 打印外壳&quot;&gt;&lt;/p&gt;&lt;div class=&quot;tip custom-block&quot;&gt;&lt;p class=&quot;custom-block-title&quot;&gt;实际使用&lt;/p&gt;&lt;p&gt;实际使用了三个多月, 非常稳定, 可放心复刻. 不足之处希望各位大佬指出✍🏻&lt;/p&gt;&lt;/div&gt;</content>
  </entry>
  <entry>
    <title>树莓派温控散热风扇</title>
    <link href="https://lsun.net/posts/raspberry-pi-auto-fan/"/>
    <id>https://lsun.net/posts/raspberry-pi-auto-fan/</id>
    <updated>2020-03-18T00:00:00Z</updated>
    <summary>读 SoC 温度、用三极管开关风扇, 加一段 Python 脚本让树莓派按温度自动散热.</summary>
    <category term="硬件"/>
    <content type="html">&lt;h1 id=&quot;树莓派温控散热风扇&quot; tabindex=&quot;-1&quot;&gt;树莓派温控散热风扇 &lt;a class=&quot;header-anchor&quot; href=&quot;#树莓派温控散热风扇&quot; aria-label=&quot;Permalink to &amp;quot;树莓派温控散热风扇&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;根据树莓派 SoC 的温度智能自动控制风扇的开关, 满足条件: 当温度过高是开启风扇, 温度适宜时关闭风扇.&lt;/p&gt;&lt;h2 id=&quot;获取soc实时温度&quot; tabindex=&quot;-1&quot;&gt;获取SoC实时温度 &lt;a class=&quot;header-anchor&quot; href=&quot;#获取soc实时温度&quot; aria-label=&quot;Permalink to &amp;quot;获取SoC实时温度&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;通过读取 &lt;code&gt;/sys/class/thermal/thermal_zone0/temp&lt;/code&gt; 可以得到一个温度值, 根据&lt;a href=&quot;https://www.raspberrypi.org/documentation/hardware/raspberrypi/frequency-management.md&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;RaspberryPi官方文档&lt;/a&gt;介绍, 并没有独立监控 CPU 温度或者 GPU 温度的传感器, 所以通过该文件获取到的温度实际上是整个 SoC 芯片的温度; 但是 CPU 和 GPU 都在这个芯片上, 所以我以这个温度作为温控阈值参考.&lt;/p&gt;&lt;h4 id=&quot;通过以下命令可以查看当前soc温度-结果除以1000-单位-°c&quot; tabindex=&quot;-1&quot;&gt;通过以下命令可以查看当前SoC温度(结果除以1000, 单位/℃) &lt;a class=&quot;header-anchor&quot; href=&quot;#通过以下命令可以查看当前soc温度-结果除以1000-单位-°c&quot; aria-label=&quot;Permalink to &amp;quot;通过以下命令可以查看当前SoC温度(结果除以1000, 单位/℃)&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h4&gt;&lt;div class=&quot;language-shell line-numbers-mode&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;shell&lt;/span&gt;&lt;pre class=&quot;shiki one-dark-pro vp-code&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#61AFEF;&quot;&gt;pi@raspberrypi:~&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt; $ &lt;/span&gt;&lt;span style=&quot;color:#98C379;&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color:#98C379;&quot;&gt; /sys/class/thermal/thermal_zone0/temp&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#61AFEF;&quot;&gt;42425&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;line-numbers-wrapper&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;&lt;h2 id=&quot;风扇供电问题&quot; tabindex=&quot;-1&quot;&gt;风扇供电问题 &lt;a class=&quot;header-anchor&quot; href=&quot;#风扇供电问题&quot; aria-label=&quot;Permalink to &amp;quot;风扇供电问题&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;可以通过-gpio-针脚直接供电驱动吗&quot; tabindex=&quot;-1&quot;&gt;可以通过 GPIO 针脚直接供电驱动吗? &lt;a class=&quot;header-anchor&quot; href=&quot;#可以通过-gpio-针脚直接供电驱动吗&quot; aria-label=&quot;Permalink to &amp;quot;可以通过 GPIO 针脚直接供电驱动吗?&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;我们无法直接通过 GPIO 来驱动风扇并控制它的开关,&lt;/strong&gt; 因为根据&lt;a href=&quot;https://www.raspberrypi.org/documentation/faqs/#pi-power&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;RaspberryPi官方FAQ文档&lt;/a&gt;介绍, GPIO 的输出电压是 3.3V, 并且安全的最高电流输出是 16mA, 峰值为50mA, 某些 GPIO 针脚默认输出 8mA; 所以即使你的风扇额定电压为 3V, 这么小的电流也难以驱动它, 即使能驱动也不推荐这么干, 一个原因是可能会损坏树莓派, 根据&lt;a href=&quot;https://www.raspberrypi.org/documentation/usage/gpio/README.md&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;RaspberryPi官方GPIO使用文档&lt;/a&gt;明确的警告指出, 不能将电机直接接在 GPIO 针脚上(风扇实际上就是由电机驱动的), 另一个是通过这么小电流驱动的风扇真的能起到散热作用吗?&lt;/p&gt;&lt;h3 id=&quot;通过-5v-针脚或者-3v3-针脚供电&quot; tabindex=&quot;-1&quot;&gt;通过 5V 针脚或者 3V3 针脚供电 &lt;a class=&quot;header-anchor&quot; href=&quot;#通过-5v-针脚或者-3v3-针脚供电&quot; aria-label=&quot;Permalink to &amp;quot;通过 5V 针脚或者 3V3 针脚供电&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;https://pinout.xyz/pinout/pin2_5v_power&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Pinout 5V针脚文档&lt;/a&gt;中指出树莓派的 5V 针脚是直接连通到电源的, 使用 5V 针脚相当于与树莓派并联使用一个电源适配器, 所以根据 &amp;quot;并联分流&amp;quot; 该针脚能提供的电流实际上就等于: &lt;code&gt;(电源适配器的额定最高电流) - (树莓派本身运行所占用的电流)&lt;/code&gt;, 所以假设你使用符合要求的电源适配器, 5V 针脚是完全可以直接驱动额定电压为 5V 的风扇.&lt;br&gt; 而树莓派的 3V3 针脚, &lt;a href=&quot;https://pinout.xyz/pinout/pin1_3v3_power&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Pinout 3V3针脚文档&lt;/a&gt;中也指出了在型号 B+ 之前的电流最高能提供 50mA, 但是在 B+ 之后的树莓派, 3V3 针脚则可以提供高达 500mA 的电流; 所以当使用额定电压为 3V 的风扇时, 使用 3V3 针脚也是可以直接安全的驱动风扇滴.&lt;/p&gt;&lt;h2 id=&quot;如何控制风扇的开关&quot; tabindex=&quot;-1&quot;&gt;如何控制风扇的开关? &lt;a class=&quot;header-anchor&quot; href=&quot;#如何控制风扇的开关&quot; aria-label=&quot;Permalink to &amp;quot;如何控制风扇的开关?&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;当直接将风扇接到合适的电源上, 风扇是始终处于运行状态. 现在我需要根据 SoC 的温度来自动控制它的开关, 所以可以通过给&lt;strong&gt;风扇与电源连接之间加一个开关&lt;/strong&gt;, 然后通过某一个 &lt;strong&gt;GPIO 针脚控制该开关&lt;/strong&gt;, 而对该 GPIO 针脚的控制则可以通过代码&lt;strong&gt;获取 SoC 的温度&lt;/strong&gt;, 并根据&lt;strong&gt;判断温度阈值启停&lt;/strong&gt;也就是开或者关风扇. 最终实现对风扇的自动开关控制.&lt;/p&gt;&lt;h3 id=&quot;使用三极管作为风扇开关&quot; tabindex=&quot;-1&quot;&gt;使用三极管作为风扇开关 &lt;a class=&quot;header-anchor&quot; href=&quot;#使用三极管作为风扇开关&quot; aria-label=&quot;Permalink to &amp;quot;使用三极管作为风扇开关&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;选用合适的三级管,当它仅工作在 &lt;strong&gt;截止状态&lt;/strong&gt; 和 &lt;strong&gt;饱和状态&lt;/strong&gt; 时, 那么该三极管就可以是视作为一个开关.&lt;/p&gt;&lt;h3 id=&quot;使用-python-控制风扇&quot; tabindex=&quot;-1&quot;&gt;使用 Python 控制风扇 &lt;a class=&quot;header-anchor&quot; href=&quot;#使用-python-控制风扇&quot; aria-label=&quot;Permalink to &amp;quot;使用 Python 控制风扇&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;使用以下代码时, 你最有可能修改的是高亮部分的代码&lt;/p&gt;&lt;h4 id=&quot;auto-fan-py&quot; tabindex=&quot;-1&quot;&gt;auto_fan.py &lt;a class=&quot;header-anchor&quot; href=&quot;#auto-fan-py&quot; aria-label=&quot;Permalink to &amp;quot;auto_fan.py&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h4&gt;&lt;div class=&quot;language-python line-numbers-mode&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;python&lt;/span&gt;&lt;pre class=&quot;shiki one-dark-pro vp-code&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#7F848E;font-style:italic;&quot;&gt;#!/usr/bin/python&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#7F848E;font-style:italic;&quot;&gt;# -*- coding: utf-8 -*-&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt; RPi &lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt; GPIO&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt; time &lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt; sleep&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;GPIO&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#61AFEF;&quot;&gt;setmode&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;GPIO&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;BCM&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#7F848E;font-style:italic;&quot;&gt;# 使用BCM引脚模式&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line highlighted&quot;&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;channel &lt;/span&gt;&lt;span style=&quot;color:#56B6C2;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt; 17&lt;/span&gt;&lt;span style=&quot;color:#7F848E;font-style:italic;&quot;&gt;    # 使用BCM17(对应物理引脚号11)接口控制开关&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line highlighted&quot;&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;start_temp &lt;/span&gt;&lt;span style=&quot;color:#56B6C2;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt; 55&lt;/span&gt;&lt;span style=&quot;color:#7F848E;font-style:italic;&quot;&gt; # 启动风扇的温度阈值(℃)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line highlighted&quot;&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;end_temp &lt;/span&gt;&lt;span style=&quot;color:#56B6C2;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt; 48&lt;/span&gt;&lt;span style=&quot;color:#7F848E;font-style:italic;&quot;&gt;   # 关闭风扇的温度阈值(℃)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;GPIO&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#61AFEF;&quot;&gt;setup&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;(channel, &lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;GPIO&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;OUT&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#E06C75;font-style:italic;&quot;&gt;initial&lt;/span&gt;&lt;span style=&quot;color:#56B6C2;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt; GPIO&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;LOW&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#7F848E;font-style:italic;&quot;&gt;# 初始化控制引脚&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;is_high &lt;/span&gt;&lt;span style=&quot;color:#56B6C2;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt; GPIO&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;LOW&lt;/span&gt;&lt;span style=&quot;color:#7F848E;font-style:italic;&quot;&gt; # 用于标记风扇是否打开 避免频繁调用output&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;try&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;    while&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt; True&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#7F848E;font-style:italic;&quot;&gt;        # 获取当前SoC温度&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;        temp &lt;/span&gt;&lt;span style=&quot;color:#56B6C2;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#56B6C2;&quot;&gt; open&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#98C379;&quot;&gt;&amp;#39;/sys/class/thermal/thermal_zone0/temp&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;        temp &lt;/span&gt;&lt;span style=&quot;color:#56B6C2;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#56B6C2;&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;(temp.&lt;/span&gt;&lt;span style=&quot;color:#61AFEF;&quot;&gt;read&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;()) &lt;/span&gt;&lt;span style=&quot;color:#56B6C2;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt; 1000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt; temp &lt;/span&gt;&lt;span style=&quot;color:#56B6C2;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt; start_temp &lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;and&lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt; is_high: &lt;/span&gt;&lt;span style=&quot;color:#7F848E;font-style:italic;&quot;&gt;# 当SoC温度超过启动阈值且风扇处于关闭状态&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;            GPIO&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#61AFEF;&quot;&gt;output&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;(channel, &lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;GPIO&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;HIGH&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;)   &lt;/span&gt;&lt;span style=&quot;color:#7F848E;font-style:italic;&quot;&gt;# 打开风扇&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;            is_high &lt;/span&gt;&lt;span style=&quot;color:#56B6C2;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt; GPIO&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;HIGH&lt;/span&gt;&lt;span style=&quot;color:#7F848E;font-style:italic;&quot;&gt;               # 标记风扇状态为打开&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;        elif&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt; temp &lt;/span&gt;&lt;span style=&quot;color:#56B6C2;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt; end_temp &lt;/span&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;and&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt; is_high:     &lt;/span&gt;&lt;span style=&quot;color:#7F848E;font-style:italic;&quot;&gt;# 当SoC温度低于关闭阈值且风扇处于打开状态&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;            GPIO&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#61AFEF;&quot;&gt;output&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;(channel, &lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;GPIO&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;LOW&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;)    &lt;/span&gt;&lt;span style=&quot;color:#7F848E;font-style:italic;&quot;&gt;# 关闭风扇&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;            is_high &lt;/span&gt;&lt;span style=&quot;color:#56B6C2;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt; GPIO&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;LOW&lt;/span&gt;&lt;span style=&quot;color:#7F848E;font-style:italic;&quot;&gt;                # 标记风扇状态为关闭&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#61AFEF;&quot;&gt;        sleep&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#7F848E;font-style:italic;&quot;&gt;# 每隔10秒监控一次&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;except&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C678DD;&quot;&gt;    pass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#7F848E;font-style:italic;&quot;&gt;# 退出时 重置该引脚&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D19A66;&quot;&gt;GPIO&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#61AFEF;&quot;&gt;cleanup&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;(channel)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;line-numbers-wrapper&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;33&lt;/span&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;tip custom-block&quot;&gt;&lt;p class=&quot;custom-block-title&quot;&gt;关于阈值的选取&lt;/p&gt;&lt;p&gt;这个范围根据自己的喜欢可以自行决定, 我这里选取是根据&lt;a href=&quot;https://www.raspberrypi.org/documentation/hardware/raspberrypi/frequency-management.md&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;RaspberryPi官方文档&lt;/a&gt;对过热保护控制的措施决定的.&lt;br&gt; 硬限制为 85℃, 这个温度太高了, 我不希望我的树莓派到达这个温度才启动风扇.&lt;br&gt; 软限制为 60℃, 这个温度看起来可以接受.&lt;br&gt; 所以为了避免树莓派触发软限制, 我选取一个接近 60℃ 但又不会迅速达到 60℃ 的温度 55℃; 这是启动风扇的温度, 为了避免风扇频繁的在阈值边界开开关关, 关闭风扇的温度可以比启动风扇的温度低几度, 我这里选取 48℃.&lt;/p&gt;&lt;/div&gt;&lt;h2 id=&quot;下面进行实测&quot; tabindex=&quot;-1&quot;&gt;下面进行实测 &lt;a class=&quot;header-anchor&quot; href=&quot;#下面进行实测&quot; aria-label=&quot;Permalink to &amp;quot;下面进行实测&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;实际用到的设备和元器件&quot; tabindex=&quot;-1&quot;&gt;实际用到的设备和元器件: &lt;a class=&quot;header-anchor&quot; href=&quot;#实际用到的设备和元器件&quot; aria-label=&quot;Permalink to &amp;quot;实际用到的设备和元器件:&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;RaspberryPi 4B&lt;/li&gt;&lt;li&gt;2个 5V/100mA 散热风扇&lt;/li&gt;&lt;li&gt;NPN 三极管 2N5551&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;这个 &lt;code&gt;2N5551&lt;/code&gt; 是我随便从积灰的零件工具箱里随手翻出来的, 针脚都有点生锈了(真的很随便, 摸到哪个用哪个, 拿的时候啥型号也没注意看, 是三极管就行😂).&lt;br&gt;&lt;img src=&quot;https://lsun.net/assets/raspberrypi4b-fan-2n5551.ZgpCzSq6.jpg&quot; alt=&quot;2N5551&quot;&gt;&lt;/p&gt;&lt;h3 id=&quot;接线准备&quot; tabindex=&quot;-1&quot;&gt;接线准备 &lt;a class=&quot;header-anchor&quot; href=&quot;#接线准备&quot; aria-label=&quot;Permalink to &amp;quot;接线准备&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h3&gt;&lt;h4 id=&quot;针脚调整&quot; tabindex=&quot;-1&quot;&gt;针脚调整 &lt;a class=&quot;header-anchor&quot; href=&quot;#针脚调整&quot; aria-label=&quot;Permalink to &amp;quot;针脚调整&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;我要在风扇负极上加装三极管开关, 并希望负极与用于控制的 GPIO 接口相邻, 所以我把正极抽出来, 并与另一条相同接头的杜邦线交换接头; 得到负极与 GPIO 相邻双 pin 接头, 正极独立单 pin 接头. 如下图所示:&lt;br&gt;&lt;img src=&quot;https://lsun.net/assets/raspberry-pi-auto-fan_0.B3eUBwOu.jpg&quot; alt=&quot;正极与用于 GPIO 控制的杜邦线交换&quot;&gt;&lt;/p&gt;&lt;h4 id=&quot;在负极上加装三极管&quot; tabindex=&quot;-1&quot;&gt;在负极上加装三极管 &lt;a class=&quot;header-anchor&quot; href=&quot;#在负极上加装三极管&quot; aria-label=&quot;Permalink to &amp;quot;在负极上加装三极管&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h4&gt;&lt;div class=&quot;tip custom-block&quot;&gt;&lt;p class=&quot;custom-block-title&quot;&gt;NPN三极管针脚识别&lt;/p&gt;&lt;p&gt;有字的一面正对自己, 引脚向下, 三跟引脚从左到右分别是:&lt;br&gt; E-发射极、B-基极、C-集电极.&lt;br&gt;&lt;img src=&quot;https://lsun.net/assets/raspberry-pi-auto-fan_1.IQ9Z-3VE.png&quot; alt=&quot;TO-92封装&quot;&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;把负极从中间剪断, 并将 GPIO 线也剪短至一样的长度, 然后将 GPIO 线与三极管的中间引脚也就是&lt;strong&gt;B-基极&lt;/strong&gt;连接.&lt;/p&gt;&lt;div class=&quot;warning custom-block&quot;&gt;&lt;p class=&quot;custom-block-title&quot;&gt;关于三极管进入饱和状态所需的电压&lt;/p&gt;&lt;p&gt;查阅资料后发现 &lt;code&gt;2N5551&lt;/code&gt; 的饱和状态电压是 1V, 而 GPIO 的输出电压是 3.3V, 所以理论上要在它们之间串联一个适当的电阻来控制电压, 但是我在实际面包板测试中, 对 &lt;code&gt;2N5551&lt;/code&gt; 的基极接入 3.3V 一定时间后并没有产生发热现象, 所以最终风扇改装我并没有在它们之间加装电阻.&lt;/p&gt;&lt;/div&gt;&lt;p&gt;然后再将负极剪断的两端分别接在三极管的左右两端, 分别是&lt;strong&gt;E-发射极&lt;/strong&gt;和&lt;strong&gt;C-集电极&lt;/strong&gt;;&lt;br&gt; 保险的接法是从风扇出来那条线(它虽然在风扇的负极, 但是对于三极管来说它带正电)接在&lt;strong&gt;C-集电极&lt;/strong&gt;, 带接头与 GPIO 线相邻的那条线接在&lt;strong&gt;E-发射极&lt;/strong&gt;.&lt;/p&gt;&lt;div class=&quot;tip custom-block&quot;&gt;&lt;p class=&quot;custom-block-title&quot;&gt;关于三极管的电流方向&lt;/p&gt;&lt;p&gt;你可能注意到, 我的接线与上述是相反的. 理论上三极管集电极和发射极之间的电流方向是从集电极流向发射极, 如图所示:&lt;br&gt;&lt;img src=&quot;https://lsun.net/assets/raspberry-pi-auto-fan_3.49xKK9er.png&quot; alt=&quot;电流方向&quot;&gt;&lt;br&gt; 但是用作开关仅工作在 &lt;strong&gt;截止状态&lt;/strong&gt; 和 &lt;strong&gt;饱和状态&lt;/strong&gt; 的三级管似乎在这个时候对极性并没有要求, 因为在饱和状态下, 集电极跟发射极之间理论上是相当于短路的, 所以怎么接应该都没问题. 在我实际面包板测试中, 无论是正接还是反接, 都可以正常控制风扇的开关; 所以, 在下图接线的时候也是很随便的随手抓到哪个线就接哪根线🙃.&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;img src=&quot;https://lsun.net/assets/raspberry-pi-auto-fan_2.BN_VCTy7.jpg&quot; alt=&quot;NPN&quot;&gt;&lt;/p&gt;&lt;h4 id=&quot;对线材以及接口处进行绝缘处理&quot; tabindex=&quot;-1&quot;&gt;对线材以及接口处进行绝缘处理 &lt;a class=&quot;header-anchor&quot; href=&quot;#对线材以及接口处进行绝缘处理&quot; aria-label=&quot;Permalink to &amp;quot;对线材以及接口处进行绝缘处理&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;我使用的是热缩管&lt;br&gt;&lt;img src=&quot;https://lsun.net/assets/raspberry-pi-auto-fan_4.B89iNB6b.jpg&quot; alt=&quot;绝缘处理&quot;&gt;&lt;/p&gt;&lt;h3 id=&quot;安装到树莓派4b&quot; tabindex=&quot;-1&quot;&gt;安装到树莓派4B &lt;a class=&quot;header-anchor&quot; href=&quot;#安装到树莓派4b&quot; aria-label=&quot;Permalink to &amp;quot;安装到树莓派4B&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;将风扇正极接到物理针脚位置 2 或者 4 上, 这两个都是 5V; 根据之前对接口的调整, 风扇的负极跟 GPIO 是相邻的, 所以我选取物理接口 9(接地/负极) 跟 11(BCM17)插入这两根线.&lt;br&gt;&lt;img src=&quot;https://lsun.net/assets/raspberry-pi-auto-fan_7.Bu7_Y8Al.png&quot; alt=&quot;针脚说明&quot;&gt;&lt;/p&gt;&lt;h4 id=&quot;上机效果图&quot; tabindex=&quot;-1&quot;&gt;上机效果图 &lt;a class=&quot;header-anchor&quot; href=&quot;#上机效果图&quot; aria-label=&quot;Permalink to &amp;quot;上机效果图&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;img src=&quot;https://lsun.net/assets/raspberry-pi-auto-fan_6.C5m0QHYf.jpg&quot; alt=&quot;上机效果&quot;&gt;&lt;img src=&quot;https://lsun.net/assets/raspberry-pi-auto-fan_5.Dpm0N77P.jpg&quot; alt=&quot;上机效果&quot;&gt;&lt;/p&gt;&lt;h3 id=&quot;运行温控程序-auto-fan-py&quot; tabindex=&quot;-1&quot;&gt;运行温控程序 auto_fan.py &lt;a class=&quot;header-anchor&quot; href=&quot;#运行温控程序-auto-fan-py&quot; aria-label=&quot;Permalink to &amp;quot;运行温控程序 auto_fan.py&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在你创建该程序的目录下执行命令: &lt;code&gt;python auto_fan.py&lt;/code&gt;&lt;/p&gt;&lt;div class=&quot;language-shell line-numbers-mode&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;shell&lt;/span&gt;&lt;pre class=&quot;shiki one-dark-pro vp-code&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#61AFEF;&quot;&gt;pi@raspberrypi:~&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt; $ &lt;/span&gt;&lt;span style=&quot;color:#98C379;&quot;&gt;python&lt;/span&gt;&lt;span style=&quot;color:#98C379;&quot;&gt; auto_fan.py&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;line-numbers-wrapper&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;在使用官方 Raspbian 桌面版时测试通过, 其他系统可能会出现环境问题. 可自行 Google 解决👌&lt;/p&gt;&lt;h2 id=&quot;还能做些什么&quot; tabindex=&quot;-1&quot;&gt;还能做些什么? &lt;a class=&quot;header-anchor&quot; href=&quot;#还能做些什么&quot; aria-label=&quot;Permalink to &amp;quot;还能做些什么?&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;你可以将该 python 程序加入系统自启, 方便重启后不用手动执行.&lt;/li&gt;&lt;li&gt;你可能不只是希望控制风扇的开或者关, 你还想根据温度控制风扇的转速?😜&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <title>AMD Ryzen 启动 Android Studio Emulator 虚拟机</title>
    <link href="https://lsun.net/posts/amd-android-emulator/"/>
    <id>https://lsun.net/posts/amd-android-emulator/</id>
    <updated>2019-05-23T00:00:00Z</updated>
    <summary>AMD 平台开启 Windows Hypervisor Platform 跑 Android Studio 模拟器的步骤.</summary>
    <category term="开发"/>
    <content type="html">&lt;h1 id=&quot;amd-ryzen-启动-android-studio-emulator-虚拟机&quot; tabindex=&quot;-1&quot;&gt;AMD Ryzen 启动 Android Studio Emulator 虚拟机 &lt;a class=&quot;header-anchor&quot; href=&quot;#amd-ryzen-启动-android-studio-emulator-虚拟机&quot; aria-label=&quot;Permalink to &amp;quot;AMD Ryzen 启动 Android Studio Emulator 虚拟机&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h1&gt;&lt;h2 id=&quot;先决条件&quot; tabindex=&quot;-1&quot;&gt;先决条件 &lt;a class=&quot;header-anchor&quot; href=&quot;#先决条件&quot; aria-label=&quot;Permalink to &amp;quot;先决条件&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;AMD Processor - Recommended: AMD® Ryzen™ processors&lt;/li&gt;&lt;li&gt;Android Studio 3.2 Beta or higher&lt;/li&gt;&lt;li&gt;Android Emulator v27.3.8+&lt;/li&gt;&lt;li&gt;x86 Android Virtual Device (AVD)&lt;/li&gt;&lt;li&gt;Windows 10 with April 2018 Update&lt;/li&gt;&lt;li&gt;Enable via Windows Features: &amp;quot;Windows Hypervisor Platform&amp;quot;&lt;/li&gt;&lt;/ul&gt;&lt;h2 id=&quot;环境准备&quot; tabindex=&quot;-1&quot;&gt;环境准备 &lt;a class=&quot;header-anchor&quot; href=&quot;#环境准备&quot; aria-label=&quot;Permalink to &amp;quot;环境准备&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;_1-在-bios-设置中开启虚拟化技术-svm&quot; tabindex=&quot;-1&quot;&gt;1.在 BIOS 设置中开启虚拟化技术(SVM) &lt;a class=&quot;header-anchor&quot; href=&quot;#_1-在-bios-设置中开启虚拟化技术-svm&quot; aria-label=&quot;Permalink to &amp;quot;1.在 BIOS 设置中开启虚拟化技术(SVM)&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;各机器开启方法略有不同, 自行 Google 开启方法.&lt;/p&gt;&lt;h3 id=&quot;_2-启用-windows-hypervisor-platform-不是-hyper-v&quot; tabindex=&quot;-1&quot;&gt;2.启用 &amp;quot;Windows Hypervisor Platform&amp;quot; (不是 &amp;quot;Hyper-V&amp;quot;) &lt;a class=&quot;header-anchor&quot; href=&quot;#_2-启用-windows-hypervisor-platform-不是-hyper-v&quot; aria-label=&quot;Permalink to &amp;quot;2.启用 &amp;quot;Windows Hypervisor Platform&amp;quot; (不是 &amp;quot;Hyper-V&amp;quot;)&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;1.打开 &lt;code&gt;控制面板&lt;/code&gt; → &lt;code&gt;程序&lt;/code&gt; → &lt;code&gt;程序和功能&lt;/code&gt; → &lt;code&gt;启用或关闭 Windows 功能&lt;/code&gt;.&lt;br&gt; 2.勾选 &lt;code&gt;Windows Hypervisor Platform&lt;/code&gt;.&lt;br&gt; 3.确定后等待完成并&lt;strong&gt;重启机器&lt;/strong&gt;.&lt;br&gt;&lt;img src=&quot;https://lsun.net/assets/windows-hypervisor-platform.PugSkir3.png&quot; alt=&quot;Enable via Windows Features: &amp;quot;Windows Hypervisor Platform&amp;quot;&quot;&gt;&lt;/p&gt;&lt;h3 id=&quot;_3-检查-android-studio-以及-android-emulator-版本-如果你安装的是最新版本-请忽略这一步&quot; tabindex=&quot;-1&quot;&gt;3.检查 Android Studio 以及 Android Emulator 版本(如果你安装的是最新版本, 请忽略这一步.) &lt;a class=&quot;header-anchor&quot; href=&quot;#_3-检查-android-studio-以及-android-emulator-版本-如果你安装的是最新版本-请忽略这一步&quot; aria-label=&quot;Permalink to &amp;quot;3.检查 Android Studio 以及 Android Emulator 版本(如果你安装的是最新版本, 请忽略这一步.)&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Android Studio 版本 大于等于 &lt;code&gt;3.2 Beta&lt;/code&gt;.&lt;br&gt;&lt;img src=&quot;https://lsun.net/assets/android-studio-version.BFOemCn4.png&quot; alt=&quot;Android Studio Version = 3.4.1&quot;&gt;&lt;/p&gt;&lt;p&gt;Android Emulator 版本 大于等于 &lt;code&gt;27.3.8&lt;/code&gt;.&lt;br&gt; 打开 Android Studio 的设置页, 依次点开 &lt;code&gt;Appearance &amp;amp; Behavior&lt;/code&gt; → &lt;code&gt;System Settings&lt;/code&gt; → &lt;code&gt;Android SDK&lt;/code&gt; → &lt;code&gt;SDK Tools&lt;/code&gt; 即可查看. &lt;img src=&quot;https://lsun.net/assets/android-emulator-version.3Lty3ZNP.png&quot; alt=&quot;Android Emulator Version = 29.0.9&quot;&gt;&lt;/p&gt;&lt;h3 id=&quot;_4-检查-windows-10-版本&quot; tabindex=&quot;-1&quot;&gt;4.检查 Windows 10 版本 &lt;a class=&quot;header-anchor&quot; href=&quot;#_4-检查-windows-10-版本&quot; aria-label=&quot;Permalink to &amp;quot;4.检查 Windows 10 版本&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;确保你的系统版本大于等于&lt;code&gt;1803&lt;/code&gt;.&lt;br&gt; 个人建议将你的 Windows10 更新到当前版本号的最新稳定版(不更新系统甚至是破坏系统更新是一种愚蠢的行为).&lt;br&gt;&lt;img src=&quot;https://lsun.net/assets/windows10-pro-1809.nfA5eDzC.png&quot; alt=&quot;Windows10 Version = 1809&quot;&gt;&lt;/p&gt;&lt;h2 id=&quot;实测&quot; tabindex=&quot;-1&quot;&gt;实测 &lt;a class=&quot;header-anchor&quot; href=&quot;#实测&quot; aria-label=&quot;Permalink to &amp;quot;实测&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;现在你可以像使用 Intel 平台一样去创建虚拟机(&lt;code&gt;x86&lt;/code&gt;镜像)并去启动他了.&lt;/p&gt;&lt;h3 id=&quot;测试环境&quot; tabindex=&quot;-1&quot;&gt;测试环境 &lt;a class=&quot;header-anchor&quot; href=&quot;#测试环境&quot; aria-label=&quot;Permalink to &amp;quot;测试环境&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;MagicBook 2019(KPR-WX9)&lt;/li&gt;&lt;li&gt;AMD Ryzen 5 3500U with Radeon Vega Mobile Gfx (8 CPUs)&lt;/li&gt;&lt;li&gt;Android Studio 3.4.1&lt;/li&gt;&lt;li&gt;Android Emulator v29.0.9&lt;/li&gt;&lt;li&gt;Windows 10 Pro 64-bit (1809-17763.529)&lt;/li&gt;&lt;/ul&gt;&lt;h3 id=&quot;测试结果&quot; tabindex=&quot;-1&quot;&gt;测试结果 &lt;a class=&quot;header-anchor&quot; href=&quot;#测试结果&quot; aria-label=&quot;Permalink to &amp;quot;测试结果&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;请忽略内存爆炸... &lt;img src=&quot;https://lsun.net/assets/avm-start.rmL6R440.png&quot; alt=&quot;AVM Start&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://android-developers.googleblog.com/2018/07/android-emulator-amd-processor-hyper-v.html&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;参考: Android Emulator - AMD Processor &amp;amp; Hyper-V Support&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Vue + Electron 混合开发并使用 Node.js 遇到的一个坑</title>
    <link href="https://lsun.net/posts/vue-electron-nodejs/"/>
    <id>https://lsun.net/posts/vue-electron-nodejs/</id>
    <updated>2019-05-01T00:00:00Z</updated>
    <summary>Vue + Electron 里调用 Node.js 子进程时的一个报错, 以及原因和解法.</summary>
    <category term="开发"/>
    <content type="html">&lt;h1 id=&quot;vue-electron-混合开发并使用-node-js-遇到的一个坑&quot; tabindex=&quot;-1&quot;&gt;Vue + Electron 混合开发并使用 Node.js 遇到的一个坑 &lt;a class=&quot;header-anchor&quot; href=&quot;#vue-electron-混合开发并使用-node-js-遇到的一个坑&quot; aria-label=&quot;Permalink to &amp;quot;Vue + Electron 混合开发并使用 Node.js 遇到的一个坑&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h1&gt;&lt;h2 id=&quot;场景&quot; tabindex=&quot;-1&quot;&gt;场景 &lt;a class=&quot;header-anchor&quot; href=&quot;#场景&quot; aria-label=&quot;Permalink to &amp;quot;场景&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;曾经做过这么一个奇葩需求:&lt;br&gt; 使用 &lt;code&gt;Vue&lt;/code&gt; + &lt;code&gt;Electron&lt;/code&gt; 混合开发并使用 &lt;code&gt;Node.js&lt;/code&gt; 子进程(&lt;code&gt;child_process&lt;/code&gt;)调用 &lt;code&gt;.NET Core&lt;/code&gt; 程序的一个项目. 于是乎就遇到了如下的坑记录于此.&lt;/p&gt;&lt;h2 id=&quot;node-js-报错&quot; tabindex=&quot;-1&quot;&gt;Node.js 报错 &lt;a class=&quot;header-anchor&quot; href=&quot;#node-js-报错&quot; aria-label=&quot;Permalink to &amp;quot;Node.js 报错&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;如果你使用 &lt;code&gt;Vue&lt;/code&gt; + &lt;code&gt;Electron&lt;/code&gt; 混合开发并且需要使用 &lt;code&gt;Node.js&lt;/code&gt; (如: &lt;code&gt;http&lt;/code&gt; &lt;code&gt;child_process&lt;/code&gt;), 你很大概率会遇到类似如下的错误:&lt;/p&gt;&lt;div class=&quot;danger custom-block&quot;&gt;&lt;p class=&quot;custom-block-title&quot;&gt;DANGER&lt;/p&gt;&lt;p&gt;Uncaught TypeError: http.createServer is not a function&lt;br&gt; OR&lt;br&gt; Uncaught TypeError: spawn is not a function&lt;/p&gt;&lt;/div&gt;&lt;p&gt;很明显, 这是因为 &lt;strong&gt;直接把 &lt;code&gt;Node&lt;/code&gt; 程序在浏览器运行&lt;/strong&gt; 而报的错; 或许你没有这么做, 但是 &lt;code&gt;Vue&lt;/code&gt; 帮你这么做了, 确切的说是 &lt;code&gt;Webpack&lt;/code&gt; 帮你这么做了.&lt;/p&gt;&lt;h3 id=&quot;测试环境&quot; tabindex=&quot;-1&quot;&gt;测试环境 &lt;a class=&quot;header-anchor&quot; href=&quot;#测试环境&quot; aria-label=&quot;Permalink to &amp;quot;测试环境&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h3&gt;&lt;blockquote&gt;&lt;p&gt;Vue CLI = 3.7.0&lt;br&gt; Electron = 5.0.0&lt;br&gt; Node = 10.15.3&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;默认情况下&lt;code&gt;Vue CLI&lt;/code&gt; 输出的资源本身就是供浏览器直接运行的, 所以才会出现这种情况.&lt;/p&gt;&lt;h3 id=&quot;解决问题&quot; tabindex=&quot;-1&quot;&gt;解决问题 &lt;a class=&quot;header-anchor&quot; href=&quot;#解决问题&quot; aria-label=&quot;Permalink to &amp;quot;解决问题&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;既然知道了原因是由于 &lt;code&gt;Vue CLI&lt;/code&gt; 使用了 &lt;code&gt;Webpack&lt;/code&gt; 打包出来了仅供浏览器运行的资源, 那么我们如何让 &lt;code&gt;Webpack&lt;/code&gt; 打包出供 &lt;code&gt;Node&lt;/code&gt; 服务器运行的资源呢?&lt;br&gt; 很简单, 在基于 Vue CLI 3.0+ 的版本上, 在你的 Vue 项目根目录的 &lt;code&gt;vue.config.js&lt;/code&gt; (没有 &lt;code&gt;vue.config.js&lt;/code&gt; 的自行创建)里面添加如下高亮代码:&lt;/p&gt;&lt;h4 id=&quot;vue-config-js&quot; tabindex=&quot;-1&quot;&gt;vue.config.js &lt;a class=&quot;header-anchor&quot; href=&quot;#vue-config-js&quot; aria-label=&quot;Permalink to &amp;quot;vue.config.js&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h4&gt;&lt;div class=&quot;language-js line-numbers-mode&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;js&lt;/span&gt;&lt;pre class=&quot;shiki one-dark-pro vp-code&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E5C07B;&quot;&gt;module&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#E5C07B;&quot;&gt;exports&lt;/span&gt;&lt;span style=&quot;color:#56B6C2;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E06C75;&quot;&gt;    publicPath&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#98C379;&quot;&gt;&amp;#39;./&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line highlighted&quot;&gt;&lt;span style=&quot;color:#E06C75;&quot;&gt;    configureWebpack&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line highlighted&quot;&gt;&lt;span style=&quot;color:#E06C75;&quot;&gt;        target&lt;/span&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#98C379;&quot;&gt;&amp;#39;node-webkit&amp;#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line highlighted&quot;&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#ABB2BF;&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;line-numbers-wrapper&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line-number&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;&lt;h2 id=&quot;测试结果&quot; tabindex=&quot;-1&quot;&gt;测试结果 &lt;a class=&quot;header-anchor&quot; href=&quot;#测试结果&quot; aria-label=&quot;Permalink to &amp;quot;测试结果&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;vue-cli-直接运行&quot; tabindex=&quot;-1&quot;&gt;Vue CLI 直接运行 &lt;a class=&quot;header-anchor&quot; href=&quot;#vue-cli-直接运行&quot; aria-label=&quot;Permalink to &amp;quot;Vue CLI 直接运行&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;现在我直接在 Vue 运行调试发现还是报错, 这次的报错如下:&lt;/p&gt;&lt;div class=&quot;danger custom-block&quot;&gt;&lt;p class=&quot;custom-block-title&quot;&gt;DANGER&lt;/p&gt;&lt;p&gt;Uncaught ReferenceError: require is not defined&lt;/p&gt;&lt;/div&gt;&lt;p&gt;这次我管都不管它, 任由他报错, 因为经过上面对 &lt;code&gt;Webpack&lt;/code&gt; 的配置后, 我们得到的资源已经不适合浏览器直接运行了, 所以 &lt;code&gt;Vue CLI&lt;/code&gt; 直接调试肯定是有问题的.&lt;/p&gt;&lt;h3 id=&quot;通过-electron-运行&quot; tabindex=&quot;-1&quot;&gt;通过 Electron 运行 &lt;a class=&quot;header-anchor&quot; href=&quot;#通过-electron-运行&quot; aria-label=&quot;Permalink to &amp;quot;通过 Electron 运行&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;Electron&lt;/code&gt; 本身就允许使用 &lt;code&gt;Node&lt;/code&gt;（作为后端）的, 所以我们用它来运行试试.&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://lsun.net/assets/hello-child_process.Bm-c8JOY.png&quot; alt=&quot;hello child_process&quot;&gt;&lt;/p&gt;&lt;div class=&quot;tip custom-block&quot;&gt;&lt;p class=&quot;custom-block-title&quot;&gt;TIP&lt;/p&gt;&lt;p&gt;成功了🎉🎉🎉&lt;/p&gt;&lt;/div&gt;&lt;p&gt;现在可以愉快的使用 &lt;code&gt;Vue&lt;/code&gt; + &lt;code&gt;Electron&lt;/code&gt; 混合开发并使用 &lt;code&gt;Node.js&lt;/code&gt; 了😀.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>新的开始, 从Typecho到VuePress😀</title>
    <link href="https://lsun.net/posts/new-beginning/"/>
    <id>https://lsun.net/posts/new-beginning/</id>
    <updated>2019-04-14T00:00:00Z</updated>
    <summary>博客从 Typecho 搬到 VuePress, 顺手回顾一下第一帖.</summary>
    <category term="站点"/>
    <content type="html">&lt;h1 id=&quot;新的开始-从typecho到vuepress😀&quot; tabindex=&quot;-1&quot;&gt;新的开始, 从Typecho到VuePress😀 &lt;a class=&quot;header-anchor&quot; href=&quot;#新的开始-从typecho到vuepress😀&quot; aria-label=&quot;Permalink to &amp;quot;新的开始, 从Typecho到VuePress😀&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h1&gt;&lt;h2 id=&quot;来自基于typecho原博客第一帖的问候&quot; tabindex=&quot;-1&quot;&gt;来自基于&lt;code&gt;Typecho&lt;/code&gt;原博客第一帖的问候~ &lt;a class=&quot;header-anchor&quot; href=&quot;#来自基于typecho原博客第一帖的问候&quot; aria-label=&quot;Permalink to &amp;quot;来自基于`Typecho`原博客第一帖的问候~&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h2&gt;&lt;blockquote&gt;&lt;p&gt;&lt;img src=&quot;https://lsun.net/assets/typecho-first-post.CC0p1l22.png&quot; alt=&quot;Typecho First post&quot;&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;div class=&quot;tip custom-block&quot;&gt;&lt;p class=&quot;custom-block-title&quot;&gt;同样的&lt;/p&gt;&lt;p&gt;很开心 学会了更多😁.&lt;/p&gt;&lt;/div&gt;&lt;h2 id=&quot;为什么从typecho到vuepress&quot; tabindex=&quot;-1&quot;&gt;为什么从Typecho到VuePress? &lt;a class=&quot;header-anchor&quot; href=&quot;#为什么从typecho到vuepress&quot; aria-label=&quot;Permalink to &amp;quot;为什么从Typecho到VuePress?&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;其实从动态博客到静态页面博客对于我来说是一个必然的选择(why?), 很早就有这样的想法了, 只是一直犹豫不决使用什么静态网页生成工具, 曾考虑过&lt;code&gt;Hexo&lt;/code&gt;跟&lt;code&gt;Jekyll&lt;/code&gt;但始终没有付之行动.&lt;/p&gt;&lt;h3 id=&quot;vue&quot; tabindex=&quot;-1&quot;&gt;Vue &lt;a class=&quot;header-anchor&quot; href=&quot;#vue&quot; aria-label=&quot;Permalink to &amp;quot;Vue&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;一次偶然的机会我接触到了&lt;code&gt;Vue&lt;/code&gt;, 当时拿来做&lt;code&gt;SPA&lt;/code&gt;开发感觉非常棒; 后来, 又顺藤摸瓜的发现了&lt;code&gt;VuePress&lt;/code&gt;更是觉得相见恨晚; 心想: &lt;strong&gt;是时候了🤔&lt;/strong&gt;.&lt;/p&gt;&lt;h3 id=&quot;初衷&quot; tabindex=&quot;-1&quot;&gt;初衷 &lt;a class=&quot;header-anchor&quot; href=&quot;#初衷&quot; aria-label=&quot;Permalink to &amp;quot;初衷&amp;quot;&quot;&gt;​&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;最初我只是想把自己在成长过程中的经验记录下来, 一开始是使用的记事本工具&lt;code&gt;OneNote&lt;/code&gt;, 这样做一般情况就只能自己查阅了; 后来有了希望跟别人分享想法后, 就开始计划从仅供个人查阅的&lt;code&gt;记事本&lt;/code&gt;转型到可供搜索引擎检索的&lt;code&gt;博客&lt;/code&gt;; 再后来, 就有你现在正在查阅的这个站点了🤓.&lt;/p&gt;</content>
  </entry>
</feed>
