IO Expansion HAT for Raspberry Pi

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 准备镜像文件和所需工具

  1. V0.5 版本下载地址
  • 链接:https://pan.baidu.com/s/181WrWBv6mD5pkNVK-CLntw
  • 提取码:3o5v
  1. 一张至少16GB的SD卡,一个USB读卡器
  2. 串口及SSH终端工具MobaXTerm下载页面
  3. 串口驱动程序,下载地址

5.2.1 Windows下安装(0.5版本不支持windows烧录)

1.准备烧录工具Win32DiskImager下载地址

2.将插有SD卡的读卡器插在电脑上,在Win32DiskImager中选择想要烧录的img文件,点击写入



5.2.2 Linux下安装

1.将SD卡插到读卡器中再插到Linux电脑上,输入以下命令来确定SD卡的位置和名称:

lsblk

如图所示,当前SD卡名称为sdb

sd卡节点查看

  1. 输入下面的命令进行烧录
  sudo dd if=./RVBoards_D1_Debian_lxde_img_linux_v0.5.img of=/dev/sdb status=progress
  1. 烧录中

  1. 烧录完成



6. 登录和联网

6.1 串口连接和远程登录

  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按以下步骤登录到主板,便可以愉快的进行操作啦

SSH

用户名:root


密码:rvboards


登录后界面:

登录

7. 安装pinpong库

安装pinpong库
运行以下命令

pip3 install -U pinpong

运行结果

安装pinpomg库

安装好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

overlay下载步骤

放置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的步骤:

config文件修改步骤

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. 常见问题

更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。

11. 更多

DFshopping_car1.png DFRobot商城购买链接