基于香橙派鲲鹏Pro开发板的GPIO开发
发表于 2025/06/06
0
基于香橙派鲲鹏Pro开发板的GPIO开发
作者|楼佳明
1.案例介绍
1.1 案例简介
本实验介绍了GPIO的基本概念,并在香橙派鲲鹏Pro开发板预置镜像环境中基于gpio_operate实现GPIO的读写,然后基于RPI.GPIO接口协议实现香橙派GPIO的跨语言c、 python调试以及驱动Led模块,通过本实验,开发者可掌握香橙派鲲鹏Pro开发板的GPIO接口配置、数据收发编程及调试方法,为学习物联网设备开发、传感器通信或工业控制应用奠定基础。
1.2 关于本案例环境
本案例基于香橙派鲲鹏 Pro开发板上的鲲鹏处理器和openEuler操作系统。
openEuler是一款支持多样性设备、覆盖全场景应用、具有完整开发工具链的面向数字基础设施的开源Linux操作系统,支持x64和arm64等多种处理器架构,更是鲲鹏处理器天然的基础软件设施。
有关openEuler的详细介绍和资源可以参考如下网址:
有关鲲鹏硬件更多的资料可以参考鲲鹏论坛。
1.3 案例设备介绍
关键配置如下表所示:
资源 |
说明 |
香橙派鲲鹏Pro开发板1台 |
规格:4核鲲鹏CPU,16G内存 |
以太网线1根 |
PC和开发板通过以太网口连接 |
PC(个人电脑)1台 |
通过PC的命令窗口登录到开发板 |
香橙派鲲鹏pro开发板默认IP |
192.168.10.8 |
用户及密码 |
root用户对应密码(openEuler) |
2.案例环境搭建
2.1 连接并登录到香橙派鲲鹏pro开发板
2.1.1 网线直连开发板
本方式硬件连接如下所示:
使用网线连接开发板和PC。
开发板插入网线,另一端连接PC,启动上电。
2.1.2 配置个人PC的网络设置
开发板通过网线和个人PC连接后,需要使开发板的ip地址(192.168.10.8)和个人PC的以太网处于同一网段,才能实现网络互联。
具体操作步骤如下:
步骤 1 打开Windows设置。
在PC上打开“开始”,单击“设置”按钮,进入“Windows 设置”界面:

步骤 2 打开更改适配器选项。
选择“网络和Internet”,单击“更改适配器选项”:
步骤 3 打开连接网线对应的以太网属性。
出现已连接的“以太网x”就是开发板网线连接接口,如下图中的“以太网3”,选中后右键打开,点击“以太网x”的属性:
修改“Internet 协议版本 4(TCP/IPv4)”的属性,如下图:
步骤 4 修改IPV4属性。
修改“Internet 协议版本 4(TCP/IPv4)”的属性,如下图:
步骤 5 设置ip和子网掩码。
勾选“使用下面的 IP 地址”选项,填写IP地址(此处设置为192.168.10.1)和子网掩码,默认网关与DNS服务器地址为空,单击“确定”保存:
步骤 6 验证。
在键盘上使用快捷键“Win+R”,在运行窗口输入cmd进入命令行窗口。输入ipconfig命令查询PC网口IP地址是否修改成功:
C:\Users\用户实际信息>ipconfig
2.2 登录开发板
2.2.1 通过cmd登录开发板(方式一)
在键盘上使用快捷键“Win+R”,在运行窗口输入cmd进入命令行窗口。
然后运行如下ssh登录命令:
ssh root@192.168.10.8
输入密码然后按下“Enter”键,默认开发板上root用户的密码为openEuler。
登录成功后的界面如下所示:

2.2.2 使用ssh工具登录开发板(方式二)
也可以通过其它ssh工具软件登录到开发板,如MobaXtrem、xshell、putty等。这里以MobaXtrem为例显示。
从本地电脑通过配置香橙派鲲鹏pro开发板的IP地址(如:192.168.10.8)来连接香橙派鲲鹏pro开发板,并使用root用户及对应密码(openEuler)来登录。
输入root用户及对应密码(openEuler),然后按“Enter”键登录。

2.3 开发板网络连接(推荐)
2.3.1 WIFI连接
步骤 1 扫描WIFI热点。
开发板上执行nmcli dev wifi 命令扫描周围的 WIFI 热点:
nmcli dev wifi

步骤 2 连接指定WIFI。
然后使用 nmcli 命令连接扫描到的 WIFI 热点,其中:
a. wifi_name 需要换成想连接的 WIFI 热点的名字。
b. wifi_passwd 需要换成想连接的 WIFI 热点的密码。
nmcli dev wifi connect wifi_name password wifi_passwd
输入命令,以Ljm_iPhone为例,
连接成功后输出:成功用 "wlan0ab877337-e465-440a-852d-c95ee6b5f4b0" 激活了设备 。
步骤 3 测试WIFI是否连通。
使用ping命令可以测试WIFI网络的连通性,ping命令可以通过Ctrl+C快捷键来中断运行。
ping www.hikunpeng.com -I wlan0
输出结果如下图所示。
3.案例原理及实操
3.1 实验原理介绍
3.1.1 通信基础知识
3.1.1.1 基础概念
1.通信的本质
定义:设备间通过约定规则(协议)交换数据的过程。
核心要素:
- 发送方与接收方:数据源与目的地。
- 传输介质:导线、无线信道等。
- 协议:数据格式、时序、错误处理等规则。
2.数据传输方式
特性 |
并行传输 |
串行传输 |
数据位传输 |
同时传输多位(如8位、16位) |
逐位顺序传输 |
信号线数量 |
多(数据线+控制线) |
少(1-4根) |
速度 |
高速(短距离) |
中低速(适合中长距离) |
应用场景 |
内存总线、高速接口(如HDMI) |
传感器、模块通信、调试接口 |
3.1.1.2 关键接口与协议
1.GPIO(通用输入/输出)
- 功能:数字信号的输入(如读取按键)或输出(如控制LED)。
- 特点:
灵活,但需手动控制逻辑(如Bit-Banging模拟协议)。
复用为其他协议(UART/I2C)的物理引脚。
- 应用:简单控制、辅助通信(如复位设备、中断信号)。
2. UART(异步串行通信)
- 核心机制:
异步:无共享时钟,依赖预定义的波特率(如9600bps)。
数据帧:起始位(1) + 数据位(5-9) + 校验位(可选) + 停止位(1-2)。
- 物理接口:
TX(发送)、RX(接收)、共地(GND)。
电平标准:TTL(0V/3.3V或5V)、RS-232(±12V)、RS-485(差分信号)。
- 应用:调试终端、GPS模块、蓝牙通信。
3. I2C(同步串行通信)
- 核心机制:
同步:主设备通过SCL(时钟线)控制时序。
主从架构:支持多主多从,通过地址寻址(7位或10位)。
数据帧:起始条件 + 地址位 + 数据位 + ACK/NACK + 停止条件。
- 物理接口:SDA(数据线)、SCL(时钟线)、共地(GND)。
- 应用:传感器(如温湿度)、EEPROM、OLED屏幕。
3.1.1.3 数据传输与时序机制
1.数据传输模式
- 单工(Simplex):单向传输(如广播、温度传感器只读)。
- 半双工(Half-Duplex):双向但不同时收发(如I2C、对讲机)。
- 全双工(Full-Duplex):双向同时收发(如UART、电话通话)。
2.时序控制
- 同步通信(如I2C、SPI):
依赖时钟信号(SCL)同步数据位采样。
主设备控制时钟频率,从设备跟随。
- 异步通信(如UART):
无时钟信号,双方需约定波特率(误差容忍±3%)。
通过起始位触发接收端计时采样。
3. 关键时序参数
- UART时序:
波特率误差:决定采样点准确性。
采样点位置:通常位于数据位中点(避免边沿抖动)。
- I2C时序:
起始/停止条件:SCL高电平时SDA的跳变。
时钟拉伸(Clock Stretching):从设备拉低SCL以延长时钟周期。
3.1.1.4 通信协议对比
特性 |
GPIO |
UART |
I2C |
通信类型 |
数字I/O |
异步串行 |
同步串行 |
信号线数量 |
1根 |
2根(TX+RX) |
2根(SDA+SCL) |
通信方向 |
单向/双向 |
全双工 |
半双工 |
时钟依赖 |
无 |
无(异步) |
有(同步) |
最大设备数 |
1 |
点对点(1:1) |
多设备(1:N) |
典型速率 |
- |
1Mbps以下 |
400Kbps-3.4Mbps |
应用场景 |
简单控制 |
调试、模块通信 |
多传感器互联 |
3.1.2 香橙派鲲鹏Pro开发板接口引脚
香橙派鲲鹏Pro开发板的40Pin扩展接口兼容树莓派GPIO布局,但部分引脚功能有所不同,需特别注意其复用功能。本次课程实验主要是使用香橙派鲲鹏Pro开发板40pin接口进行UART通信,以下是40Pin扩展接口物理引脚分布图。
开发板40 pin 接口引脚的功能如下图所示,其中标红部分的引脚具有UART 功能,并且Linux 系统默认配置为了UART 功能,可以直接使用。另外请注意UART0 默认设置为调试串口功能,请不要将其当成普通串口使用。
40 pin 接口使用注意事项:
1) 40 pin 接口中总共有26 个GPIO 口,但8 号和10 号引脚默认是用于调试串口功能的,并且这两个引脚和Micro USB 调试串口是连接在一起的,所以这两个引脚请不要设置为GPIO 等功能。
2) 所有的GPIO 口的电压都是3.3v。
3) 40 pin 接口中27 号和28 号引脚只有I2C 的功能,没有GPIO 等其他复用功能,另外这两个引脚的电压默认都为1.8v。
3.2 使用命令行工具操作GPIO
步骤 1 获知io口组号,与管脚号
香橙派鲲鹏Pro开发板io口组号,与管脚号,如下图所示:引脚31的组号为2,gpio管教号为20。
步骤 2 使用gpio_operate进行操作
- 获取引脚的方向
gpio_operate get_direction 2 20
输出结果为:Get gpio pin direction value successed, value is 0.
- 设置引脚的方向
gpio_operate set_direction 2 20 1
输出结果为:Set gpio pin direction value successed.
- 获取引脚的值
gpio_operate get_value 2 20
输出结果为:Get gpio pin value successed, value is 0.
- 设置引脚的值
gpio_operate set_value 2 20 1
输出结果为:Set gpio pin value successed.
- 获取修改后的结果
gpio_operate get_value 2 20
输出结果为:Get gpio pin value successed, value is 1.
通过以上命令可以使得31引脚的方向为输出,并且输出为高电平。
3.3 使用RPI.GPIO实现香橙派AIpro的GPIO
香橙派鲲鹏Pro开发板的GPIO接口兼容树莓派GPIO操作模块的RPI.GPIO接口协议。下面实验我们就基于C和Python,实现对GPIO的基本操作,掌握在香橙派鲲鹏Pro开发板跨语言(C、Python)开发实践,为进一步开发复杂项目奠定基础。
3.3.1 使用C语言实现GPIO
步骤 1 下载代码并且解压
代码目录结构如下:
├── orangepigpio
│ └── __init__.py // orangepigpio包的初始化代码
├── setup.py //生成wheel文件
├── src
│ ├── gpio.c //c接口实现
│ ├── gpio.h //c接口定义
│ └── py_gpio.c //python接口封装代码
└── test //测试代码文件夹
├── test0_blink.c
├── test1_0_0.c
├── test2_0_1.c
├── test3_1_0.c
├── test4_1_1.c
└── test_8_show.py
在/root下创建文件夹temp,把代码包放于/root/temp
cd /root
mkdir temp
cd temp
wget https://ascend-professional-construction-dataset.obs.cn-north-4.myhuaweicloud.com/ExperienceData/gpio_i2c/gpio_orangepi.zip
unzip gpio_orangepi.zip
步骤 2 编辑配置文件
vim /etc/rc.local
在exit0前增加如下指令
echo 3 >/sys/class/gpio/export
echo 2 >/sys/class/gpio/export
(ps:3, 2为gpio序号,通过下面的GPIO序号图查知,对应40pin上的引脚37、22)
步骤 3 重启运行环境
重启开发板。
reboot
3.3.2 编译与运行
3.3.2.1 GPIO C运行
步骤 1 依赖包安装
pip install wheel pip install --upgrade setuptools pip uninstall importlib_metadata
pip install --upgrade setuptools==70.0.0
除了上述命令框中的命令,还需执行下面图片中的安装命令。
步骤 2 进入到GPIO代码资源目录下
cd /root/temp/gpio_orangepi/src
步骤 3 将gpio.c编译成.so文件
gcc gpio.c -fPIC -shared -o libgpio.so
步骤 4 编辑动态库配置文件ld.so.conf
vim /etc/ld.so.conf
/usr/local/lib #添加路径
步骤 5 将libserial.so复制到/usr/local/lib
cp libgpio.so /usr/local/lib
步骤 6 让动态链接库为系统所共享
ldconfig
步骤 7 将gpio.h复制到路径/usr/include下
cp gpio.h /usr/include
步骤 8 进入测试文件
cd ../test
步骤 9 编译测试代码
gcc test0_blink.c -L. -lgpio -o test0_blink
PS:test*.c泛指GPIO的C接口测试代码,如test目录下的test1_0_0.c;test*泛指编译好的测试可执行程序,如test1_0_0。
步骤 10 运行测试程序
./test0_blink
3.3.2.2 GPIO python 运行
步骤 1 生成whl包
cd /root/temp/gpio_orangepi
python setup.py bdist_wheel
步骤 2 安装whl包
cd dist
pip install orangepigpio-0.0.1-cp39-cp39-linux_aarch64.whl
检查已经安装的python库
pip list
显示如下:
步骤 3 测试python接口
cd ../test
python test_8_show.py
PS:test*.py泛指GPIO的python接口测试代码,如test目录下的test_9.py;
3.3.2.3 基于RPI.GPIO驱动Led模块
步骤 1 开发板连接
参考3.1.2 香橙派鲲鹏Pro开发板接口引脚小节与下图,使用杜邦线连接对应的引脚。
连接示意图:
实物连接图:
步骤 2 运行测试程序
cd /root/temp/gpio_orangepi/test
python test_8_show.py
步骤 3 观察现象
本案例中,C 语言和 Python 实现的测试代码均应能够正确驱动对应的io口。并且外接Led灯模块进行正确的驱动,Led模块可以根据测试程序更改io口的状态进行亮暗闪烁。最后的测试效果如下图,红绿灯交替闪烁。至此案例顺利完成。
4.更多学习资源
更多学习内容和资源请扫码报名参加“鲲鹏技术学习加油站”及浏览鲲鹏开发板专区。
1)香橙派鲲鹏Pro开发板技术学习加油站:
2)香橙派鲲鹏Pro开发板专区二维码: