Contiki入门

原文传送:Get Started with Contiki

关于 Instant Contiki:
Instant Contiki是Contiki的一整套开发环境。它是一个运行在VMWare player中的Ubuntu Linux虚拟机,此外还有Contiki与其所有的开发工具,编译器,仿真器等等。简而言之,有了它,就可以开发Cintiki了。

步骤1:获取Instant Contiki

Contiki是一个复杂的软件没错,但是请勿颤抖!因为我们为你提供Instant Contiki和Cooja,这两个家伙可以带你进去Contiki的世界。

让我们以下载Instant Contiki和安装VMWare Player开始吧,接着就可以启动Instant Contiki了。

下载Instant Contiki

在下载Instant Contiki之前请自行准备好一杯或者两杯咖啡(这取决于你在天朝的网速),只有2个G多点。当下载完成之后,解压文件到你指定的文件夹,其实Instant Contiki就是在Ubuntu中装上Cooja的虚拟机。

Download Instant Contiki »

安装VMWare Player

下载并安装VMWare。请自行搜索并下载,下面的链接仅供参考。

Download VMWare Player »

开始Instant Contiki之旅

启动Ubuntu

用虚拟机打开以vmx结尾的文件即可。

登陆

登陆Instant Contiki。密码是user

恭喜恭喜!现在我们已经启动Instant Contiki了,接着我们来开始Cooja。

步骤2:开始Cooja

关于 Cooja
Cooja 是Cintiki网络仿真器。Cooja用来模拟Contiki程序在其中部署或大或小的传感器网络和节点。仿真可以作为实际使用之前的一个参考,因为仿真是在硬件级别的,就是你在仿真环境咋样,在实际中也是如此。

下面我们会来编译和运行Cooja——Contiki网络模拟器。

打开一个终端窗口

为了运行Cooja,首先需要打开一个终端窗口

运行Cooja

在终端窗口中输入以下命令,进入到Cooja目录:

cd contiki/tools/cooja

输入启动Cooja的命令:

ant run

等待Cooja的启动

当Cooja首次启动的时候,它会花一些时间来编译自己。

当Cooja编译完成,会显示一个蓝色的空白窗口。

现在Cooja就已经完成启动了,我们可以试着搞一个例子来跑跑仿真了。

步骤3:让Contiki在Cooja仿真环境中跑一会

关于 Cooja 仿真器
开发者们可以在Cooja上调试和模拟运行程序。就是酱紫。

创建一个新的仿真环境

创建一个新的仿真

依次点击菜单File->New simulation...

设置仿真参数

不出意外,此时Cooja应该打开了Create new simulation对话框,在这个对话框里,我们可以给我们的仿真设置一个新的名字,这里我们不做任何改变。并点击Create按钮。

仿真界面中的窗口们

Cooja 的仿真界面由以下窗口组成。

关于什么是传感器节点(motes)?
A sensor node, also known as a mote (chiefly in North America), is a node in a wireless sensor network that is capable of performing some processing, gathering sensory information and communicating with other connected nodes in the network. A mote is a node but a node is not always a mote.

添加节点到仿真环境

添加节点

在我们开始仿真之前,必须要添加一个或者多个的节点。这个过程可以通过在Motes菜单->Add motes来实现…由于这是首次在仿真环境中添加节点,我们必须指定节点的类型。点击Create new note type->Sky mote...来创建Tmote Sky类型的节点。

Tmote Sky is a mote platform for extremely low power,
high data-rate sensor network applications. It has integrated sensors, radio, antenna, microcontroller and programming capabilities.
http://faculty.uml.edu/yluo/Teaching/AdvCompArch/reports/WeinbergZhangFinalReport.pdf

设置节点类型

Cooja 将会自动打开Create Mote Type对话框,在这里我们可以为我们的类型重新设置一个自己喜欢的名字。这里我们选择默认的名字,并且点击Browse...来选择节点将运行的Contiki应用环境。

选择一个Contiki应用环境

进入/home/user/contiki/examples/ipv6/simple-udp-rpl文件夹。里面很多的应用环境,我们选择一个通过IPv6来进行UDP通信的简单例子。

指定特定应用的C源文件

选择broadcast-example.c文件。此文件包含如下简单的动作:每个节点会随机像自己的邻居发送一个UDP包。单击Open按钮来选定文件。

编译Contiki和应用

现在Cooja需要对我们选择的文件进行验证,也就是需要编译来进行这个过程。点击Compile按钮。此编译过程大约持续1分钟以上,并且在编译完成之后将编译信息传输出到地步的窗口。

创建节点

单击Create 按钮来进行下一步。程序会自动关闭当前窗口,打开下一步所需要的窗口。

添加节点到仿真环境

Cooja 将会询问是否将我们之前设定的心类型节点添加到仿真环境。如果是,在这里同样需要设定所需要添加节点的个数,本例我们设定为8个。

真的添加进去

我们点击Add motes按钮来把8个节点添加到仿真环境中。

开发仿真

现在我们就可以看到8个节点出现在Network窗口中了。单击Start按钮来启动整个仿真过程。

暂停仿真

我们可以在Mote output窗口看到节点的信息不断输出。Network窗口中的节点不断的移动,表明我们的仿真过程正在欢快的进行中。Timeline窗口会在节点向外发出无线电波时进行移动。此时,如果看腻了,我们就可以让它暂停下来休息下。

完成!

好样的,少年!我们已经完成了第一个属于我们自己的Cooja仿真试验,通过它,我们让Contiki节点随机的向邻居发送IPv6/UDP数据包。

步骤 4:让 Contiki 在硬件上跑起来

关于 Contiki 的硬件系统
Contiki has a build system that is intended to make it easy to run Contiki directly on hardware. The build system is designed to be the same across different hardware platforms, so that the build commands are familiar when switching hardware. The build system consists of a set of makefiles. The base makefile is contiki/Makefile.include, platform makefiles in contiki/platform/*/Makefile.platform and contiki/cpu/*/Makefile.cpu.

与硬件相连

在开始下面的实验之前,我们假设你已经拥有Zolertia Z1,并且用USB将其与PC相连接。我们必须保证Z1与Contiki是可以通信的。这个可以在VMWare Player的可删除设备列表中找到。

打开终端,进入代码目录

生成Contiki需要我们在终端窗口中进行。打开一个终端窗口,进入Hello World例程目录:

cd contiki/examples/hello-world

将Contiki和应用打包编译

现在我们可以为我们的硬件平台编译 Hello World应用程序了。编译应用程序的同时还将编译整个Contiki系统,所以可能需要一些时间。

make TARGET=z1 hello-world

如果你觉得你待会将不只一次的编译,那么你可以通过下面这条命令来让Contiki来记住你的硬件平台选择。

make TARGET=z1 savetarget

上传Contiki到硬件

现在我们准备将编译好的可执行文件上传到硬件上。我们用下面的特定的带.upload后缀的文件来运行:

make hello-world.upload

注意:如果你看到如下的输出,可能意味着你的Z1硬件没有和Instant Contiki连接上,你需要看看你的连接线是不是松了或者咋了:

          make z1-reset z1-upload
          make[1]: Entering directory `/home/user/contiki/examples/hello-world'
          make -k -j 20 z1-reset-sequence
          make[2]: Entering directory `/home/user/contiki/examples/hello-world'
          Done
          make[2]: Leaving directory `/home/user/contiki/examples/hello-world'
          make -j 20 z1-upload-sequence
          make[2]: Entering directory `/home/user/contiki/examples/hello-world'
          Done
          make[2]: Leaving directory `/home/user/contiki/examples/hello-world'
          make[1]: Leaving directory `/home/user/contiki/examples/hello-world'
          rm hello-world.ihex

检查Z1与PC的连接,查看VMVare Player确认连接,然后再重试。

注意我们其实是可以一步完成编译上传功能的:只要执行make hello-world.upload就会自动完成上面的两个步骤。这不是为了让大家伙多敲命名熟悉熟悉么。

观察输出

现在我们已经将代码烧录到硬件平台上了,就可以通过串口来观察程序的输出。为了观察串口的输出,我们往终端里敲入下面的命令:

make login

此时不会显示任何的输出(除了一些VMWare自带的一些垃圾信息),因为Hello World程序已经停止运行。为了查看输出,我们可以按下复位按钮。此时,如下的信息将会在终端上显示出来:

          Rime started with address 1.1
          MAC 01:01:00:00:00:00:00:00 Contiki-2.6 started. Node id is set to 257.
          CSMA ContikiMAC, channel check rate 8 Hz, radio channel 26
          Starting 'Hello world process'
          Hello, world

完成!

更好样的!如果你走到这里,那么意味着你已经能够在仿真环境和硬件平台上把Contiki给跑起来了。如果一切正常,你可以尝试着将其它的例程上传到硬件中:比如位于contiki/examples/ipv6/simple-upd-rpl/目录下的broadcast-example例程,不过跑这个例程需要两台硬件,因为此例程就是让两台硬件通过IPv6/UDP来相互通信的。

步骤 5: 然后呢?