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