鲲鹏社区首页
中文
注册
基于香橙派鲲鹏Pro开发板的GPIO开发

基于香橙派鲲鹏Pro开发板的GPIO开发

案例分享香橙派鲲鹏pro开发板

发表于 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的详细介绍和资源可以参考如下网址:

·       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开发板专区二维码:


本页内容