基于youyeetoo K1 的 GPIO 控制完整教程,包含 LED 和蜂鸣器控制示例
本主板提供 17 个 GPIO 引脚,分为两类:
CPU GPIO(10个)
CGP1,CGP3,CGP5,CGP7,CGP9 -> (电压支持范围: 0 ~ 3.3V)CGP2,CGP4,CGP6,CGP8, CGP10 -> (电压支持范围: 0 ~ 1.8V)
Super I/O GPIO(7个)
GP1, GP2, GP3, GP4, GP5, GP6, GP8 -> (电压支持范围: 0 ~ 3.3V)
本教程使用的是集成模块,包含 3 个 LED 和 1 个蜂鸣器,模块已内置限流电阻和驱动电路。

模块接线:
| 模块引脚 | 连接到 | 说明 |
|---|---|---|
| 5V | K1 5V 引脚 | 供电 |
| GND | K1 GND 引脚 | 地线 |
| G_IN | K1 GPIO 引脚 | 绿色 LED 控制 |
| Y_IN | K1 GPIO 引脚 | 黄色 LED 控制 |
| R_IN | K1 GPIO 引脚 | 红色 LED 控制 |
| B_IN | K1 GPIO 引脚 | 蜂鸣器控制 |
示例接线方案:
外设模块 youyeetoo K1 开发板
母对母杜邦线
5V ────────→ 5V
GND ────────→ GND
G_IN ────────→ CGP1 (绿色 LED)
Y_IN ────────→ CGP5 (黄色 LED)
R_IN ────────→ CGP9 (红色 LED)
B_IN ────────→ CGP2 (蜂鸣器)

控制方式:
本教程测试环境:
权限要求:
注:其他 Linux 发行版理论上也可用,但未经测试
注意:需要联网下载安装
安装必要的编译工具:
# 更新软件包列表(需要联网)
sudo apt update
# 安装编译工具链(包含 gcc, g++, make 等)
sudo apt install build-essential
验证安装:
# 检查 gcc 版本
gcc --version
# 检查 make 版本
make --version
# 解压压缩包
test@test-K1-SBC:~$ unzip K1-GPIO-Package.zip
Archive: K1-GPIO-Package.zip
inflating: fhl-api_1.0.0_amd64.deb
inflating: Installation.txt
creating: linux-gpio/
inflating: linux-gpio/IOApp.cpp
inflating: linux-gpio/setup.sh
inflating: linux-gpio/Makefile
inflating: linux-gpio/IOApp.h
inflating: linux-gpio/alarm_system.sh
inflating: linux-gpio/test_gpio.cpp
inflating: linux-gpio/led_blink.sh
inflating: linux-gpio/LinuxGPIO.cpp
inflating: linux-gpio/led_flow.sh
inflating: linux-gpio/buzzer_test.sh
inflating: linux-gpio/LinuxGPIO.h
# 进入项目目录
cd linux-gpio/
# 安装 FHLAPI 支持包
sudo dpkg -i fhl-api_1.0.0_amd64.deb
# 赋予所有脚本执行权限
chmod +x *.sh
# 一键编译
test@test-K1-SBC:~$ ./setup.sh
========================================
GPIO Project Setup (FHL API)
========================================
[1/3] Checking FHL API library...
✓ FHL API library found
[2/3] Compiling GPIO control program...
g++ -I ./ -I /usr/include/fhl_api -O2 -Wall -g -fPIE -std=c++17 -c test_gpio.cpp -o test_gpio.o
g++ -I ./ -I /usr/include/fhl_api -O2 -Wall -g -fPIE -std=c++17 -c LinuxGPIO.cpp -o LinuxGPIO.o
g++ -I ./ -I /usr/include/fhl_api -O2 -Wall -g -fPIE -std=c++17 -c IOApp.cpp -o IOApp.o
gcc -o test_gpio test_gpio.o LinuxGPIO.o IOApp.o -lm -lrt -lstdc++ -ldl -lfhl_api
rm -rf
rm -rf test_gpio.o LinuxGPIO.o IOApp.o
✓ Control program compiled successfully
[3/3] Setting script permissions...
✓ Script permissions set
========================================
✓ Setup completed!
========================================
Generated files:
• test_gpio - GPIO control program
Next steps:
1. Test GPIO:
sudo ./test_gpio CGP1 out high
2. Run demo scripts:
sudo ./led_blink.sh
Available scripts:
• led_blink.sh - LED blink test
• led_flow.sh - Flow light effect
• buzzer_test.sh - Buzzer test
• alarm_system.sh - Alarm system demo
Note: No kernel driver loading required.
GPIO control is handled by FHL API library.
========================================
编译成功后会生成:
test_gpio - GPIO 控制程序
# 设置 CGP1 输出高电平
test@test-K1-SBC:~/linux-gpio$ sudo ./test_gpio CGP1 out high
[2026-10-08 13:59:32.528] [INFO] [Thread: 140571370649408] Extracted parent path (excluding file name): /usr/lib/x86_64-linux-gnu
[2026-10-08 13:59:32.528] [INFO] [Thread: 140571370649408] myLibPath is OK: /usr/lib/x86_64-linux-gnu
[2026-10-08 13:59:32.529] [INFO] [Thread: 140571370649408] Set board type: Default string
[2026-10-08 13:59:32.529] [ERROR] [Thread: 140571370649408] Set board type fail, so the default layout is used here:K1
[2026-10-08 13:59:32.530] [INFO] [Thread: 140571370649408] boardInfo: K1 BSP info., boardName=K1, boardVer=V1
[2026-10-08 13:59:32.530] [INFO] [Thread: 140571370649408] device node /dev/spidev0.0 does not exist, below add node
spidev
spi-SPI1001:00
[2026-10-08 13:59:32.573] [INFO] [Thread: 140571370649408] FhlAPI Version is: 0x10000
[2026-10-08 13:59:32.573] [INFO] [Thread: 140571370649408] FhlAPI Build_Info is: FhlAPI v1.0.0 b20260930
[2026-10-08 13:59:32.573] [INFO] [Thread: 140571370649408] FhlAPI_Init OK==========> end time=UTC:2026-12-01 23:59:59
FHL API initialized successfully
LinuxGPIO::Open() FHL GPIO opened successfully
GPIO Open Success
[2026-10-08 13:59:32.573] [INFO] [Thread: 140571370649408] WriteIO:io_name:CGP1,level=1
SUCCESS: CGP1 set to output HIGH
[2026-10-08 13:59:32.573] [INFO] [Thread: 140571370649408] FhlAPI_UnInit OK <============ end time=UTC:2026-12-01 23:59:59
# 设置 CGP1 输出低电平
test@test-K1-SBC:~/linux-gpio$ sudo ./test_gpio CGP1 out low
[2026-10-08 13:59:59.553] [INFO] [Thread: 139793843861312] Extracted parent path (excluding file name): /usr/lib/x86_64-linux-gnu
[2026-10-08 13:59:59.553] [INFO] [Thread: 139793843861312] myLibPath is OK: /usr/lib/x86_64-linux-gnu
[2026-10-08 13:59:59.553] [INFO] [Thread: 139793843861312] Set board type: Default string
[2026-10-08 13:59:59.553] [ERROR] [Thread: 139793843861312] Set board type fail, so the default layout is used here:K1
[2026-10-08 13:59:59.555] [INFO] [Thread: 139793843861312] boardInfo: K1 BSP info., boardName=K1, boardVer=V1
[2026-10-08 13:59:59.555] [INFO] [Thread: 139793843861312] device node /dev/spidev0.0 exists
[2026-10-08 13:59:59.555] [INFO] [Thread: 139793843861312] FhlAPI Version is: 0x10000
[2026-10-08 13:59:59.555] [INFO] [Thread: 139793843861312] FhlAPI Build_Info is: FhlAPI v1.0.0 b20260930
[2026-10-08 13:59:59.555] [INFO] [Thread: 139793843861312] FhlAPI_Init OK==========> end time=UTC:2026-12-01 23:59:59
FHL API initialized successfully
LinuxGPIO::Open() FHL GPIO opened successfully
GPIO Open Success
[2026-10-08 13:59:59.555] [INFO] [Thread: 139793843861312] WriteIO:io_name:CGP1,level=0
SUCCESS: CGP1 set to output LOW
[2026-10-08 13:59:59.555] [INFO] [Thread: 139793843861312] FhlAPI_UnInit OK <============ end time=UTC:2026-12-01 23:59:59
# 读取 CGP9 输入状态
test@test-K1-SBC:~/linux-gpio$ sudo ./test_gpio CGP9 in
[2026-10-08 14:18:49.173] [INFO] [Thread: 140072341813056] Extracted parent path (excluding file name): /usr/lib/x86_64-linux-gnu
[2026-10-08 14:18:49.173] [INFO] [Thread: 140072341813056] myLibPath is OK: /usr/lib/x86_64-linux-gnu
[2026-10-08 14:18:49.173] [INFO] [Thread: 140072341813056] Set board type: Default string
[2026-10-08 14:18:49.173] [ERROR] [Thread: 140072341813056] Set board type fail, so the default layout is used here:K1
[2026-10-08 14:18:49.174] [INFO] [Thread: 140072341813056] boardInfo: K1 BSP info., boardName=K1, boardVer=V1
[2026-10-08 14:18:49.175] [INFO] [Thread: 140072341813056] device node /dev/spidev0.0 exists
[2026-10-08 14:18:49.175] [INFO] [Thread: 140072341813056] FhlAPI Version is: 0x10000
[2026-10-08 14:18:49.175] [INFO] [Thread: 140072341813056] FhlAPI Build_Info is: FhlAPI v1.0.0 b20260930
[2026-10-08 14:18:49.175] [INFO] [Thread: 140072341813056] FhlAPI_Init OK==========> end time=UTC:2026-12-01 23:59:59
FHL API initialized successfully
LinuxGPIO::Open() FHL GPIO opened successfully
GPIO Open Success
[2026-10-08 14:18:49.175] [INFO] [Thread: 140072341813056] ReadIO: io_name=CGP9
read cpu io CGP9, level=1
SUCCESS: CGP9 input level: HIGH (1)
[2026-10-08 14:18:49.175] [INFO] [Thread: 140072341813056] FhlAPI_UnInit OK <============ end time=UTC:2026-12-01 23:59:59
sudo ./test_gpio <引脚名> <模式> [电平]
CGP1-CGP10 或 GP1-GP6, GP8out - 输出模式in - 输入模式high - 高电平low - 低电平# 输出模式
sudo ./test_gpio CGP1 out high # CGP1 输出高电平
sudo ./test_gpio CGP2 out low # CGP2 输出低电平
sudo ./test_gpio GP3 out high # GP3 输出高电平
# 输入模式
sudo ./test_gpio CGP9 in # 读取 CGP9 输入状态
sudo ./test_gpio GP2 in # 读取 GP2 输入状态
项目提供了 4 个开箱即用的示例脚本,默认配置与上述接线方案对应:
sudo ./led_blink.sh
执行过程中可按 Ctrl + C 停止脚本

功能:默认使用 CGP1 引脚,可改为模块的任意 LED 输入(G_IN/Y_IN/R_IN)
可配置参数(编辑脚本修改):
PIN="CGP1" - 更改为对应的 GPIO 引脚(如 CGP2``CGP3等等 )INTERVAL=1 - 更改闪烁间隔(秒)sudo ./led_flow.sh
执行过程中可按 Ctrl + C 停止脚本

功能:3 个 LED(G_IN、Y_IN、R_IN)依次点亮
默认配置:
PINS=("CGP1" "CGP5" "CGP9") - 对应 G_IN, Y_IN, R_ININTERVAL=0.2 - 流水速度(秒)sudo ./buzzer_test.sh
执行过程中可按 Ctrl + C 停止脚本

功能:蜂鸣器(B_IN)响 5 次
默认配置:
PIN="CGP3" - 对应 B_INBEEP_COUNT=5 - 鸣叫次数BEEP_DURATION=0.3 - 鸣叫时长(秒)BEEP_INTERVAL=0.3 - 鸣叫间隔(秒)sudo ./alarm_system.sh
执行过程中可按 Ctrl + C 停止脚本

功能:LED(R_IN)和蜂鸣器(B_IN)同步闪烁/鸣叫,循环播放
默认配置:
LED_PIN="CGP1" - 可改为 CGP9(R_IN)BUZZER_PIN="CGP3" - 对应 B_INALARM_CYCLES=10 - 每轮报警次数ALARM_SPEED=0.2 - 报警速度(秒)原因:权限不足
解决:使用 sudo 运行命令
sudo ./test_gpio CGP1 out high
检查清单:
sudo?检查清单: