LED控制实验

(一)实验目的

             a)学习nesC编程语言

             b)学习如何使用TimerLED组件

             c)学习如何进行程序的编译和下载

()实验设备

             a)一个节点:标准的MICA2MICAzIRIS或者与之相兼容的版本。

             b)一台网关和一条串口线或者USB转串口设备。

             c)一台安装有MoteWorks开发环境的Windows PC

()实验介绍

在本实验中,需要创建一个应用程序,该程序使用节点上Atmega128L处理器中的计时器进行计时。该计时器以每秒一次的频率触发节点上红色LED灯的明暗变化。

()实验步骤

             a)启动MoteWorks开发环境中的PN2编辑软件。

启动PN2后,看到如下图的结构:

目录结构

其中:

apps是Moteworks自带的示例程序。

make是针对不同平台的编译规则文件。

tools是编译、下载等用到的一些工具。

tos是TinyOS1.x的源码,Crossbow在源码中加入了xmesh网络协议和支持Crossbow产品的一些组件。

  b) 在C:\Crossbow\cygwin\opt\MoteWorks\apps文件夹下(默认Moteworks安装在C盘),建立自己的文件夹,比如experiments,再在下面建立本次实验的文件夹,比如test1。在PN2的apps上可以看到新建的文件夹experiments/test1。看不到时,可以右击apps文件夹,选择刷新即可。

注:也可以把随设备一起实验程序文件夹experiments直接拷贝到C:\Crossbow\cygwin\opt\MoteWorks\apps下,省去下面建立文件的过程。

        c)创建Makefile文件。

创建一个应用程序首先需要为它建立一个Makefile文件,通常地Makefile文件按以下的规范建立:

include Makefile.component 
include $(TOSROOT)/apps/MakeXbowlocal 
include $(MAKERULES) 

点击File>Save进行保存。

d)创建Makefile.component文件

这个文件描述了应用程序的顶层组件:MyApp和实验中将使用的传感器板。指定传感器板的命令告诉编译器将要使用的预先编译好的nesC组件,该组件用于应用程序访问传感器设备。每一个传感器板都有自己的一套预编译的nesC组件。

Makefile.component文件通常以以下规范建立:

COMPONENT=MyApp  
SENSORBOARD=mts310 

点击File>Save进行保存。

e)创建配置文件

应用程序的配置文件命名为MyApp.nc。StdControl接口是应用程序中的最基本的接口,它为TinyOS应用程序的初始化、运行和终止提供了最基本的功能。

PN2中按照以下代码创建应用程序的配置文件:

/**  
* This configuration shows how to use the Timer and LED components  
**/  
configuration MyApp {  
}  
implementation {  
components Main, MyAppM, TimerC, LedsC;  
Main.StdControl -> TimerC.StdControl;  
Main.StdControl -> MyAppM.StdControl;  
MyAppM.Timer -> TimerC.Timer[unique("Timer")];  
MyAppM.Leds -> LedsC.Leds;  
} 

在配置文件的最后两行中,TimerCLedsC组件和应用程序的模块连接了起来,于是应用程序的模块可以控制TimerLED设备通过调用TimerCLedsC组件中的函数。

当完成程序编辑后,点击File>Save进行保存。

    f)创建模块文件

应用程序的模块文件命名为“MyAppM.nc”。模块文件通常包含了程序的实体代码。在这里用户需要编写代码启动Timer和触发红色LED灯的明暗。

PN2中键入以下参考代码:

/**  
* This module shows how to use the Timer and LED components  
**/  
module MyAppM {  
provides {  
interface StdControl;  
}  
uses {  
interface Timer;  
interface Leds;  
}  
} 
implementation {  
/**  
* Initialize the components.  
*  
* @return Always returns <code>SUCCESS</code>  
**/  
command result_t StdControl.init() {  
call Leds.init();  
return SUCCESS;  
}  
/**  
* Start things up. This just sets the rate for the clock  
* component.  
*  
* @return Always returns <code>SUCCESS</code>  
**/  
command result_t StdControl.start() {  
// Start a repeating timer that fires every 1000ms  
return call Timer.start(TIMER_REPEAT, 1000);  
}  
/**  
* Halt execution of the application.  
* This just disables the clock component.  
*  
* @return Always returns <code>SUCCESS</code>  
**/  
command result_t StdControl.stop() {  
return call Timer.stop();  
}  
/**  
* Toggle the red LED in response to the <code>Timer.fired</code>  
* event.  
*  
* @return Always returns <code>SUCCESS</code>  
**/  
event result_t Timer.fired()  
{  
call Leds.redToggle();  
return SUCCESS;  
}  
} 

当完成程序编辑后,点击File>Save进行保存。

         g)编辑完成后,进行程序的编译和部署。程序的编辑和部署通常在PN2中进行,首先选择Tools>make micaz(或者makemica2iris,依节点型号而定)进行编译。

注:选择编译时,如果当前打开的文件是本次的程序文件,则编译本程序,如果打开的是,比如说第二个实验的程序文件,则编译第二个实验的程序,下载程序时也是一样的道理。如果打开的不是程序文件,则不会出现编译选项。

然后在Output栏中可以看到编译的结果,正确编译后如下图所示:

编译结果

在编译完成后,若在Output栏中没有错误的信息,则可以进行程序的下载。

注:应用程序文件夹下的build文件夹是在执行编译命令后生成的,里面按平台建立子文件夹,存放编译过程中生成中间文件和可以下载到节点里的最终文件。

h) 连接好网关的电源,串口线一端连接PC机的串口,一端连接网关的串口0(靠近以太网口的那个)。如果PC机不带串口,则可以使用USB转串口的设备。连接如下图:

鼠标键盘通过USBhub连接到网关。串口连接在以太网口附件的串口接口。

安装USB转串口的设备驱动后(驱动由硬件设备提供者提供),它会虚拟出一个串口,右键“我的电脑”->“管理”->“设备管理器”->端口(COM&LPT),可以查看串口号。如下图:

记住这个串口号。

k) 将网关stargate2的51Pin附近的拨键开关中的7,8按下,需要下载程序的节点连接到stargate2的51pin接口上,如果节点带电池,要先把电源开关关掉,再连接网关51Pin,因为网关51Pin也会给节点供电,同时供电会造成短路,损害设备。网关连线可以参考下图(使用USB转串口设备时):

l)  打开网关的电源,在网关stargate2的液晶屏幕上,会显示linux操作系统的界面,点击桌面上的“Terminal”图标。弹出控制台窗口,输入命令“cd /usr/xbow/mote”,接着执行“./mib520”,当出现“Device /dev/ttySAC0 has beenopened.”时,表示stargate2上的程序可以开始接收程序数据了。

m)回到PC机上的PN2软件,选择Tools>shell,当对话框出现后,在框中输入”make micaz reinstall,<m> mib520,com<n>”

micaz为节点类型,其他的如iris,mica2等。

m为用户指定给节点的id,是个2字节的数,0到65535。但是0是保留给基站节点用的,即下载Base程序、连接在网关上的节点。不同的节点要使用不同的id,像IP地址一样,相同了会冲突。记住自己分配给不同节点的不同id,接收数据时用来区分是哪个节点发过来的数据。

n为串口号,使用串口线时(非USB转串口设备),COM口设置为COM1;当使用USB转串口设备时,USB转串口的设备会虚拟出COM口,比如COM口号为3,则使用com3,在框中输入”makemicaz reinstall,1 mib520,com3”。点击确定。

 

注:如果PN2的控制台提示“Can not connect  to Mote correctly. Please check your Mote.”

一要检查节点和网关的连接,节点是否插紧,51Pin附近的拨键开关中的7,8是否按下,串口号设置是否正确,即”make micaz reinstall,<m>mib520,com<n>”中的n是否为连接网关和PC机的串口号。

注意命令中的空格和逗号的使用,不要增减,不要替换。按照命令去输入。下面是初学者遇见的错误输入:

make iris 12,reinstall mib520,com3

顺序不对

make iris reinstall ,12 mib520,com3

“,12”前多个空格

make reinstall,12 mib520,com2

忘记指定平台,端口指定错误

make iris reinstal,12 mib520,com3

单词拼写错误

如果上面的命令执行错误,想中断执行时,可以使用PN2中Tools->stop Tools。如果还下不进去,查看PC机上任务管理器中进程项中有没有uisp.exe这个进程,有的话,把它结束掉。

二是要检查网关上运行的mib520程序是否已经结束,已经结束则重新打开。(30秒内没有通讯,mib20程序会自动退出,打印”Device /dev/ttySAC0 hasbeen closed.”,如果有通讯就重新计时),所以在打开mib520软件之前,最好把该做的都做好,比如在PN2里写好下载程序的命令,当mib520程序启动后,点下“确定”即可。

三是要需要检查串口设置,这个一般出厂时配好,如果上面的解决方法没有生效在试试这个方法。stargate2启动时,通过串口输出一些信息,可以通过超级终端等串口数据接收工具接收,在网关启动的3秒中内,快速按下任意键进入uboot,选择3(7.0寸屏幕)。接着按下e(退出),输入printenv,回车,打印环境信息。

如果看到有这个设置“bootargs=noinitrd console=ttySAC0ubi.mtd=1 root=ubi0:rootfs rootfstype=ubifs init=/linuxrc video=fb:AT070TN83ppp=none”修改一下,使用命令“setenvbootargs noinitrdconsole=null ubi.mtd=1 root=ubi0:rootfsrootfstype=ubifs init=/linuxrc video=fb:AT070TN83 ppp=none”, 回车之后,使用命令“saveenv”,保存参数,接着输入“reboot”重新启动。重新下载程序。

部署的结果在“Output”栏中同样可见,如下图所示:  


当在Output栏中显示Uploadingflash字样,并且没有任何错误提示时,则表示部署完成。可以看到节点上的红色LED灯每秒进行明暗的变化。



评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值