2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 树莓派+多个微雪电子Serial Expansion HAT扩展板叠加方法(扩展多个IO口 串口)

树莓派+多个微雪电子Serial Expansion HAT扩展板叠加方法(扩展多个IO口 串口)

时间:2024-01-20 13:39:02

相关推荐

树莓派+多个微雪电子Serial Expansion HAT扩展板叠加方法(扩展多个IO口 串口)

微雪电子官方教程仅介绍了单层扩展板配置方法, 因此本文参考官方教程的基础上,进行多个扩展板的叠加配置。

文章目录

一、打开I2C接口二、安装库三、生成设备四、堆叠教程五、扩展IO口配置总结

一、打开I2C接口

在终端执行:

sudo raspi-config

选择 Interfacing Options -> I2C ->yes 启动 i2C 内核驱动

然后重启树莓派:

sudo reboot

二、安装库

1.安装BCM2835, 打开树莓派终端,并运行以下指令

wget /mikem/bcm2835/bcm2835-1.60.tar.gztar zxvf bcm2835-1.60.tar.gz

cd bcm2835-1.60/

sudo ./configure && sudo make && sudo make check && sudo make install

更多的可以参考官网:/mikem/bcm2835/

2. 安装wiringPi

sudo apt-get install wiringpi

对于树莓派5月之后的系统(早于之前的可不用执行),可能需要进行升级:

wget https://project-/wiringpi-latest.deb

sudo dpkg -i wiringpi-latest.deb

gpio -v

运行gpio -v会出现2.52版本,如果没有出现说明安装出错

3. python库

sudo apt-get install python-dev

sudo apt-get install python-rpi.gpio

sudo apt-get install python-smbus

三、生成设备

打开/boot/config.txt文件

sudo nano /boot/config.txt

在/boot/config.txt中加入如下

dtoverlay=sc16is752-i2c,int_pin=24,addr=0x48

addr根据A0A1实际焊接方式设置,默认是0X48

重启设备

sudo reboot

重启后,SC16IS752的驱动会加载到系统内核中,此时可以运行ls /dev查看一下 将会多出如下设备:

如果需要堆叠的话,第二个模块不能直接插在树莓派,由于PCB上使用的中断引脚是一样,会导致无法识别出多个设备。


四、堆叠教程

如果需要扩展多个串口需要按照如下操作(适用于新版本)。

首先安装i2c-tools,方便查看I2C地址,在控制台输入:

sudo apt-get install i2c-tools

等待安装成功,执行如下命令查看I2C地址。

sudo i2cdetect -y 1

如果默认已经插入了一个Serial Expansion HAT,那么执行如下命令会得到如下的效果:

其中0X48的设备显示成了UU,说明系统已经加载成功了;

此时运行ls /devttySC*可以查看到已经生成了两个串口设备了。

在叠加第二块模块的之前,需要修改相应的硬件设置,将板子上的默认INT与I2C address的配置改成与默认的不一致即可,这里将需要叠加的另一块板进行重新焊接:INT PIN改成P23,I2C Address的A0改到了GND:

修改完成之后,将模块叠加在之前的模块上,运行命令:

sudo i2cdetect -y 1

新的模块的I2C地址为0X49,前面已经修改了中断管脚为23,那么就可以按照前述步骤打开/boot/config.txt:

sudo nano /boot/config.txt

在之前配置下方加入如下内容,保存并退出(ctrl +x,然后执行Y,并回车):

dtoverlay=sc16is752-i2c,int_pin=23,addr=0x49

重启树莓派

sudo reboot

执行如下命令,会出现4个设备号,即叠加成功。

ls /dev/ttySC*

由于板载只可设置5个不同的电阻,因此最大叠加数为5个,如需要添加更多的,需要使用杜邦线连接。

将板子上的默认INT与I2C address的配置改成与默认的不一致,INT Pin即为引脚,I2C地址即按照A1A0焊接形式并对照一下表格进行获取:

焊接完成后将四个扩展板叠加到树莓派上:

五、扩展IO口配置

在项目中需要使用4个扩展板的所有IO口,因此使用了2*4的90度排针将各个扩展板上的IO口引出。

如前述操作,实现4个扩展板的堆叠配置,接下来对4层扩展板的IO口使能进行编写。

堆叠完成后,从官网下载扩展板的示例程序资料,并首先打开 Serial_Expansion_HAT_code/c/gpio文件下的SC16IS752GPIO.c与SC16IS752GPIO.h两个文件,首先看到SC16IS752GPIO.h中:

找到#define PIN0,更改后方的数据,当叠加一块板时,数值为496,当叠加两块板时数值为488,当叠加三块板时数值为480,当叠加四块板时数值为472,这里我叠加了四块板因此改为了472.具体的原理可在终端中分别输入:

cd /sys/

cd class/

cd gpio/

cd tree

查找硬件配置下的IO口编码

再打开 SC16IS752GPIO.c文件,拉到最底下,找到void SC16IS752GPIO_Init(void)与void SC16IS752GPIO_Exit(void)

void SC16IS752GPIO_Init(void){SC16IS752GPIO_Export(0 + PIN0);SC16IS752GPIO_Export(1 + PIN0);SC16IS752GPIO_Export(2 + PIN0);SC16IS752GPIO_Export(3 + PIN0);SC16IS752GPIO_Export(4 + PIN0);SC16IS752GPIO_Export(5 + PIN0);SC16IS752GPIO_Export(6 + PIN0);SC16IS752GPIO_Export(7 + PIN0);}void SC16IS752GPIO_Exit(void){SC16IS752GPIO_Unexport(0 + PIN0);SC16IS752GPIO_Unexport(1 + PIN0);SC16IS752GPIO_Unexport(2 + PIN0);SC16IS752GPIO_Unexport(3 + PIN0);SC16IS752GPIO_Unexport(4 + PIN0);SC16IS752GPIO_Unexport(5 + PIN0);SC16IS752GPIO_Unexport(6 + PIN0);SC16IS752GPIO_Unexport(7 + PIN0);}

根据叠加的板数增加函数,例如叠加两块板则在void SC16IS752GPIO_Init(void)中加入SC16IS752GPIO_Export(8+PIN0)一直加到SC16IS752GPIO_Export(15+PIN0),同理在void SC16IS752GPIO_Exit(void)中加入SC16IS752GPIO_Unexport(8+PIN0)一直加到SC16IS752GPIO_Unexport(15+PIN0),最后保存.h与.c文件;

在项目中堆叠了4块扩展板,因此将此处修改位:

void SC16IS752GPIO_Init(void){SC16IS752GPIO_Export(0 + PIN0);SC16IS752GPIO_Export(1 + PIN0);SC16IS752GPIO_Export(2 + PIN0);SC16IS752GPIO_Export(3 + PIN0);SC16IS752GPIO_Export(4 + PIN0);SC16IS752GPIO_Export(5 + PIN0);SC16IS752GPIO_Export(6 + PIN0);SC16IS752GPIO_Export(7 + PIN0);SC16IS752GPIO_Export(8 + PIN0);SC16IS752GPIO_Export(9 + PIN0);SC16IS752GPIO_Export(10 + PIN0);SC16IS752GPIO_Export(11 + PIN0);SC16IS752GPIO_Export(12 + PIN0);SC16IS752GPIO_Export(13 + PIN0);SC16IS752GPIO_Export(14 + PIN0);SC16IS752GPIO_Export(15 + PIN0);SC16IS752GPIO_Export(16 + PIN0);SC16IS752GPIO_Export(17 + PIN0);SC16IS752GPIO_Export(18 + PIN0);SC16IS752GPIO_Export(19 + PIN0);SC16IS752GPIO_Export(20 + PIN0);SC16IS752GPIO_Export(21 + PIN0);SC16IS752GPIO_Export(22 + PIN0);SC16IS752GPIO_Export(23 + PIN0);SC16IS752GPIO_Export(24 + PIN0);SC16IS752GPIO_Export(25 + PIN0);SC16IS752GPIO_Export(26 + PIN0);SC16IS752GPIO_Export(27 + PIN0);SC16IS752GPIO_Export(28 + PIN0);SC16IS752GPIO_Export(29 + PIN0);SC16IS752GPIO_Export(30 + PIN0);SC16IS752GPIO_Export(31 + PIN0);}void SC16IS752GPIO_Exit(void){SC16IS752GPIO_Unexport(0 + PIN0);SC16IS752GPIO_Unexport(1 + PIN0);SC16IS752GPIO_Unexport(2 + PIN0);SC16IS752GPIO_Unexport(3 + PIN0);SC16IS752GPIO_Unexport(4 + PIN0);SC16IS752GPIO_Unexport(5 + PIN0);SC16IS752GPIO_Unexport(6 + PIN0);SC16IS752GPIO_Unexport(7 + PIN0);SC16IS752GPIO_Unexport(8 + PIN0);SC16IS752GPIO_Unexport(9 + PIN0);SC16IS752GPIO_Unexport(10 + PIN0);SC16IS752GPIO_Unexport(11 + PIN0);SC16IS752GPIO_Unexport(12 + PIN0);SC16IS752GPIO_Unexport(13 + PIN0);SC16IS752GPIO_Unexport(14 + PIN0);SC16IS752GPIO_Unexport(15 + PIN0);SC16IS752GPIO_Unexport(16 + PIN0);SC16IS752GPIO_Unexport(17 + PIN0);SC16IS752GPIO_Unexport(18 + PIN0);SC16IS752GPIO_Unexport(19 + PIN0);SC16IS752GPIO_Unexport(20 + PIN0);SC16IS752GPIO_Unexport(21 + PIN0);SC16IS752GPIO_Unexport(22 + PIN0);SC16IS752GPIO_Unexport(23 + PIN0);SC16IS752GPIO_Unexport(24 + PIN0);SC16IS752GPIO_Unexport(25 + PIN0);SC16IS752GPIO_Unexport(26 + PIN0);SC16IS752GPIO_Unexport(27 + PIN0);SC16IS752GPIO_Unexport(28 + PIN0);SC16IS752GPIO_Unexport(29 + PIN0);SC16IS752GPIO_Unexport(30 + PIN0);SC16IS752GPIO_Unexport(31 + PIN0);}

接下来生成.so文件

在终端中分别输入如下命令:

cd Serial_Expansion_HAT_code/

cd c

cd gpio

即打开上述.c与.h文件所处目录下

在终端中输入:

gcc SC16IS752GPIO.c -fPIC -shared -o SC16IS752GPIO.so

将SC16IS752GPIO.so文件拉入Serial_Expansion_HAT_code/python/GPIO文件夹中,覆盖原有的SC16IS752GPIO.so文件,打开gpio.py,更改gpio.SC16IS752GPIO_Mode(0,OUT)中的数值即改变某个IO口的模式(输出或输入),更改gpio.SC16IS752GPIO_Write(0,OUT)中的数值即改变某个IO口的输出量(高电平或低电平)

总结

至此,即实现多个扩展板的堆叠与配置。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。