开发者
资源
基于香橙派鲲鹏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开发板专区二维码:


本页内容