无论开发者是专业人士还是业余爱好者,在整个开发周期中,树莓Pi开发板都是非常有用的。虽然树莓派Zero受到了人们的极大关注,但它一直是稀缺品。幸运的是,设计师可以使用Pi家族中的其他电路板,这些电路板也具有出色的功能,可以满足各种应用需求。
Raspberry Pi 3使用其四核处理器,可以提供比单核Pi Zero多一倍的内存。对于需要较小设计包但对Pi Zero的性能感到失望的开发人员来说,Raspberry Pi计算模块3 (CM3)是一个不错的选择。该模块不仅具有Pi 3的高性能,还具有类似Pi Zero的信用卡大小。通过使用大量的扩展硬件板和现有软件,开发人员可以使用Pi 3和CM3来满足各种应用需求。
让Raspberry Pi开始运行
Raspberry Pi系统提供了强大的开源基础,使供应商、第三方开发者和用户自身都能够利用和贡献日益丰富的软硬件生态系统。Pi最初是由Raspberry Pi Foundation作为计算机教学的低成本平台开发的,现在已经发展成为一个功能强大、适合快速原型开发的低成本平台,并越来越多地被用作嵌入式计算平台。
Pi软件可以提供类似级别的性能,并且很容易获得。Pi开发板运行Raspbian,是针对树莓Pi开发板优化的GNU/Linux操作系统(OS)版本。开发者可以将包含Raspbian安装程序NOOBS的SD卡插入Pi开发板的SD接口,几秒钟后就会出现一个熟悉的Linux环境并开始运行。
由于Raspberry Pi社区非常活跃,有特定需求的开发者可以从其他操作系统中进行选择,包括桌面Ubuntu、Ubuntu Core、Windows 10 IoT Core、基于Linux的开源媒体中心(OSMC)和RISC OS。对于这些发行版,开发人员只需要使用SD卡上存储的下载映像来加载系统。最后,软件工程师可以利用丰富的可用软件库来支持各种编程语言的开发。
圆周率
在硬件层面上,Pi硬件已经发展成三个分支,它们在性能、大小和功能上有一些显著的差异(表1)。最近推出的Pi Zero因其小尺寸而备受关注,可用作入门级开发板。为了降低成本和封装尺寸,牺牲了一些功能元件。相比之下,Pi 3及其嵌入式变体CM3拥有高性能四核处理器和大内存,可以为嵌入式应用提供强大的硬件平台。此外,CM3封装在不牺牲性能或功能的情况下几乎与Pi Zero相同。
Pi处理器iopi3bm2837的内存大小(1.2ghz 64位四核ARM Cortex-A53,带双核VideoCore IV GPU)
1GB内存
Nvm: microsd卡插槽
85毫米x 56毫米
Pi 40针持针器
40 GPIO
802.11n无线网络
蓝牙4.1
以太网
通用串行总线
高清晰度多媒体接口
AV端口
摄像机接口(CSI)
显示接口(DSI)
CM3与3相同
1GB内存
NVM: 4 GB eMMC板载闪存
67.6毫米x 31毫米
200铅钠
48 GPIO
两个I2C
两个SPI
两个UART
2 SD/SDIO
高清晰度多媒体接口
通用串行总线
DPI、SMI、CSI、DSI
零BCM 2835 (1 GHz单核ARM1176)
512兆内存
Nvm: microsd卡插槽
65毫米x 30mm毫米
Pi 40引脚过孔
高清晰度多媒体接口
通用串行总线
兼容帽子的持针器
复合文章及复位针座
CSI摄像机连接器
表1:Raspberry Pi3、计算模块3 (CM3)和Pi Zero之间的比较(资料来源:Digi-Key Electronics,根据Raspberry Pi基金会数据编制)
标准的硬件接口是树莓Pi等平台成功的关键因素。最近推出的Pi开发板,包括Pi 3和Pi Zero,可以提供相同的40引脚接口,引出28个GPIO引脚,其中一些是I2C、SPI和UART连接的两倍(图1)。除了GPIO引脚,这个pi标准接口还提供3.3 V、5 V、接地等线路,比如EEPROM ID。由于这种通用的引脚布局,Pi用户可以从第三方供应商那里找到各种扩展板,并将其全部构建在这个标准接口上。
图1: PI开发板(包括Pi 3和Pi Zero)有一个通用的40针接口,从主板处理器和相关部件引出GPIO和其他电路。(来源:树莓派基金会)
但对于Pi Zero用户来说,40针接口是以PCB上镀通孔的形式提供的,需要用户压接或焊接到通孔连接器的管脚插座上。对于Pi 3来说,连接器集线器本身就是标配(图2),对于Wi-Fi、以太网等Pi Zero不具备的功能也配备了连接器,如表所示。
图2:在提供Pi标准40针接口的情况下,Pi Zero (a)只提供通孔连接,而Pi 3 (b)包括一个40针连接器,可以接受一个名为HAT(顶装硬件)的扩展板。(来源:树莓派基金会)
扩展硬件
由于Pi接口提供电源、接地和GPIO,开发人员可以将他们的分立电路直接连接到Pi 3 GPIO接口引脚。然而,Pi平台并不是从零开始布局电路,而是提供了一种更有效的方式来扩展Pi 3系统的功能。这里,Pi 3上40针插口的可用性为配置为HAT(顶部安装硬件)的扩展板提供了标准接口。通过这种简单的电气和机械接口,开发人员可以快速增强基本Pi 3开发板的特定应用功能。开发人员只需将兼容Pi的扩展帽按在40针连接器上,就可以创建扩展板堆栈,所有这些都可以共享这个单一接口。
开发者可以利用大量的扩展板。例如,Pi Sense HAT包括方向或环境检测应用所需的一整套传感器。此外,还提供了一个LED点阵和一个五按钮操纵杆,用户可以使用它们进行反馈和交互(图3)。
图3:开发人员只需插入HAT就可以向Pi开发板添加功能。例如,这款Pi Sense帽子可以提供多个传感器、LED点阵和五按钮操纵杆,用于用户交互。(来源:树莓派基金会)
Sense本身就是一个复杂的子系统:扩展板除了自带的微芯片技术8位ATtiny MCU (ATTINY88)外,还包括意法半导体LSM9DS1惯性测量单元(IMU)、意法半导体HTS221湿度/温度传感器和意法半导体LPS25HBTR压力传感器。
简单部署
与其他Pi兼容的扩展板一样,开发人员可以通过将HAT板向下压入Pi 3的40针引脚插槽,将这款SenseHAT连接到Pi 3系统。软件接口也非常简单:官方支持的Python sense-hat库在简单直观的调用中隐藏了底层硬件交互(清单1)。
从sense_hat导入SenseHat
sense=SenseHat()
temp=sense.get_temperature()
打印(“温度:% sC“% temp”)
湿度=sense.get _湿度()
打印('湿度:%s %%rH' %湿度
# get_orientation_degrees返回一个Python字典
#带有俯仰、滚动和偏航键
orientation=sense . get _ orientation _ degrees()
print('p: {pitch},r: {roll},y: {yaw} '格式(* *方向))
1: Raspberry Pi Sense HAT库使软件开发者能够通过一些直观的调用从Sense HAT硬件获取数据。(代码来源:树莓派基金会)
除了Pi Sense HAT,开发者还可以找到解决最典型应用需求的第三方帽子。例如,Seeed Technology 114990831提供2通道16位数模转换器(DAC)和24位模数转换器(ADC),具有8个单端或4个差分输入通道。开发人员可以从许多其他设备中找到扩展,如Seeed GPS、DFRobot超声波搜索传感器和Adafruit步进电机。
如果现有的扩展板不能满足开发者的要求,Seeed Technology还提供了一个配电盘帽,里面包含了一些内置的元件,包括P-MOS、N-MOS、NPN和PNP晶体管。
在使用HAT时,开发人员可以利用Raspberry Pi基金会、供应商和其他Pi社区成员提供的许多软件工具。例如,Raspberry Pi raspi-gpio工具使开发人员能够查看gpio的状态并修改其行为。程序员也可以使用该工具的开源C代码作为模型,构建自己的GPIO控制软件例程。
开发者还可以找到Python等更高级语言的GPIO库。用RPi。GPIO Python模块,开发者可以使用call函数在管脚级控制GPIO函数的各个方面,比如用GPIO.input(channel)读取GPIO管脚的值,用GPIO.output(channel,state)将指定的GPIO管脚设置为指定的状态。
Zero Python库通过MotionSensor、LightSensor、LED、Motor等更高级的抽象来促进GPIO编程。通过这种方法,程序员可以使用更直观的命令来读取基本硬件的状态或者设置所需的状态,比如可以打开led的led.on()命令,从而处理底层硬件,并依靠库来管理基本的GPIO事务。
使用Grove
HAT接口标准为第三方开发者提供了有吸引力的基础,但仍然局限于Pi平台。相比之下,Grove interface提供了跨硬件平台的单一标准基础,吸引了更多的扩展板开发者。Seeed Technology Grove starter kit提供一个Pi兼容帽板,带有多个Grove兼容连接器。和其他帽子一样,Grove HAT安装在PI 3的40针连接器上(图4)。
图4:Seeed Technology Grove Starter Kit连接到Pi标准的40针连接器,使开发人员能够使用各种Grove兼容外设来增强他们的Pi系统。(来源:Seeed科技)
通过Grove HAT,开发人员可以保留Pi 3的简单性和性能,同时访问各种Grove兼容的扩展,包括执行器、气体传感器、电机控制设备、扬声器、无线收发器等。开发人员没有将扩展功能直接插入Pi 3 40针连接器,而是将这些产品附带的Grove连接器插入安装在Grove HAT顶部的一个Grove插槽中(图4)。
开发者可以找到C、Java、Node.js、Python等类似的Grove软件库,在自己的应用中插入Grove函数。此时,通过使用更高级别的例程,开发人员可以考虑收集模拟数据(清单2),并依靠库中的低级例程来执行相应位级别的事务(清单3)。
#用我们的树莓皮发布温度、光线和声音水平
# http://www . dexter industries . com/GrovePi/projects-for-the-raspberry-pi/raspberry-pi-Twitter-sensor-feed/
导入twitter
导入时间
导入grovepi
导入数学
连接数量
声音传感器=0 #端口A0
光传感器=1 #端口A1
温度传感器=2 #港
led=3 #端口D3
intro_str='DI实验室'
#连接到Twitter
api=twitter。Api(
消费者密钥='您的密钥'
consumer _ secret=your key,
访问令牌密钥='您的密钥'
access_token_secret='YourKey '
)
grovepi.pinMode(led,“输出”)
grovepi.analogWrite(led,255)#将led变为最大以显示准备就绪
虽然正确:
#与GrovePi通信出现问题时的错误处理
尝试:
#从温度传感器获取数值
[t,h]=grovepi.dht(温度传感器,0)
#从光传感器获取值
light _ intensity=grovepi . analog read(light _ sensor)
#向LED提供PWM输出
grovepi.analogWrite(led,light_intensity/4)
#获取音量
sound_level=grovepi.analogRead(声音传感器)
#发布一条推文
out_str='%s温度:%d C,湿度:%d,光线:%d,声音:%d' %(intro_str,t,h,light_intensity/10,sound_level)
print (out_str)
api。PostUpdate(out_str)
时间.睡眠(60)
除了IOError:
打印(“错误”)
除了键盘中断:
退出()
除了:
打印(“重复推文或推文拒绝”)
清单2:开发者可以使用Pi开发板、Grove扩展和Grove软件库快速实现复杂的应用,比如这个例子,它模拟了将环境数据传输到一个主机服务(本例中为Twitter)的物联网类型的过程。(代码来源:德克斯特工业公司)
#从引脚读取模拟值
定义模拟读取(引脚):
write_i2c_block(地址,aRead _ cmd[引脚,未使用,未使用])
read _ i2c _字节(地址)
数字=读取i2c块(地址)
退货数量[1] * 256数量[2]
清单3: Grove软件库处理访问硬件外设所需的位级操作,这样开发人员可以使用更直观的调用(如analogRead(pin))。(代码来源:德克斯特工业公司)
简化配置
过去,向系统添加新硬件会面临许多层面的挑战。硬件工程师需要设计合适的机械和电气接口。应用程序开发人员需要找到能够提供所需抽象类型的合适的软件库,以便最大限度地提高生产率。然而,借助Pi标准40针连接器和上面提到的现有软件库,Pi 3及其生态系统可以消除这些挑战。此外,对于查找和加载特定于硬件的板支持包(BSP), Pi架构可以节省开发人员的额外工作。BSP通常提供完成操作系统和扩展硬件之间的接口所需的底层代码。
Pi架构极大地消除了Pi用户安装和配置BSP的不同硬件要求。相反,Pi系统使用设备树,可以提供加载模块和管理资源分配的机制,从而避免多个软件模块之间争夺相同资源的冲突。如果硬件设备需要特殊的软件,Pi用户只需要设置一些配置项。OS内核会自动找到并加载与相应硬件设备相关的模块。例如,Pi系统中的I2C功能在默认情况下是禁用的。开发人员只需要编辑配置文件config.txt来取消对一行文本的注释:
#dtparam=i2c_arm=on
平台甚至简化了这一步。Raspbian第一次启动时,会运行一个配置工具,向用户显示配置项的菜单,包括启用各种界面的功能。
对于依赖基于I2C的硬件的应用程序,更高级别的库(比如前面提到的那些)可以消除开发人员在I2C事务级编码的需要。当开发人员确实需要为特殊的I2C操作开发代码时,他们可以找到用于Linux的I2C工具和其他软件,这些工具可以直接使用或用于创建定制的I2C软件示例。
嵌入式Pi
对于希望在产品中嵌入Pi系统的设计师来说,最近推出的CM3提供了一种紧凑的直接替代Pi解决方案(图5)。基于与Pi 3相同的四核处理器,CM3也提供了与Pi 3相同的功能和作用。此外,CM3在电路板上使用4 GB eMMC闪存:而其他Pi开发板提供了一个micro SD插槽,可用于添加外部闪存卡。(Raspberry Pi还提供CM3Lcm3的“精简”版本,该版本包括该产品上除板载闪存之外的所有内容。)
图5:树莓Pi计算模块3(CM3)兼具Pi Zero的小尺寸和Pi 3的性能,可以引出比这两款产品更多的管脚。它还包括一个4 GB闪存模块(在主板背面)。(来源:树莓派基金会)
CM3放弃了Pi 3和Pi Zero中使用的40针IO接口。相反,CM3在板边缘提供了200引脚SODIMM(小型双列直插式内存模块)连接器的扩展接口(图6)。事实上,整个CM3板与DDR2 SODIMM的外形兼容,因此开发人员可以通过标准的DDR2 SODIMM连接器将CM3连接到目标系统。
图6: Raspberry Pi cm3没有使用其他Pi开发板上的40针接口,而是提供了200针分支处理器和其他电路板组件。(来源:树莓派基金会)
为了简化开发,工程师可以使用Raspberry Pi CM3开发套件将CM3模块与Raspberry Pi计算模块的IO板结合起来。IO板是一个简单的开源电路板,带有用于CM3的DDR2 SODIMM连接器和用于断开200引脚CM3接口的引脚支架(图7)。此外,IO板还为Pi 3开发板上提供的HDMI、USB、摄像头和显示器端口提供了连接器。
图7:CM3开发套件中使用的Raspberry Pi计算模块的IO板提供了用于CM3的DR2 SODIMM连接器、用于200引脚CM3接口的引脚支架以及用于HDMI、USB、摄像头和显示端口的连接器。(来源:树莓派基金会)
实时应用
CM3具有高性能和小尺寸的特点,非常适合用作电子产品(如电视机、音频设备和类似的消费产品)中的嵌入式系统。但是,对于实时应用,开发人员需要考虑默认Pi平台的一些限制。
最值得注意的是,Pi系统不使用实时时钟(RTC)。此外,Pi 3和CM3中使用的Cortex-A53(或Pi Zero中使用的ARM1176)等内核不包含传感器读数等实时事件定时所需的功能,如SysTick系统定时器。SysTick定时器是ARM Cortex-M系列等内核的重要功能,是专门为确定性实时应用设计的。
工程师可以通过使用Maxim Integrated DS3231等精密RTC IC轻松弥补这一不足。DS3231 RTC IC在功耗温度范围内的精度为2 ppm,并且可以产生方波输出来驱动软件系统的定时器。此外,它还提供了一个简单的I2C接口,可用于读取实时时钟计数。开发人员可以通过使用前面提到的基于I2C工具包的C例程将RTC数据集成到他们的实时应用程序中。
使用标准Pi系统进行实时应用的另一个限制在于操作系统本身。对于一般的应用程序,典型的Linux发行版缺乏可靠地监视和控制实时进程所需的确定性响应。事实上,在Linux的默认操作模式下,即使是非常高优先级的线程也可能无法抢占内核。因此,如果高优先级例程试图读取传感器、控制电机等。“实时”例程可能需要等待一段不确定的时间。
幸运的是,Linux内核包含一个名为CONFIG_PREEMPT的配置选项,可以解决这个限制。这个选项允许高优先级例程抢占内核,除非在特殊情况下,比如螺旋锁中的内核线程被内核执行(被阻塞以等待资源)。在实践中,确保内核可以被抢占,包括除了修改这个配置项之外的其他步骤。开源社区已经使用发布的CONFIG_PREEMPT_RT补丁集将Linux转换成一个完全可抢占的内核。因为树莓PI基金会和Pi社区成员提供的信息比较完整,所以这个补丁会比较简单、间接、常规。
摘要
最近,虽然树莓Pi Zero的开发板受到了很多关注,但事实证明,树莓Pi 3和CM3为工程师提供了一个更有吸引力的平台来创建高性能系统。3和CM3都有一个四核处理器,可用的板载RAM是单核Pi Zero的两倍。
至于本身,Pi 3提供了更强大的计算基础,可以利用大量可用的符合Pi标准的40针GPiO接口的扩展板。使用CM3,开发人员可以获得将Pi Zero的小尺寸与Pi 3的性能优势相结合的计算基础。使用这些最新的Pi开发板、硬件扩展和现有的软件库,开发人员可以快速实现定制的系统,以满足不同的应用需求。
标签:PI开发人员接口