1. 简介
IO Expansion HAT是一款专为RVBoards-哪吒开发的IO扩展板,该扩展板将哪吒板的IO口全部引出,包含21组GPIO端口、1组IR端口、3组PWM端口、4组I2C端口、3组UART端口、1组SPI端口,能完美兼容DFRobot的Gravity传感器系列产品,不仅能省去繁琐的接线,还便于故障排除,让学生、开发者、科研工作者可以专注实现自己的项目。
哪吒板的GPIO、I2C、UART、SPI、IR的电源电压为3.3V,但3组PWM的电源电压为5V,因此PWM端口可以轻松驱动舵机。
哪吒是全志在线基于全志科技D1芯片定制的AIOT开发板,是全球首款支持64bit RISC-V指令命令集成并支持Linnux系统的可量产开发板。支持1G DDR3*、258MB spi-nand、WiFi/蓝牙连接,具有丰富的音视频接口可强大的音视频编解码能力,可连接各种外设,集成了MIPI-DSI+TP接口、SD卡接口、LED灯、HDMI接口、麦克风子板接口、3.5mm耳机接口、千兆以太网接口、USB HOST、Type-C接口、UART Debug接口、40pins插针阵列等,可以满足日常科研教学、产品项目预研、开发爱好者DIY的需求。
2. 产品特性
- GPIO引脚丝印即编程中可用的GPIO号
- 3路独立的UART全引出,丝印号即UART通道号
- 3路独立的PWM电源电压均为5V,可轻松驱动舵机
3. 技术规格
- IO扩展板工作电压:3.3V
- PWM电源电压:5V
- 传感器接口电压:3.3V
- 通信接口:21组GPIO端口、1组IR端口、3组PWM端口、4组I2C端口、3组UART端口、1组SPI端口
- 外形尺寸:65*56 mm
4. IO Map
功能3 | 功能2 | 默认 | 引脚号 | 引脚号 | 默认 | 功能2 | 功能3 | |
---|---|---|---|---|---|---|---|---|
3V3 | 1 | 2 | 5V | |||||
GPIO1 | SDA-2 | 3 | 4 | 5V | ||||
GPIO2 | SCL-2 | 5 | 6 | GND | ||||
GPIO3 | PWM | 7 | 8 | GPIO4 | UART0-TX | |||
GND | 9 | 10 | GPIO5 | UART0-RX | ||||
GPIO6 | 11 | 12 | GPIO7 | I2S-BCLK | UART5-RX | |||
GPIO8 | 13 | 14 | GND | |||||
PWM | GPIO9 | 15 | 16 | GPIO10 | ||||
3V3 | 17 | 18 | GPIO11 | |||||
GPIO12 | SPI1-MOSI | 19 | 20 | GND | ||||
UART3-RTS | GPIO13 | SPI1-MISO | 21 | 22 | GPIO14 | |||
UART3-RX | GPIO15 | SPI1-CLK | 23 | 24 | GPIO16 | UART3-TX | ||
GND | 25 | 26 | GPIO17 | |||||
UART3-CTS | GPIO18 | 27 | 28 | GPIO19 | ||||
IR-RX | GPIO20 | SPI-WP | 29 | 30 | GND | |||
GPIO21 | 31 | 32 | NC | IR-TX | ||||
NC | 33 | 34 | GND | |||||
PWM | I2S2-LRCK | GPIO22 | 35 | 36 | NC | |||
GPIO23 | 37 | 38 | GPIO24 | I2S-DIN | ||||
GND | 39 | 40 | GPIO25 | I2S-DOUT | UART5-TX |
5. Debian操作系统安装
5.1 准备镜像文件和所需工具
- V0.5 版本下载地址
- 链接:https://pan.baidu.com/s/181WrWBv6mD5pkNVK-CLntw
- 提取码:3o5v
5.2.1 Windows下安装(0.5版本不支持windows烧录)
1.准备烧录工具Win32DiskImager下载地址
2.将插有SD卡的读卡器插在电脑上,在Win32DiskImager中选择想要烧录的img文件,点击写入
5.2.2 Linux下安装
1.将SD卡插到读卡器中再插到Linux电脑上,输入以下命令来确定SD卡的位置和名称:
lsblk
如图所示,当前SD卡名称为sdb
- 输入下面的命令进行烧录
sudo dd if=./RVBoards_D1_Debian_lxde_img_linux_v0.5.img of=/dev/sdb status=progress
- 烧录中
- 烧录完成
6. 登录和联网
6.1 串口连接和远程登录
- 串口连接
通过串口终端获取IP地址(后期会改为通过ADB获取IP地址)串口根据DEBUG的丝印说明接串口对应的GND、RX、TX即可。
如果接入串口后电脑设备管理器中仍未显示,则需要额外下载一个串口驱动程序下载地址。
串口连接示意图:
串口连接好以后,按图片标注步骤使用MobaXTerm下载页面进行远程连接,通过串口远程登录上哪吒主板后我们就可以执行WIFI联网和网口联网的操作。
注意:若配置好串口并打开后,出现长时间的黑屏,串口保持不动的同时重新插拔电源可解决。
2.串口登录
用户名:root
登录密码:rvboards
登录界面示意图:
6.2 联网
6.2.1 WIFI联网
通过D1的命令行连接WiFi(替换成目标路由器的SSID和PASSWORD)
输入前3行命令,出现命令执行效果图的界面。出现命令执行效果图的界面后输入第4行命令。
注意:使用WIFI联网时,连的网要与电脑处于同一网段,否则登录不上SSH。
wpa_passphrase SSID PASSWORD > /etc/wpa_supplicant.conf
wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf
dhclient wlan0
service networking restart
1.命令执行效果
2.使用ifconfig命令查看到WIFI已经获取到IP地址
3.通过查询到的IP地址连接SSH登录到主板即可进行操作,操作步骤与网口联网一致。
6.2.2 网口联网
1.网口插入网线后,会自动获取IP地址,查询IP地址步骤与WIFI联网一致。
2.通过ifconfig命令查询到IP地址,再通过SSH按以下步骤登录到主板,便可以愉快的进行操作啦
用户名:root
密码:rvboards
登录后界面:
7. 安装pinpong库
安装pinpong库
运行以下命令
pip3 install -U pinpong
运行结果
安装好pinpong库后可在以下文件路径中找到示例代码:
/usr/local/lib/python(版本号)/dist-packages/pinpong/examples/
8. 例程
8.1 数字输出
哪吒板的GPIO一部分通过D1芯片引出来,一部分通过芯片引出来,通过芯片PCF8574A引出来的GPIO(PP0-PP7)负载能力比较弱。下面列表中的GPIO引脚就是负载能力较弱的引脚。
GPIO8 | PP0 |
---|---|
GPIO10 | PP1 |
GPIO11 | PP2 |
GPIO17 | PP3 |
GPIO14 | PP4 |
GPIO16 | PP5 |
GPIO23 | PP6 |
GPIO6 | PP7 |
如果GPIO引脚被引脚复用 到其他用途,就不能再做为普通GPIO来使用
# -*- coding: utf-8 -*-
#NeZha
#实验效果:控制板载LED灯一秒闪烁一次
import time
from pinpong.board import Board,Pin
Board("nezha").begin()
led = Pin(25, Pin.OUT) #Nezha引脚初始化为电平输出
while True:
led.value(1) #输出高电平
print("1") #终端打印信息
time.sleep(1) #等待1秒 保持状态
led.value(0) #输出低电平
print("0") #终端打印信息
time.sleep(1) #等待1秒 保持状态
8.2 数字输入
如果GPIO引脚被 引脚复用 到其他用途,就不能再做为普通GPIO来使用
# -*- coding: utf-8 -*-
#NeZha
#实验效果:使用按钮控制板载亮灭
import time
from pinpong.board import Board,Pin
Board("nezha").begin()
btn = Pin(6, Pin.IN) #引脚初始化为电平输入,接按钮
led = Pin(3, Pin.OUT)#引脚初始化为电平输出,接LED
while True:
v = btn.value() #读取引脚电平
print(v) #终端打印读取的电平状态
led.value(v) #将按钮状态设置给led灯引脚
time.sleep(0.1)
8.3 UART串口例程
需要先使能UART3或者UART5(参考引脚复用章节),用杜邦线链接串口的RX和TX可以测试串口回环,发什么就能收到什么
import serial
import time
s=serial.Serial("/dev/ttyS3",115200,timeout=1)
#s=serial.Serial("/dev/ttyS5",115200,timeout=1)
s.write("dfrobot".encode("utf-8"))
time.sleep(0.1)
ret = s.readall()
print(ret)
8.4 I2C例程
I2C可以驱动很多传感器,具体请参考pinpong库nezha相关的例程。
I2C扫描:可以扫描连接在I2C接口的外设,打印这些外设的地址列表
# -*- coding: utf-8 -*-
#Nezha
#实验效果:扫描所有外接IIC设备的地址
import time
from pinpong.board import Board,I2C
Board("nezha").begin()
iic=I2C(bus_num = 2)#使用哪吒开发板的/dev/i2c-2节点,所以这里bus_num=2
ret=iic.scan()
print(ret)
8.5 PWM例程
哪吒开发板当前支持3路PWM,分别来自GPIO3(PWM7), GPIO9(PWM0), GPIO22(PWM1) ,PWM7默认是打开的,另外2路需要dtb overlay配置打开(参考引脚复用章节)
# -*- coding: utf-8 -*-
#Nezha
#实验效果:使用按钮控制LED模块亮度
import time
from pinpong.board import Board,Pin,PWM
Board("nezha").begin()
pwm0 = PWM(Pin(3)) #将Pin传入PWM中实现模拟输出
pwm0.freq(1000)
while True:
for i in range(0,100): #占空比从0%到100%循环
pwm0.duty(i) #设置模拟输出值
print(i)
time.sleep(0.1)
8.6 舵机例程
PWM例程中提到的3个引脚都可以驱动舵机
# -*- coding: utf-8 -*-
#Nezha
#实验效果:舵机控制
import time
from pinpong.board import Board,Pin,Servo
Board("nezha").begin()
s1 = Servo(Pin(3)) #将Pin传入Servo中初始化舵机引脚
while True:
s1.write_angle(0) #控制舵机转到0度位置
print("0")
time.sleep(1)
s1.write_angle(90) #控制舵机转到90度位置
print("90")
time.sleep(1)
s1.write_angle(180) #控制舵机转到180度位置
print("180")
time.sleep(1)
s1.write_angle(90) #控制舵机转到90度位置
print("90")
time.sleep(1)
8.7 SPI端口例程
需要修改dtb overlay配置文件使能SPI1(参考引脚复用章节)
用杜邦线链接MISO和MOSI,我们可以发现SPI发送什么就能收到什么
# -*- coding: utf-8 -*-
import spidev
import time
spi=spidev.SpiDev()
spi.open(1,0)#使用/dev/spidev1.0节点,所以这里使用(1,0)
while True:
ret = spi.xfer([1,2,3,4,5])
print(ret)
time.sleep(1)
8.8 IR例程
需要修改dtb overlay配置文件使能ir0rx(参考引脚复用章节)
用红外接收模块接收遥控器的按键信号,屏幕上将会输出按键值。
# -*- coding: utf-8 -*-
import sys
import time
from pinpong.board import Board,IRRecv,Pin
Board("nezha").begin() #初始化,选择板型和端口号,不输入端口号则进行自动识别
def ir_recv3(data):
print("------Recv IR Code--------")
print(hex(data))
ir3 = IRRecv(ir_recv3)
while(1):
time.sleep(0.1)
9. 引脚复用
V0.5版本没有内置一些dtbo文件,需要用户自己将dtbo文件放在/boot/overlay文件夹下(dtbo压缩包下载地址)
可以通过sftp将文件传入哪吒开发板,也可以使用命令直接下载和解压
wget https://downloadcd.dfrobot.com.cn/nezha/overlay.zip
unzip overlay.zip
放置dtbo后的效果
root@RVBoards:/boot/overlay# ls -l
total 14
-rwxr-xr-x 1 root root 692 Jun 19 22:59 d1-pwm1.dtbo
-rwxr-xr-x 1 root root 700 Jun 19 22:59 d1-pwm7.dtbo
-rwxr-xr-x 1 root root 400 Jun 19 22:59 d1-spi1.dtbo
-rwxr-xr-x 1 root root 279 Jun 19 22:59 d1-uart3.dtbo
-rwxr-xr-x 1 root root 691 Jun 19 22:59 d1-uart5.dtbo
-rwxr-xr-x 1 root root 675 Jun 11 07:33 test-overlay-pwm.dtbo
-rwxr-xr-x 1 root root 287 Jun 10 19:11 test-overlay.dtbo
我们发现哪吒板有多种复用功能,我们如何才能在多种功能间进行切换呢?debian通过设备树的overlay来实现,下面我们通过dtb overlay打开这些隐藏功能
V0.5版本的Debian镜像还不支持多文件,后续版本支持多文件后,可以通过修改/boot/config.txt来实现多个引脚复用的自由切换。现阶段只能实现单个的引脚复用切换。
dtoverlay=function1 function2 function3
V0.5版本的Debian镜像没有自动挂载boot分区,我们需要手动挂载一下,才能看到config.txt文件
mount /dev/mmcblk0p4 /boot
mount命令输入时要注意格式
进入config.txt的步骤:
9.1 PWM
哪吒开发板当前支持3路PWM,PWM号的对应关系:
GPIO引脚号 | 对应的PWM编号 | PIN引脚 |
---|---|---|
GPIO3 | PWM7 | 7 |
GPIO9 | PWM0 | 15 |
GPIO22 | PWM1 | 35 |
注:PWM0被用来给CPU进行自动调频所以不能使用
默认引脚3的pwm功能是打开的
修改/boot/config.txt
打开GPIO3的PWM7功能
dtoverlay=d1-pwm7
打开GPIO22的PWM1功能
dtoverlay=d1-pwm1
9.2 SPI
哪吒开发板支持一路SPI
引脚号 | SPI功能 |
---|---|
GPIO12 | SPI1-MOSI |
GPIO13 | SPI1-MISO |
GPIO15 | SPI1-CLK |
GPIO16 | SPI1-CE0 |
修改config.txt,打开SPI1功能
dtoverlay=d1-spi1
9.3 UART
哪吒开发板默认有3路UART,UART0,UART3,UART5。UART0默认是给debug使用。
打开UART3
修改/boot/config.txt文件,打开UART3功能
dtoverlay=d1-uart3
UART3-RX | GPIO15 |
---|---|
UART3-TX | GPIO16 |
UART3-RTS | GPIO13 |
UART3-CTS | GPIO18 |
打开UART5
修改/boot/config.txt,打开UART5功能
dtoverlay=d1-uart5
UART5-RX | GPIO7 |
---|---|
UART5-TX | GPIO25 |
9.4 IR-RX
打开GPIO20的IR-RX功能
dtoverlay=d1-ir0rx
10. 常见问题
更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。