DesignSpark Electrical Logolinkedin

用Python 和Pmods 简易地使用树莓派的外设接口

完美的结合外设接口

Pmod 的外设模组是一个由Digilent设计的开放规范标准用于连接外围设备与FPGA和微控制器主机平台。提供6针和12针版本,具有标志性的紧凑外形,他们为系统原型提供了一个简洁的解决方案,许多工程师至少拥有一部分Pmods。

多种Pmods可以快速构建不同的硬件配置,使用极其平易近人的Python编程语言及其丰富的软件生态系统使快速原型应用成为可能。

将树莓派加入其中能够拥有强大的原型平台。不过,在硬件和软件方面还有一些事情能将使集成和快速原型化变得容易一些。那么让我们从硬件开始,进入Pmod HAT!

DesignSpark Pmod HAT

Pmod HAT(144-8419)有三个2x6引脚Pmod端口,支持I2C,SPI,UART和GPIO接口。它可以与任何具有40针GPIO连接器的树莓派型号一起使用,通过连接器和外部5VDC电源供电。 

这些端口标记如下:          

  • JA:支持SPI和GPIO 的Pmod。
  • JB:支持SPI和GPIO 的Pmod,底行支持6引脚I2C 的Pmod。
  • JC:支持UART和GPIO 的Pmod。

还有两个跨接器:

  • JP1和JP2:在JB2 I2C短路时启用上拉电阻。
  • JP3:允许写入板载EEPROM。

EEPROM存储设备的树片段用于辨认相应的配置操作系统和驱动程序。对于那些不熟悉设备树片段概念的人,它是一个编译的数据库,用于描述基于ARM的系统,并提供与Intel / AMD计算机的BIOS相似的功能。这只会被更高级的用例所修改。

所以,我们现在有一个方便的方法来管理硬件,避免使用凌乱的跳线,那软件呢? 进入DesignSpark.Pmod!

DesignSpark.Pmod

DesignSpark.Pmod是一个Python库,它:

  • 为受支持的Pmod提供简单,一致的接口
  • 检查Pmod和端口功能是否匹配
  • 检查端口使用冲突
  • 提供了一些示例来帮助您入门

引脚多路复用是许多(大多数?)现代SoC的标准,它可以带来很大的灵活性,但是需要进行一些初始设置来配置I / O引脚以供特定用途使用。虽然Pmod可以通过多种不同的方法之一进行连接,当你将这两件事结合在一起时,这意味着你需要小心不要将SPI和GPIO 的Pmod连接到主机共享I / O引脚的端口,从而导致设置冲突。

库所做的是检查一个Pmod是否被HAT上的特定端口所支持并且不会有冲突。最初的版本也为6x Pmod提供了方便的接口,而且库的编写方式可以扩展以支持更多。

安装

首先,我们需要确保SPI已启用,可以使用raspi-config完成。

$ sudo raspi-config

选择:

  • 选项5 - 接口
  • P4 – SPI
  • 启用→是

接下来,我们需要安装一些Raspbian的构建依赖:

$ sudo apt-get update

$ sudo apt-get install python-pip python-dev libfreetype6-dev libjpeg-dev build-essential

最后,我们可以使用Python包管理器来安装DesignSpark.Pmod和相关依赖:

$ sudo -H pip install designspark.pmod

请注意,官方文档可在以下网址找到:

http://designspark-pmod.readthedocs.io

该网站应该始终引用最新的文档。

关联的PyPi项目页面和GitHub开发库位于:

https://pypi.python.org/pypi/DesignSpark.Pmod/

https://github.com/designsparkrs/DesignSpark.Pmod

与Pmod连接

在写这篇文章的时候选了六个库支持的模块,我们将快速浏览一下这些模块的基本连接方法。

PmodAD1

 

 

 

 

 

 

 

 

 

 

 

 

PmodAD1(134-6443)是一款双通道12位ADC,采用ADI公司的AD7476A,采样速率高达每秒1百万个样本,使用一个6引脚SPI 的Pmod接口。

要从中读取,我们只需导入库,在适当的端口上创建一个AD1模块的对象,然后使用readA1Volts()方法获取ADC读数。 例如。:

from DesignSpark.Pmod.HAT import createPmod

adc = createPmod('AD1','JBA')

volts = adc.readA1Volts()
print(volts)

在这个例子中,使用端口“JAA”,它是2x6引脚JA连接器的第一行。

请注意,目前只有ADC通道A1被支持,因为树莓派使用了SPI配置。

PmodHB3

 

 

 

 

 

 

 

 

 

 

 

PmodHB3(134-6445)是一款2A H桥电路,用于直流电机驱动至12V,带有一个6引脚GPIO接口。

我们再次导入库,然后简单地向前旋转电机:

motor = createPmod('HB3','JAA')
motor.forward(20)

传递给正向方法的数字是占空比。 也有方法反向旋转,停止,改变PWM频率和清理。

PmodISNS20

与AD1类似,Pmod ISNS20(136-8069)是另一款6引脚SPI 的Pmod,但是这次是±20A的DC或AC输入,高精度电流传感器。 导入库后,从这里我们将读取:

isens = createPmod('ISNS20','JBA')
mA = isens.readMilliAmps()
print(mA)

简单

MIC3

 

 

 

 

 

 

 

 

 

 

 

 

现在你应该习惯这个,并从PmodMIC3(134-6475)ADC中读取一个整数值,我们将导入该库,随后:

mic = createPmod('MIC3','JBA')
int = mic.readIntegerValue()
print(int)

 

OLEDrgb

 

 

 

 

 

 

 

 

 

 

 

 

The

PmodOLEDrgb(134-6481)是一种有机RGB LED模块,具有96×64像素的显示器,并且具有16位彩色分辨率。这是我们将遇到的第一个12针Pmod。这也是第一个需要使用几个库。

要在模块中绘制“Hello,World!”,我们只需简单地:

from DesignSpark.Pmod.HAT import createPmod
from luma.core.render import canvas
from luma.oled.device import ssd1331
oled = createPmod('OLEDrgb','JA')
device = oled.getDevice()
        
with canvas(device) as draw:
   draw.rectangle(device.bounding_box, outline="white", fill="black")
   draw.text((16,20), "Hello, World!", fill="white")
    
   while True:
      pass

luma.coreluma.oled库提供了很多非常棒的功能,可以与这个Pmod一起使用,强烈推荐检出相关文档。

TC1

 

 

 

 

 

 

 

 

 

 

 

 

最后,PmodTC1(134-6476)是另一款6引脚SPI Pmod,专为经典K型热电偶导线设计的冷端热电偶至数字转换器。随模块提供的电线提供令人印象深刻的-73°C至482°C的温度检测范围。

导入库后,我们可以:

therm = createPmod('TC1','JBA')
cel = therm.readCelcius()
print(cel)

上述每个Pmod的完整基本示例,以及稍微更高级的一个 - 包括OLEDrgb模块的模拟时钟表示例 - 都通过文档与API文档一起提供。

总结

感谢DesignSpark Pmod HAT和支持库,我们现在可以比以前更快地使用树莓派和Python来连接Pmods和原型应用程序。现在也应该相当简单地向库添加对Pmods的支持,如果您想为新模块提供支持,请联系。

Andrew Back

Open source (hardware and software!) advocate, Treasurer and Director of the Free and Open Source Silicon Foundation, organiser of Wuthering Bytes technology festival and founder of the Open Source Hardware User Group.