来自Intel的物联网平台——Intel Galileo Gen2评测
扫描二维码
随时随地手机看文章
近日,Intel在与ARM在长达数年的对战中败下风来,宣布放弃移动SoC产品研发。不知ARM有没有暗自得意,不过在新兴物联网领域,Intel还不打算不战而退。Intel内部专门成立了物联网部门,并且连续推出多款覆盖各个价格区间的开发工具。继Galileo之后,Intel近期推出了其第二代产品——Galileo Gen2。或许我们可以从这个开发板中一窥Intel的物联网战略布局。
开箱—科技感十足
先来一睹Galileo 2的风采。
图1:Galileo 2 外包装
整体深蓝色调,一个酷酷的老头,眼镜里尽是无尽深邃的星空,未知Intel有没有购买Galileo的肖像版权?盒子左上角是Intel及Galileo的Logo;Logo下方,有Intel对爱好者的期许:What will you make?
图2:开箱
打开上盖,Galileo Gen 2露出真容。只是,没有了Galileo一代那个“灯,等灯~”的音乐声,也没有看到人偶。取出开发板,在盒子的底层还配备有一个电源适配器。
图3:电源适配器
除了电源适配器外,还附送了各种不同规格的插头转换器,英标、美标等,赞! 电源适配器规格为12V/1.25A。
图4:电源规格
然后来张全家福
图5:Galileo 2全家福
包装盒设计得很有科技感,不论深蓝背景下那个酷酷的Galileo头像,还是包装盒上盖内部的开发板与电源连接图,以及包装盒内部的星空图及再一次的“What will you make?”,不知道会不会激起你立即动手体验的欲望。
硬件—实用至上
略为令人失望的是,Galileo 2在硬件上面并没有进行大的升级。作为1代产品的升级版,Galileo 2仍然沿袭了1代产品的主要硬件指标,CPU还是那个CPU,主频也还是那个主频;内存也仍然还是256MB;网络接口也没有升级到Gigabit。
图6:Galileo主板规格
单纯的指标堆砌是没有意义的!在这一点上,Intel无疑是冷静的同时也是明智的。按照Intel的理解,物联网的一般应用中,并不会出现大量CPU密集的操作,更多的I/O密集型操作,所以实用、够用就好。这一点在Intel推出其它物联网相关的产品中也得到了印证,比如Intel的物联网网关,仍然使用的是Quark X1000作为它的芯片。
Galileo 2开发板的一些主要资源及特性如下
l CPU: Intel Quark SoC X100, 400MHZ, 32bit ISA指令集,1 CORE/1 THREAD, 16KB L1, 512KB SRAM
l RAM: 256MB DDR3,800MT/s
l NOR FLASH: 8MB NOR FLASH存储器
l SD CARD: Up to 32 GB
l USB: 1 USB-OTG, 1 USB Client
l mPCIe: 1X
l GPIO: 20 native digital I/O, 6 analog inputs
l SPI: 1X
l UART: 2X
l I2C: 1X
图7:Galileo 2主要的设备及资源
板载资源及外设接口,比较齐全,CPU性能只能算是一般,DDR RAM也算差强人意。不过作为一款面向物联网开发的产品,而且对于一款Headless产品来说,消耗的资源总体来说不会很高,应该能满足大部分需求。当然Galileo 2在外设配置方面也还是有自己的特色。
首先是板载的mPCIe接口的集成。MPCIe是Mini PCI-E的简称,是基于PCI-E 总线的接口,Mini PCI-E广泛用于笔记本电脑主板,如E-PC、Netbook,及无线网卡,固态硬盘等设备。板载mPCIe位于开发的背面,使用的是全高接口规格,方便用户扩展各种mPCIe类型的外设,如Intel的各种无线网卡或WIFI/BT二合一卡,也可以用来扩展存储容量。板载mPCIe是全高接口,如果使用半高接口设备的话,还需要一个支架。
图8: mPCIe接口
Galileo 2提供了Arduino UNO全兼容接口,可以方便的使用各种Arduino扩展板,结合全新的GPIO接口设计,各种外设搭配与应用,更加如鱼得水。虽然外观和1代一样,但是内部已截然不同。新的GPIO接口不再是通过GPIO Expander引出,而是直接连接到CPU,在翻转速度上有了本质的提升,GPIO的速度达到了2.97MHZ,对于需要高速接口的外部设备来说,就再也没有了局限,这也算是2代与1代的主要区别之一。不仅仅在硬件接口上兼容Arduino UNO R3,Galileo 2还能使用Arduino IDE来进行程序设计,上传二进制代码到Galileo开发板。不过需要注意的是,Galileo 2上的Arduino机制是通过模拟方式实现的,与真正的Arduino系列产品还是有区别的,一是部分API在使用的时候存在兼容性,二是在运行方式上同Arduino代码的运行有本质差异。可以说是以Arduino之名,行Intel之实。[!--empirenews.page--]
图9:Arduino UNO兼容接口
关于CPU,其前身为 clanton,英特尔® Quark™ SoC X1000 是英特尔的功耗最低的安全 SoC,旨在将智能扩展至网络边缘,并降低安全管理的物联网端点设备的成本。此单核、单线程英特尔 Quark SoC X1000 专用于英特尔提供的最小内核上,使其成为无风扇和无头设计中低成本、小外形、4 层主板的理想设计解决方案。位于 15 毫米 x 15 毫米封装中的集成 I/O 接口、时钟和稳压器简化了设计,并通过最小化平台所需要的外部组件减缩了材料清单。
图10:CPU特写
图11:CPU内部逻辑
相对GALILEO1代而言,GALILEO 2的具体变化归纳如下
l 去掉了CYPRESS GPIO扩展器,使用PCA9535来生成12位PWM波,这样生成的输出信号更平稳。在使用伺服电机时,最高能达到1度的控制精度。
l 去掉了GPIO扩展器之后,I2C的地址跳线也就不需要了,开发者可以自行为设备选择地址,唯一的例外是EEPROM,它仍然使用0100001作为它的地址。
l 所有的IO引脚都直接与QUARK SOCK芯片相连,这样GPIO的速度能达到2.97MHZ。以前由于速度过低而不能使用的部分设备在GALILEO GEN2就可以使用了。
l 开发板支持POE模块,上一代开发板不具备这个功能。
l 主USB接口改成了USB-OTG接口。电压规格变成了7~15VDC,已没有了VIN跳线,VIN现在与DC接口直接相连。
l 原来的MAX232改用FTDI芯片代替,兼容TTL-232 3.3V标准。
l 新的开发板尺寸比老版略大,4.87X2.83英寸大小。主要原因是不再使用部分内部电压调节器,转而使用其它的外部电压调节器,这样能有效的降低CPU的温度。
新一代Galileo仍然沿袭1代产品的主要硬件规格,在产品布局及一些细节上,根据社区反馈进行了调整,在易用性和实用性方面有了较大的改善。
上电体验—Linux为王
Galileo开发板使用双系统。
默认情况下,开发板上的8MB NOR FLASH内固化了一个小型的Linux系统,这就是所谓的固件。这个最小的Linux系统主要供Arduino编程用,可以使用Arduino IDE来编程并体验。不过这个功能有限,因为代码都是放在RAM中,一旦断电,代码就会丢失,算是鸡肋!Galileo 2出厂时固件版本为1.0.2,当前最新的版本为1.0.4。使用前需要先更新固件。从官方下载新版的固件,按如下方式连接硬件
图12:升级固件时的硬件连接
然后需要安装硬件驱动,实际上就是装串口驱动,安装好驱动后,设备管理器如下图所示
图13:安装好串口驱动
特别注意:上电后才能连接USB CLIENT接口;拔掉电源之前先拔掉USB CLIENT线缆,切记!
更新固件
图14:固件更新
要更好的体验及使用Galileo,需要在SD卡上烧写一个更完整的Linux系统。
从官方下载适用SD卡的Linux系统,使用Win32diskimager将镜像写入SD卡,开始上电。
Galileo开发板均没有提供显示接口,只能工作于Headless模式下。对于Headless模式的设备,一般有两种方法来访问设备:通过串口访问或通过SSH来连接。两种访问方法都非常方便,操作时略有区别:前者需要知道串口通信的参数设置如波特率等,这些参数一般可以通过查询官方的手册或资料获得;而后者需要预先知道设备的IP地址。本文使用SSH连接的方式来体验Galileo 2。
有很多方法来获取设备的IP地址,这里介绍一种新的方法及一个软件,Bonjour Browser。
Bonjour是苹果为基于组播域名服务(multicast DNS)的开放性零设置网络标准所起的名字。使用Bonjour的设备在网络中自动传播它们自己的服务信息并聆听其它设备的服务信息,设备之间就象在打招呼,这也是命名为Bonjour(法语:你好)的原因。很多设备、服务器和其他网络服务,诸如打印机、webcam、Apache、ftpd以及ssh,都支持Bonjour。它利用现有的Internet Engineering Task Force的(IETF)标准协议,比如DNS服务的发现,也是IETF通过Zeroconf of Working Group进行的标准化工作的一部分。
Bonjour Browser就是一个发现网络中提供相关服务的软件,使用它,可以轻松获取当前网络中的一些设备信息,其中包括设备的IP地址。
使用标准网线连接开发板与路由器,然后上电。等开发板上LED指示灯亮起,然后指示SD工作的LED灯开始闪烁,表明正在加载SD卡上的操作系统。等指示SD工作的LED灯停止闪烁,这时系统应该已完全启动,打开Bonjour Browser,看到类似如下的画面
图15:Bonjour Browser发现设备[!--empirenews.page--]
看到Galileo 2默认开启了SSH服务,同时看到设备的IP地址为192.168.1.161。有了这个IP地址,就可以使用用SSH工具来管理Galileo 2了。默认的用户名为root,没有设置口令
图16:Linux系统名称及CPU信息
Galileo 2上使用的是Yocto Linux系统,这是一个定制的Linux系统,软件包管理系统是opkg,和OpenWRT使用的相同的软件包管理系统。
查看CPU信息,单核单线程,主频为400MHZ,注意CPU特性里没有MMX支持。
开发—大家风范
丰富的开发环境,应该算是Galileo最大的特色了。
对于开发者来说,硬件只是其中的一部分,完整的开发环境,完善的文档支持以及硬件底层库支持,尤显重要。这一点,在Galileo上完整得到了体现,尽显Intel大家风范!
首先,Galileo系列均支持Arduino IDE开发环境。不过自去年Arduino撕逼战拉开后,要小心选择相对的IDE版本。现在支持Galileo开发版本有两个,一个是Intel自己维护的版本,另一个是Arduino.cc推出的版本。不要下载Arduino.org推出的版本,这个是不支持Galileo系列开发的。
打开Arduino IDE,先安装对应的开发板支持包
图17:安装Galileo的软件支持包
开发板支持包名称为Intel i586 Boards,支持Galileo开发板。在IDE里选择对应的开发板及通信端口,就可以进行Arduino式编程,同是IDE里的样例程序也针对Galileo进行了调整。对于一款新的开发板,要熟悉它的流程,最经典的莫过于点灯。接下来写个LED点灯程序,
图18:Arduino版点灯
参考官方硬件原理图,GPIO 13对应开发板上的用户LED灯,写个小程序让它闪啊闪。然后是编译,下载到开发板。然后开发板上的小灯就真的开始闪啊闪了。
生成的程序下载到哪里去了呢?在SD卡的根目录下有个sketch文件夹,生成的程序都下载到这个目录,然后由系统调度执行,作为Linux的一个子进程,原来如此。这个也可以从下载的信息中看出来
echo "Moving downloaded file to /sketch/sketch.elf on target"
"$fixed_path/lsz.exe" --escape -c "mv $target_download_name /sketch/sketch.elf; chmod +x /sketch/sketch.elf" <> $tty_port_id 1>&0
Transfer complete
这段脚本做了两件事,一是下载代码到/sketch目录下;二是将它的权限更改为可执行,方便Linux系统调度。
当然,如果你不喜欢Arduino式的编程风格,还有更多的选择。
Intel XDK IoT Edition,是Intel提供的另一强大编译工具,集代码编辑、远程管理于一体。这个IDE还提供了Android App生成环境,可谓武装到了极点。
照例来生成一个点灯程序,打开XDK开发工具,从提供的模板里生成一个测试代码
图19:XDK模板选择
然后输入工程文件的名称,出现如下的代码编辑界面
图20:Node.js版点灯
默认服务器端执行平台使用的是Node.js,非常适合IoT应用。结合Intel的mraa及upm底层包,写IoT代码可谓得心应手。
除了可以编辑代码,上传到Galileo开发板之外,XDK还集成了SSH及Terminal工具,可以直接登录并管理开发板
图21:XDK的SSH功能
在XDK的SSH面板中指定开发板的IP地址及端口号,就可以直接连接到Galileo开发板。
XDK另外一个非常实用的工具是可以使用HTML5来开发各种手机APP,打开XDK,新建一个简单的APP工程
图22:XDK的APP模板选择
因为是基于HTML5代码,所以生成的工程项目里面最主要的内容就是一段HTML5源代码,作为APP程序的主要界面。如下图
图23:APP中的HTML5代码
另外在工程选项里可以指定各种输出选项及参数,可以分别对Android, iOS及Windows Phone设定相关的参数。
图24:APP配置
生成Android程序后可以下载到手机,下面是测试过程中生成的一个简单的APP[!--empirenews.page--]
图25:一个简单的Android APP
其它更多强大功能,请自行参考XDK官方文档。
在嵌入式Linux系统,怎能少了Python这个强大的工具呢?Galileo开发板上默认均安装并配置好了Python解释器,接下来再来体验Python编程。
用vi编辑器编写一段简单的Python代码
import mraa
import time
led = mraa.Gpio(13)
led.dir(mraa.DIR_OUT)
while True:
led.write(1)
time.sleep(.5)
led.write(0)
time.sleep(.5)
首先导入硬件底层的支持包mraa,接下来定义一个led变量,使用mraa的Gpio模块来初始化gpio引脚,指定gpio的方向。在接下来的循环中依次写入0和1,对应LED的两种状态,等待一段时间后再切换到另一种状态。
然后执行,发现LED灯以1HZ的频率闪烁。
其实,Intel还提供了一个C/C++集成开发环境iss-iot-win,这是一个基于Eclipse的集成开发环境。同XDK一样,除了能够管理工程代码,也提供了远程管理工具,直接连接到Galileo上进行管理操作,mraa及upm底层库则以C库的方式提供。
套用一句话:总有一款编程工具适合你,适合Galileo!
结论
简单体验,发现Galileo 2用来做IoT还是很不错的。硬件性能足够,虽然CPU主频只有400MHZ,但是对于一个Headless系统来说,已经够用。重点是Intel为Galileo提供了足够的软件及生态支持,Arduino IDE的支持,使得熟悉Arduino程序设计及开发者而言,可以实现无痛迁移,现有的方案及代码均能得到有效保护。XDK开发环境,集工程代码编辑及管理、SSH管理等于一体,功能非常强大,更重要的是XDK本身提供了非常丰富的代码模板,对于新手来说,可以迅速上手,对于老用户而言,则能节省大量的编码时间。XDK本身集成的移动端APP开发环境,则能快速开发适应包括Android, iOS及Windows Phone在内的各种应用,大大提升了产品的竞争力。
底层代码基于C/C++,更有mraa及upm库,可以在Node.js、Python及Java等环境中直接操纵硬件接口,在进行IoT开发时,更加灵活。
总体来说,Galileo 2开发板,在改进了一代Galileo的一些硬件缺陷后,结合强大的软件生态,对于IoT的学习及开发,确实是一块非常不错的开发板!
附录
本文系21ic原创,未经许可禁止转载