基于树莓派的嵌入式Linux开发教学探索

更新时间:2023-03-08 04:58:39 阅读量: 教学研究 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

基于树莓派的嵌入式Linux开发教学探索

摘 要 通过Python、Java、C控制树莓派的GPIO,并与传统的嵌入式Linux开发教学比较,显示其高效且丰富的语言开发环境。通过树莓派推荐的Python语言实现串行通信和网络通信,分析实现智能家居与物联网的思路,并与传统的开发方式比较,显示其突出的实用价值。分析树莓派的软硬件和全球资源,介绍智能小车的教学实践,显示其在平台选型时的优势所在。最终得出树莓派可使嵌入式Linux开发及教育取得显著进展的结论。

【关键词】树莓派 Python Java C 嵌入式 Linux 树莓派(Raspberry Pi)是基于ARM11的开发板,内置GPU支持1080P高清视频硬解码,创始人埃本?厄普顿(Eben Epton)是英国剑桥大学博士,最初的开发动机是用之于教育[1]。树莓派分A/B两个版本,价格仅25/35美金,面积与信用卡相差无几。它提供了以太网(B版)、USB、HDMI接口,基于Linux 的操作系统、Python语言开发环境,同时也支持C、Java等语言,可用于编程开发或作为网络电视机顶盒。CPU时钟默认为700MHz,允许超频,实测可以稳定工作在1G以上。短短几年间全球已售出几百万片,广泛应用于教育、工控、机器人、物联网、智能家居等领域。

目前我国嵌入式Linux开发的教材与硬件设备大量使用S3C24x0、S3C6410开发板,开发与教学难度较大。而无论体积,集成度,性价比,开发环境与效率,树莓派都有明显优势,它的性能足以流畅的支持Windows远程桌面,不需要显示屏即可进行开发与学习。因为发现树莓派的众多优点,我们在《Linux应用开发实训》课程中将之引入教学实践,学生反应良好,他们甚至奇怪为什么之前的ARM Linux相关课程要用24x0开发板来学习,而不直接用树莓派。 1 三种语言控制树莓派GPIO

树莓派的IO共有26根Pin,排列如图1所示,其中包括GPIO 8个Pin,SPI 5个Pin,串口2个Pin,I2C 2个Pin,其余为DNC和电源Pin。为比较Python、Java、C在树莓派上的开发特点,在GPIO上连接LED和限流电阻,分别使用三种语言让LED点亮一秒然后熄灭。 1.1 Python控制GPIO

树莓派自带Python开发环境,它推荐使用Python语言进行开发工作,控制GPIO需要先安装RPi.GPIO库,安装完成后,点亮与熄灭LED的Python代码如下[2]。 import RPi.GPIO as GPIO #导入GPIO库 import time #导入时钟库

GPIO.setmode(GPIO.BCM) # 使用 BCM的 I/O命名 GPIO.setup(18, GPIO.OUT) # 设BCM I/0的18端

口为输出口

GPIO.output(18, GPIO.HIGH) # 设为高电平,灯亮 time.sleep(1) #亮1秒

GPIO.output(18, GPIO.LOW) # 设为低电平,灯灭 1.2 Java控制GPIO

最新的树莓派Raspbian操作系统已经自带jre运行环境,安装pi4j的类库后,使用Java控制LED的代码如下。 final GpioController gpio=GpioFactory.getInstance();//GPIO对象

final GpioPinDigitalOutput

ledpin=gpio.provisionDigitalOutputPin(

RaspiPin.GPIO_01,\,PinState.HIGH);// ledpin对象,设置为输出口、高电平

ledpin.high();//设ledpin为高电平,灯亮 Thread.sleep(1000); //延时1秒 ledpin.low();//设置低电平,灯灭 1.3 C控制GPIO

安装BCM2835 C Library后,使用文本编辑器编写以下代码,存为led.c,然后用gcc编译,控制LED的代码如下。 #include

#define LED RPI_GPIO_P1_12 // LED对应bcm2835库中的P1_12引脚

void main(int argc, char **argv){ bcm2835_init();//初始化GPIO端口 bcm2835_gpio_fsel(LED,

BCM2835_GPIO_FSEL_OUTP);//设为输出

bcm2835_gpio_write(LED, HIGH); //设LED引脚为高电平,灯亮

bcm2835_delay(1000);//亮一秒

bcm2835_gpio_write(LED, LOW); //设置低电平,灯灭 }

1.4 比较与分析

上述三个程序都运行于树莓派官方提供的Linux操作系统Raspbian中,其中树莓派推荐的Python语言代码最为简洁直观,接近于人的自然语言,而对于大量已经掌握Java语言的程序员而言,Java代码一目了然,且不需要学习Python语言。由于有BCM2835 C Library库的支持,C代码的实现也不难,不需要自己写GPIO的Linux驱动。在这个简单的GPIO编程中,可以看到树莓派的Linux开发有丰富的语言环境可选择,开发效率高且易于学习,相对于传统的S3C24x0上的“Linux驱动编程+应用层编程+交叉编译”要容易掌握。我们在Linux开发实训教学中,通过上述三种语言的例子,使学生体验到树莓派开发的高效与语言环境的丰富多样。

2 应用开发分析

以下用树莓派推荐的Python语言实现串行通信和TCP/IP网络通信等更为复杂的应用,然后分析实现智能家居和物联网的思路,以进一步分析树莓派的能力和优点。 2.1 串行通信

安装python-serial库后,用Python语言在树莓派的Raspbian操作系统中实现串行通信的代码如下。 import serial

sport=serial.Serial(\, baudrate=9600) # f=open(\,'r+') # 打开要发送的文件 while True:

sbuf=f.readline() # 读一行到sbuf中 if len(sbuf)==0: # 空行表示发送完毕 break

sport.write(sbuf) # 发送sbuf内容 f.close # 关闭文件

对于嵌入式Linux系统的串行通信编程,与传统的C语言开发相比,Python代码显得“简洁优美”,犹如人的自然语言,廖廖数语,即可实现串口通信,非常适合快速开发与教学使用。树莓派的开发显示,尽管C(C++)可以让开发者更深入理解和控制硬件,对于Linux内核和驱动的开发仍然有不可取代的价值,但随着硬件越来越便宜,性能越来越

好,C在Linux应用层开发的使用率正在并将继续被象Python或Java这类更“高级”的面向对象语言蚕食,就如以前的汇编语言使用率被C蚕食一样。

2.2 Socket通信、智能家居或物联网

Python同样能以很少的语句实现TCP/IP通信。它实现Socket客户端的关键代码如下。 import socket

address=('192.168.1.102', 2800) # 服务器IP地址和端口号

s=socket.socket(socket.AF_INET, socket.SOCK_STREAM) # IPv4,TCP

s.connect(address) # 向服务器发起Socket连接 s.send('Hello') # 向服务器发送Hello s.close() # 关闭Socket

与C(C++)或者Java相比,Python的Linux网络编程仍然出人意料的简洁。由于树莓派的性能足以支持专业的LAMP(Linux Apache Mysql PHP)Web服务器,因而,只要综合上述的GPIO和串口编程,控制外围的8bit单片机及传感器,安装LAMP Web服务器,通过Python实现网络通信及管理界面,即可构成智能家居或物联网的控制中心。 若按传统的基于S3C24x0的嵌入式Linux开发教学方式,要实现智能家居或物联网控制系统,需要设计ARM开

发板,对Linux进行移植裁剪,用C语言开发硬件驱动与应用层,然后交叉编译到开发板中,开发链很长,难度相当大,软硬件的可靠性与稳定性也需要长时间的测试。此外,Linux内核及驱动程序的C代码使用了大量的指针和双指针,如何深入理解这些指针变量,是嵌入式开发与教育的一大难点。而使用树莓派,Python语言“明白如话”, 不需要模拟器和交叉编译,即写即运行,硬件小如信用卡大小,可以直接嵌入到应用系统中使用,无需自行设计生产,在应用开发上有突出的实用价值。

3 软硬件、资源优势与平台选型 3.1 软硬件优势

树莓派之所以在全球热销,原因不仅在于支持Python、Java、C等丰富的语言开发环境,它提供的Raspbian操作系统是历时5年多重新测试与移植超过19000个Linux软件包的结晶。创始人Eben博士目前任树莓派的主芯片设计公司Broadcom的IC设计主管,可以很好的控制CPU及开发板的性价比和质量(Broadcom是全球领先的通信领域的半导体公司)。因此,树莓派同时拥有CPU、操作系统、应用开发环境三个方面的背景优势。此外,由于内置GPU支持1080P视频硬解码,树莓派官方又提供了界面友好的OpenELEC和RASPBMC操作系统,它可以打造成家庭媒体中心,成为网络电视机顶盒。

3.2 资源优势

全球有数以百万计的开发者在为树莓派进行开发,有丰富的软硬件开发资源可供参考与借鉴。软件巨头Oracle推出了基于树莓派和Java Fx的DukePad方案,并开设了互联网免费课程“Develop Java Embedded Applications Using a Raspberry Pi”(使用树莓派开发Java嵌入式应用)。RaspiRobotBoard是一个典型的树莓派扩展板,可将树莓派扩展为机器人控制器,它有专门的Python库支持,支持对机器人的控制。利用它的Python库实现一个简易的“漫步者机器人”只需三十几行代码[3]。可以再添加超声波测距仪和显示器,WiFi、摄像头等,做成机器人竞赛常用的“探月车”。我们在嵌入式专业毕业班的教学上,使用树莓派作为主控制器,结合外围的51单片机、传感器、电机等实现智能小车,借助Internet上丰富的树莓派资源进行开发,取得了较好的教学效果。 3.3 平台选型

国内有不少仿造树莓派的开发板,由山寨手机或平板的方案改造而成,通常声称有更高的硬件配置。但由于树莓派全球性软硬件资源的综合优势,用户比较不用担心它的质量、长期供货、是否停产、以及长远的技术延续和发展前景,开发者也不必为设计和生产技术要求很高而批量又不大的开发板困扰,在快速变化与剧烈竞争的市场环境下,这些都

是开发与教学在平台选型时需要考量的重要因素。 由于树莓派的Broadcom和剑桥背景,而ARM也同样源自剑桥,树莓派所构造的软硬件平台并不是一个简单的玩具,它有深远的优势所在,战略上看,相似的开发平台要与树莓派竞争,需要有重量级的资源支持。树莓派的成功对于我国高校与企业的合作具有启发意义,期待将来自主芯片与操作系统的“中国派”出现。 4 结语

树莓派对于全球嵌入式Linux开发及教育已经并将继续带来广泛的影响,及早将之引入我国主流的嵌入式开发与教学环境中或将是有益的。尽管传统的“ARM开发板硬件设计+ Linux 移植裁剪+虚拟机环境+交叉编译+驱动编程+应用层编程”开发链可以深入理解和控制嵌入式Linux系统,但因其复杂性而更适合需要定制Linux内核与驱动的精英开发、精英教育或研究者。树莓派的应用开发模式远为易学易用,适合快速推出产品的市场需求和普及性的教育,全球丰富的应用事例以及我们的实践探索均显示,树莓派可使嵌入式Linux开发及教育取得显著进展。 参考文献

[1]Eben Upton,Gareth Halfacree.王伟,许金超,郭栋,梁黎颖译.Raspberry Pi用户指南[M].北京:人民邮电出版社,2013.

[2]Matt Richardson,Shawn Wallace著.李凡希译.爱上 Raspberry Pi[M].北京:科学出版社,2013.

[3]Simon Monk著.姜斐祚译.Raspberry Pi:Python编程入门[M].北京:科学出版社,2014. 作者简介

李文胜(1969-),男,福建省泉州市人。硕士学位。现为广州松田职业学院讲师。研究方向为嵌入式系统开发,IC设计等。 作者单位

广州松田职业学院 广东省广州市 511370

本文来源:https://www.bwwdw.com/article/oep.html

Top