您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 基于树莓派的嵌入式Linux开发教学探索-李文胜
EmbeddedTechnology•嵌入式技术ElectronicTechnology&SoftwareEngineering电子技术与软件工程•219【关键词】树莓派PythonJavaC嵌入式Linux树莓派(RaspberryPi)是基于ARM11的开发板,内置GPU支持1080P高清视频硬解码,创始人埃本•厄普顿(EbenEpton)是英国剑桥大学博士,最初的开发动机是用之于教育[1]。树莓派分A/B两个版本,价格仅25/35美金,面积与信用卡相差无几。它提供了以太网(B版)、USB、HDMI接口,基于Linux的操作系统、Python语言开发环境,同时也支持C、Java等语言,可用于编程开发或作为网络电视机顶盒。CPU时钟默认为700MHz,允许超频,实测可以稳定工作在1G以上。短短几年间全球已售出几百万片,广泛应用于教育、工控、机器人、物联网、智能家居等领域。目前我国嵌入式Linux开发的教材与硬件设备大量使用S3C24x0、S3C6410开发板,开发与教学难度较大。而无论体积,集成度,性价比,开发环境与效率,树莓派都有明显优势,它的性能足以流畅的支持Windows远程桌面,不需要显示屏即可进行开发与学习。因为发现树莓派的众多优点,我们在《Linux应用开发实训》课程中将之引入教学实践,学生反应良好,他们甚至奇怪为什么之前的ARMLinux相关课程要用24x0开发板来学习,而不直接用树莓派。1三种语言控制树莓派GPIO树莓派的IO共有26根Pin,排列如图1所示,其中包括GPIO8个Pin,SPI5个Pin,基于树莓派的嵌入式Linux开发教学探索文/李文胜通过Python、Java、C控制树莓派的GPIO,并与传统的嵌入式Linux开发教学比较,显示其高效且丰富的语言开发环境。通过树莓派推荐的Python语言实现串行通信和网络通信,分析实现智能家居与物联网的思路,并与传统的开发方式比较,显示其突出的实用价值。分析树莓派的软硬件和全球资源,介绍智能小车的教学实践,显示其在平台选型时的优势所在。最终得出树莓派可使嵌入式Linux开发及教育取得显著进展的结论。摘要串口2个Pin,I2C2个Pin,其余为DNC和电源Pin。为比较Python、Java、C在树莓派上的开发特点,在GPIO上连接LED和限流电阻,分别使用三种语言让LED点亮一秒然后熄灭。1.1Python控制GPIO树莓派自带Python开发环境,它推荐使用Python语言进行开发工作,控制GPIO需要先安装RPi.GPIO库,安装完成后,点亮与熄灭LED的Python代码如下[2]。importRPi.GPIOasGPIO#导入GPIO库importtime#导入时钟库GPIO.setmode(GPIO.BCM)#使用BCM的I/O命名GPIO.setup(18,GPIO.OUT)#设BCMI/0的18端口为输出口GPIO.output(18,GPIO.HIGH)#设为高电平,灯亮time.sleep(1)#亮1秒GPIO.output(18,GPIO.LOW)#设为低电平,灯灭1.2Java控制GPIO最新的树莓派Raspbian操作系统已经自带jre运行环境,安装pi4j的类库后,使用Java控制LED的代码如下。 finalGpioControllergpio=GpioFactory.getInstance();//GPIO对象finalGpioPinDigitalOutputledpin=gpio.provisionDigitalOutputPin(RaspiPin.GPIO_01,LED,PinState.HIGH);//ledpin对象,设置为输出口、高电平ledpin.high();//设ledpin为高电平,灯亮Thread.sleep(1000);//延时1秒ledpin.low();//设置低电平,灯灭1.3C控制GPIO安装BCM2835CLibrary后,使用文本编辑器编写以下代码,存为led.c,然后用gcc编译,控制LED的代码如下。#includebcm2835.h#defineLEDRPI_GPIO_P1_12//LED对应bcm2835库中的P1_12引脚voidmain(intargc,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语言。由于有BCM2835CLibrary库的支持,C代码的实现也不难,不需要自己写GPIO的Linux驱动。在这个简单的GPIO编程中,可以看到树莓派的Linux开发有丰富的语言环境可选择,开发效率高且易于学习,相对于传统的S3C24x0上的“Linux驱动编程+应用层编程+交叉编译”要容易掌握。我们在Linux开发实训教学中,通过上述三种语言的例子,使学生体验到树莓派开发的高效与语言环境的丰富多样。2应用开发分析以下用树莓派推荐的Python语言实现串行通信和TCP/IP网络通信等更为复杂的应用,然后分析实现智能家居和物联网的思路,以进一步分析树莓派的能力和优点。2.1串行通信安装python-serial库后,用Python语言在树莓派的Raspbian操作系统中实现串行通信的代码如下。importserialsport=serial.Serial(/dev/ttyAMA0,baudrate=9600)#f=open(send.txt,'r+')#打开要发送的文件whileTrue:sbuf=f.readline()#读一行到sbuf中iflen(sbuf)==0:#空行表示发送完毕breaksport.write(sbuf)#发送sbuf内容f.close#关闭文件对于嵌入式Linux系统的串行通信编程,与传统的�语言开发相比,Python代码显得“简洁优美”,犹如人的自然语言,廖廖数语,即可实现串口通信,非常适合快速开发与教学使嵌入式技术•EmbeddedTechnology220•电子技术与软件工程 ElectronicTechnology&SoftwareEngineering用。树莓派的开发显示,尽管C(C++)可以让开发者更深入理解和控制硬件,对于Linux内核和驱动的开发仍然有不可取代的价值,但随着硬件越来越便宜,性能越来越好,C在Linux应用层开发的使用率正在并将继续被象Python或Java这类更“高级”的面向对象语言蚕食,就如以前的汇编语言使用率被C蚕食一样。2.2Socket通信、智能家居或物联网Python同样能以很少的语句实现TCP/IP通信。它实现Socket客户端的关键代码如下。importsocketaddress=('192.168.1.102',2800)#服务器IP地址和端口号s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#IPv4,TCPs.connect(address)#向服务器发起Socket连接s.send('Hello')#向服务器发送Hellos.close()#关闭Socket与C(C++)或者Java相比,Python的Linux网络编程仍然出人意料的简洁。由于树莓派的性能足以支持专业的LAMP(LinuxApacheMysqlPHP)Web服务器,因而,只要综合上述的GPIO和串口编程,控制外围的8bit单片机及传感器,安装LAMPWeb服务器,通过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推出了基于树莓派和JavaFx的DukePad方案,并开设了互联网免费课程“DevelopJavaEmbeddedApplicationsUsingaRaspberryPi”(使用树莓派开发Java嵌入式应用)。RaspiRobotBoard是一个典型的树莓派扩展板,可将树莓派扩展为机器人控制器,它有专门的Python库支持,支持对机器人的控制。利用它的Python库实现一个简易的“漫步者机器人”只需三十几行代码[3]。可以再添加超声波测距仪和显示器,WiFi、摄像头等,做成机器人竞赛常用的“探月车”。我们在嵌入式专业毕业班的教学上,使用树莓派作为主控制器,结合外围的51单片机、传感器、电机等实现智能小车,借助Internet上丰富的树莓派资源进行开发,取得了较好的教学效果。3.3平台选型国内有不少仿造树莓派的开发板,由山寨手机或平板的方案改造而成,通常声称有更高的硬件配置。但由于树莓派全球性软硬件资源的综合优势,用户比较不用担心它的质量、长期供货、是否停产、以及长远的技术延续和发展前景,开发者也不必为设计和生产技术要求很高而批量又不大的开发板困扰,在快速变化与剧烈竞争的市场环境下,这些都是开发与教学在平台选型时需要考量的重要因素。由于树莓派的Broadcom和剑桥背景,而ARM也同样源自剑桥,树莓派所构造的软硬件平台并不是一个简单的玩具,它有深远的优势所在,战略上看,相似的开发平台要与树莓派竞争,需要有重量级的资源支持。树莓派的成功对于我国高校与企业的合作具有启发意义,期待将来自主芯片与操作系统的“中国派”出现。4结语树莓派对于全球嵌入式Linux开发及教育已经并将继续带来广泛的影响,及早将之引入我国主流的嵌入式开发与教学环境中或将是有益的。尽管传统的“ARM开发板硬件设计+Linux移植裁剪+虚拟机环境+交叉编译+驱动编程+应用层编程”开发链可以深入理解和控制嵌入式Linux系统,但因其复杂性而更适合需要定制Linux内核与驱动的精英开发、精英教育或研究者。树莓派的应用开发模式远为易学易用,适合快速推出产品的市场需求和普及性的教育,全球丰富的应用事例以及我们的实践探索均显示,树莓派可使嵌入式Linux开发及教育取得显著进展。参考文献[1]EbenUpton,
本文标题:基于树莓派的嵌入式Linux开发教学探索-李文胜
链接地址:https://www.777doc.com/doc-2527818 .html