外设与接口
硬件资源图
序号 | 接口 | 序号 | 接口 |
---|---|---|---|
1 | RTC 电池接口 | 10 | 电源 Type-C 接口 |
2 | Micro USB (UART 调试) | 11 | PWR 按键 |
3 | TurboX C6490P SOM | 12 | EDL 按键 |
4 | 3.5mm 耳机接口 | 13 | 摄像头接口 2 |
5 | USB Type-C with DP (USB 3.1) | 14 | 摄像头接口 1 |
6 | USB Type-A (USB 2.0) | 15 | Wi-Fi/蓝牙模块 |
7 | 2 x USB Type-A (USB 3.0) | 16 | 风扇接口 |
8 | 1000M 以太网 | 17 | 40-pin 连接器 |
9 | HDMI OUT | 18 | M.2 Key M 接口 |
40 pin 连接器
GPIO
RUBIK Pi 3 适配了 WiringRP(基于高性能 GPIO 编程库 WiringPi),推荐使用 WiringRP 来对 GPIO 进行控制和编程。关于 WiringRP 详细信息可访问 https://github.com/rubikpi-ai/WiringRP 查看。
引脚分布
下图是 RUBIK Pi 3 40-pin 连接器的引脚默认功能,其中大部分引脚和开源开发板的40-pin连接器引脚的默认功能兼容 。
下表是 40-pin连接器支持的所有功能,图中蓝色字体表明默认功能。
使用 shell 命令控制
在 RUBIK Pi 3 中执行下面的步骤控制 GPIO。
-
使用 WiringRP 相关命令
-
查看 GPIO 状态
gpio readall
-
设置 GPIO 模式
gpio mode 15 in # 将15号引脚模式置为输入
gpio pins # 查看更改之后的状态
gpio mode 15 out # 将15号引脚模式置为输出
gpio pins # 查看更改之后的状态 -
设置引脚电平
gpio write 15 1 # 将15号引脚置为高电平
gpio read 15 # 读取更改后引脚状态
gpio write 15 0 # 将15号引脚置为低电平
gpio read 15 # 读取更改后引脚状态
-
-
操作 /sys/class/gpio 下相关节点
GPIO 子系统的编号如下表。
- 进入 /sys/class/gpio 目录:
cd /sys/class/gpio
- 将要控制的 GPIO 导出,如控制 13 号引脚 GPIO_24:
echo 559 > export
- 进入到 gpio559 目录设置 GPIO 属性:
cd gpio559
ls- direction(方向):
- 输入:in
- 输出:out
- value(值):
- 低电平:0
- 高电平:1
- edge (中断边沿):
- 上升沿触发:rising
- 下降沿触发:falling
- 双边沿触发:both
- 禁用中断:none
如设置 13 号引脚输出高电平:
echo out > direction
echo 1 > value取消导出 13 号引脚到用户空间:
echo 559 > unexport
使用 WiringRP (C) 控制
WiringRP 库中提供了一系列的 API 函数,用更少的逻辑实现控制。
- 以下代码示例,将 13 号引脚设置为输出, 15 号引脚设置为输入,循环检测 15 号引脚的电平状态:
#include <stdio.h>
#include <wiringPi.h>
int main (void)
{
wiringPiSetup () ;
pinMode (13, OUTPUT) ;
pinMode (15, INPUT) ;
for (;;)
{
digitalWrite (13, HIGH) ; // On
printf("%d\n", digitalRead (15)); // On
delay (1000) ; // mS
digitalWrite (13, LOW) ; // Off
printf("%d\n", digitalRead (15)); // On
delay (1900) ;
}
return 0 ;
}
-
在 RUBIK Pi 3 中编译程序
adb push gpio.c /opt
adb shell
cd /opt
gcc gpio.c -o gpio -lwiringPi -
将 13 和 15 号引脚使用杜邦线短接,测试 GPIO 电平控制和 电平读取情况,如下图所示:
注意注意引脚顺序,请勿将电源和地引脚短接,否则可能会造成板子损坏。
运行如下命令:
cd /opt
./gpio程序运行结果如下:
使用 WiringRP-Python 控制
WiringRP 库中提供了一系列的 API 函数,用更少的逻辑实现控制。
-
下方截取代码是使用 WiringRP 库操作 GPIO 的示例,其中将 13 号引脚设置为输出,15 号引脚设置为输入,循环检测 15 号引脚的电平状态。
import wiringpi
import time
wiringpi.wiringPiSetup()
wiringpi.pinMode(13, 1)
wiringpi.pinMode(15, 0)
wiringpi.digitalRead(15)
while True:
wiringpi.digitalWrite(13,1)
pin_level = wiringpi.digitalRead(15)
print(f"in_gpio level: {pin_level}")
time.sleep(1)
wiringpi.digitalWrite(13,0)
pin_level = wiringpi.digitalRead(15)
print(f"in_gpio level: {pin_level}")
time.sleep(1) -
将 gpio.py 传输到 RUBIK Pi 3 中,如使用 ADB 传输。
adb push gpio.py /opt
-
将 13 和 15 号引脚使用杜邦线短接,测试 GPIO 电平控制和电平读取情况,如下图所示
注意注意引脚顺序,请勿将电源和地引脚短接,否则可能会造成板子损坏。