其他分享
首页 > 其他分享> > wsn实验

wsn实验

作者:互联网

  【记录一下关键步骤】


  【实验一LED】

下面两个.nc文件在分别Notepad++中新建,并保存到同一个文件夹中

------------------------------------------------------------------

  【LED_C.nc】

configuration LED_C
{ }
implementation
{
components MainC;
components LED_M as App;
App.Boot->MainC.Boot;
components LedsC;
App.Leds -> LedsC.Leds;

//CC2530 GPIO组件
components HplCC2530GeneralIOC as GPIO;
App.Key->GPIO.P2_Port[0];

//定时器组件
components new TimerMilliC() as Timer1;
App.Timer1->Timer1;

//ADC 组件
components new AdcC() as Ad;
App.AdControl->Ad;
App.AdRead->Ad;
}

---------------------------------------------------------------------

  【LED_M.nc】
/***********************************************
* 文 件 名 : LED_M.nc
* 功能描述 : 当按下上、下、左键中一个按键时
* 分别反转红、黄、绿颜色的LED状态。
* 日 期 : 2019/12/4
***********************************************/
#include "ADC.H"
module LED_M
{
uses interface Boot;
uses interface Leds;
uses interface AdcControl as AdControl;
uses interface Read<int16_t> as AdRead;
uses interface Timer<TMilli> as Timer1;
uses interface GeneralIO as Key;
}
implementation
{

uint8_t keyValue;
enum {NoKey,KeyDown,KeyHold}; //按键状态
uint8_t keyState;

task void NopTask() //空任务
{
}
event void Boot.booted()
{
// 使能ADC采样,采样端口 P0.6
call AdControl.enable(ADC_REF_AVDD,ADC_12_BIT,ADC_AIN6);
//设置ADC采样时间 1s钟采样一次
call Timer1.startPeriodic(100);
}
event void AdRead.readDone(error_t result, int16_t val)
{
unsigned char s[16];
//读取高8位的ADC采样寄存器的值
uint8_t adc_value=val>>5;
if((adc_value>20) && (adc_value<40))
call Leds.led1Toggle();//shangjian
else if((adc_value>110) && (adc_value<140))
call Leds.led0Toggle();//zuojian
else if((adc_value>80) && (adc_value<100))
call Leds.led2Toggle();//xiajian
DbgOut(9,"adc_value is:%d\n",adc_value);
}
event void Timer1.fired()
{
keyValue=call Key.get();
switch(keyState)
{
//没有键按下的状态
case NoKey:
if(keyValue==0)
//无键按下
keyState=NoKey;
else
//有键按下
keyState=KeyDown;
break;
//有键按下的状态
case KeyDown:
if(keyValue==1)
{
//转按下键保持状态
keyState=KeyHold;
}
//调用ADC采样读取命令
call AdRead.read();
break;
case KeyHold:
if(keyValue==1)
{
//按键保持
keyState=KeyHold;
}
else
{
//按键松开
keyState=NoKey;
}
break;
}
}
}

------------------------------------------------------------------

  【新建makefile文件(要求无后缀名!)】

新建一个txt文件,文件内容如下,保存后关闭,再重命名去掉后缀,把文件放到之前的同一个文件夹中

COMPONENT=LED_M
include $(MAKERULES)

-------------------------------------------------------------------

  【编译】

打开cygwin

使用目录切换命令:cd

切换至刚才文件夹下

然后输入命令:make enmote

回车进行编译

此处可能会出现以下错误:

问题原因:makefile文件按下图修改


  【编译成功后如下界面】


   【烧录】

除了下面的方法也可以在cygwin中使用 make enmote install 命令进行快速的编译下载

打开桌面的SmartRF Flash Program and verify 软件,按下图操作

烧录成功,观察现象是否符合预期


  【二次多次烧录时无法烧录的解决办法】

问题:Chip is locked! Not able to read IEEE address. (Uncheck the "Retain IEEE address" option.)

 

 解决办法:

    然后选择第三个 Erase,program and verify,再次单击 Perform actions 可下载成功


  【实验二】

  代码文件中需要做更改

文件目录C:\emotenet\cygwin\opt\tinyos-2.x\apps\CC2530\TestP2M...

  按下图更改

    先编译烧录node

  按下图更改

   换板子

   再编译烧录sink节点

  打开串口助手,观察数据接收情况

   使用sniffer

  操作步骤,双击桌面上的sniffer

 

 

 

 

   下图是点对点的情况

    使用sniffer,下图是广播的情况


  【实验三】

  实验目的

熟悉 A/D 转换、串行通信和点对点通信相关的组件和接口,掌握 WSN 应用 系统软件的基本设计方法。

  要求

系统由传感器节点和汇聚节点组成,传感器节点周期地采集光度数据,并将 数据发送给汇聚节点,采集周期为 5s. 汇聚节点接收到数据后,向传感器节点发 送应答消息,并将数据通过串口发送到 PC。如果传感器节点发送数据后,未接 收到应答,则重新发送数据,如果重发 3 次仍未成功,则丢弃当前数据。


   先下载node,由于node代码中的目标地址是01所以这里node节点的ID设为02(区别于01)

    设node节点id为02,编译下载

    切换目录至sink

   更换板子作为sink节点,

   执行,id设为01

   下载成功后打开sniffer

   串口助手显示3号数据丢失,实验成功   

  


 

标签:LED,App,value,wsn,实验,adc,节点,ADC
来源: https://www.cnblogs.com/wanghuaizhi/p/14183823.html