[DFR0604]IO Expansion HAT for Pi zero
丝印 |
标号 |
功能描述
|
+ |
+ |
3.3V电源正极
|
- |
- |
电源负极
|
⊕ |
⊕ |
接线柱外接电源正极
|
㊀ |
㊀ |
接线柱外接电源负极
|
Digital |
16-25 |
树莓派GPIO16-GPIO25
|
PWM |
0-3 |
PWM信号输出引脚0-3
|
Analog |
0-3 |
模拟信号输入引脚0-3
|
IIC |
C |
IIC接口时钟线
|
|
D |
IIC接口数据线
|
UART |
T |
UART接口发送端
|
|
R |
UART接口接收端
|
SPI |
MISO |
SPI数据输出线
|
|
SS |
SPI使能脚
|
|
SCLK |
SPI串行时钟线
|
|
MOSI |
SPI数据输入线
|
扩展板的PWM信号由板载STM32的定时器产生。PWM0~PWM3是用的一个定时器的多个通道PWM输出,频率一样,占空比可以设置。PWM4采用另外的定时器PWM输出。
在不外接电源情况下,PWM由树莓派供电(5V)。外接电源时(6V~12V),由外接电源提供电压。
注意:VP端未外部供电时,PWM端口 ⊕ 电压为5V。VP端外部供电时,PWM端口 ⊕ 电压为VP外部电压6~12V
|
IO扩展板板载MCU STM32,提供12位的ADC,模拟传感器的电压输入12-bit ADC,在模拟数据转换成数字数据后,通过IIC通信将数据发送给树莓派。
因此,树莓派可以读取模拟传感器的值。
IO扩展板直接引出树莓派10个GPIO口(BCM编码),分别是GPIO16、GPIO17、GPIO18、GPIO19、GPIO20、GPIO21、GPIO22、GPIO23、GPIO24、GPIO25。
IO扩展板有2个I2C接口,它们由树莓派的IIC直接引出,连接树莓派的GPIO2(SDA.1)和GPIO3(SCL.1)。
IO扩展板提供一组UART接口,通过GPIO14(TXD)和GPIO15(RXD)引出。通过UART可以与Arduino/Esp8266等主板串口通信。
IO扩展板引出树莓派的一组SPI,连接到GPIO12(MOSI)和GPIO13(MISO)。
使用教程
硬件连接
将IO扩展板直接插在树莓派的GPIO口中。
下载驱动库
如果需要使用IO扩展板上的模拟接口、PWM口,需要下载驱动库。在终端(打开终端快捷键:Ctrl+Alt+T)中,输入下面命令,并回车:
git clone https://github.com/DFRobot/DFRobot_RaspberryPi_Expansion_Board.git
将库下载后,解压缩。在终端输入下面命令:
tar -xvzf DFRobot_RaspberryPi_Expansion_Board
进入解压缩后的目录下,命令:
cd DFRobot_RaspberryPi_Expansion_Board/raspberry/
扩展接口使用
PWM使用
例如将舵机接入PWM口的0引脚。
通过nano命令新建一个文件
sudo nano servoTest.py
添加以下内容:
# -*- coding:utf-8 -*-
# servoTest.py
import time
from DFRobot_RaspberryPi_Expansion_Board import DFRobot_Expansion_Board_IIC as Board
from DFRobot_RaspberryPi_Expansion_Board import DFRobot_Expansion_Board_Servo as Servo
board = Board(1, 0x10) # Select i2c bus 1, set address to 0x10
servo = Servo(board)
if __name__ == "__main__":
# Board begin and check the board's status
while board.begin() != board.STA_OK:
print("Error")
time.sleep(1)
print("Board begin success.")
servo.begin() # servo control begin
while True:
print("part of servos move to 0°")
servo.move(0, 0) # PWM0
'''
servo.move(1, 0) # PWM1
servo.move(2, 0) # PWM2
servo.move(3, 0) # PWM3
'''
print("part of servos move to 180°")
servo.move(0, 0) # PWM0
'''
servo.move(1, 0) # PWM1
servo.move(2, 0) # PWM2
servo.move(3, 0) # PWM3
'''
print("All servos move between 0°~180°")
for i in range(0, 181):
servo.move(board.ALL, i)
time.sleep(0.008)
time.sleep(0.002)
for i in range(0, 181):
i = 181 - i
servo.move(board.ALL, i)
time.sleep(0.008)
time.sleep(0.002)
|
示例程序中servo.move()函数中,第一个参数是IO扩展板上的PWM引脚,第二个参数是旋转度数。PWM引脚选择如下表:
IO扩展板WPM引脚
|
第一个参数的值
|
0
|
0
|
1
|
1
|
2
|
2
|
3
|
3
|
PWM口所有引脚
|
board.ALL
|
编辑完成后Ctrl+X,然后按Y保存退出nano编辑器。
输入sudo raspi-config命令打开IIC接口。
输入python servoTest.py命令运行servoTest.py文件
Analog使用
示例代码
# -*- coding:utf-8 -*-
# analogTest.py
import time
from DFRobot_RaspberryPi_Expansion_Board import DFRobot_Expansion_Board_IIC as Board
board = Board(1, 0x10) # Select i2c bus 1, set address to 0x10
if __name__ == "__main__":
while board.begin() != board.STA_OK: # Board begin and check the board's status
print("Board begin faild.")
time.sleep(1)
print("Board begin success.")
board.set_adc_enable()
while True:
print("Read part of channels.")
val0 = board.get_adc_value(board.A0) # channel A0 is readed
'''
val1 = board.get_adc_value(board.A1) # channel A1 is readed
val2 = board.get_adc_value(board.A2) # channel A2 is readed
val3 = board.get_adc_value(board.A3) # channel A3 is readed
'''
print("channel:A0, value:%d" %val0)
'''
print("channel:A1, value:%d" %val1)
print("channel:A2, value:%d" %val2)
print("channel:A3, value:%d" %val3)
'''
print("")
time.sleep(1)
|
示例程序中board.get_adc_value()函数用来获取模拟口的值,对应引脚引脚选择如下表:
IO扩展板Analog引脚
|
参数的值
|
0
|
0
|
1
|
1
|
2
|
2
|
3
|
3
|
模拟口所有引脚
|
board.ALL
|
Digital使用
Digital使用与直接在树莓派上使用GPIO口是一样的,先下载RPi.GPIO库。在树莓派终端输入命令:
sudo apt-get install rpi.gpio
检查RPi.GPIO库是否安装成功,在终端输入命令:
gpio.readall
如果在终端显示树莓派所有管脚,则库安装成功。
然后使用树莓派的GPIO口,以使用GPIO16为例,在扩展板27脚上接一个LED灯。
然后nano编辑器中输入下面的示例代码,输入python命令运行。
# -*- coding:utf-8 -*-
# digitalTest.py
import RPi.GPIO as GPIO
import time
blinkPin = 16
GPIO.setmode(GPIO.BCM)
GPIO.setup(blinkPin, GPIO.OUT) # Set GPIO16 is OUTPUT
for i in range(0, 10):
GPIO.output(blinkPin, 1)
time.sleep(1)
GPIO.output(blinkPin, 0)
time.sleep(1)
GPIO.cleanup()
|
IIC使用
使用IIC接口需要开启树莓派IIC外设,在树莓派终端输入命令:
sudo raspi-config
选择【Interfacing Options】-【I2C】-【Yes】-【OK】-【Finish】,完后重启树莓派。
IO扩展板直接将树莓派的IIC端口引出的,所以与直接使用树莓派上的IIC口是一样的,这里不赘述。
UART使用
zero扩展板的UART接口使用与直接使用树莓派上的UART是一样的,这里不赘述。
SPI使用
使用zero扩展板的SPI口,首先需要开启树莓派SPI外设,与开启IIC一样,在树莓派终端输入命令:
sudo raspi-config
选择【Interfacing Options】-【I2C】-【Yes】-【OK】-【Finish】完成后重启树莓派。
IO扩展板的SPI接口使用与直接使用树莓派上的SPI接口是一样的,这里不赘述。
产品尺寸图
兼容性测试
MCU
|
测试通过
|
测试失败
|
未测试
|
特别标注
|
树莓派3B
|
√
|
|
|
|
树莓派3B+
|
√
|
|
|
|
树莓派Zero W
|
√
|
|
|
|
树莓派2B+
|
√
|
|
|
|
树莓派Zero
|
√
|
|
|
|
树莓派4B
|
√
|
|
|
|
常见问题
答:确定在使用IIC接口前,打开树莓派的IIC外设。如果没有打开,需要手动打开,然后重启树莓派生效。SPI接口也是如此。
更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。
|
更多
DFRobot商城购买链接
简介
|