|
【ATMEL SAM R21 】LWMESH-WSNDEMO应用实验
[复制链接]
本帖最后由 ljj3166 于 2015-1-24 17:08 编辑
今后一个月只能够使用老掉牙的古董电脑,编译一次得5分钟
昨晚折腾好久,终于搞定一个LWMESH的简单应用
大概的结构是 LCD——SAMR21......SAMR21——串口助手
主要作用是采集LCD上的描点,并通过ZIGBEE传输到另一块R21,再通过串口转发给PC串口助手
---------------------------------------------------简单分析-----------------------------------------------
WSNDEMO的应用手册真是赞,虽然没有深入讲解
但是LWMESH的基本用法介绍得非常详细
这里简单小结一下:
0、基本代码结构
下面的代码,就是使用LWMESH的基本结构
- static void APP_TaskHandler(void)
- {
- // Put your application code here
- }
-
- int main(void)
- {
- SYS_Init();
-
- while (1)
- {
- SYS_TaskHandler();
- APP_TaskHandler();
- }
- }
复制代码 各种初始化,然后是系统任务和应用程序的循环调用
WSNDEMO中初始化和系统任务都已经搞定了,如果需要添加自己的代码
修改APP_TaskHandler就好了
1、网络的初始化
这里要配置一大堆的基础网络数据
瞧瞧
NWK_SetAddr(),配置network address
NWK_SetPanId(),配置PAN ID
PHY_SetChannel(),配置frequency channel
PHY_SetBand(),配置频率frequency band
PHY_SetModulation(),配置调制模式
PHY_SetTxPower(),配置发射能量(发射功率?)
PHY_SetRxState(),配置接收端的状态
NWK_SetSecurityKey(),配置密匙
如果需要接收数据的话,还需要制定一个回调函数并使用
- static bool appDataInd(NWK_DataInd_t *ind)
- {
- // process the frame
- return true;
- }
-
- NWK_OpenEndpoint(1, appDataInd);
复制代码 初始化就是这么一大堆参数
2、发送数据、接收数据
WSNDEMO定制了一些列发送和接收的结构体,成员变量类型各异
所以要发送数据的话,必须要格式相同
代码中自带的AVR2130_LWMesh_Developer_Guide_v1.2.1.pdf文件中有比较详细的描述
使用前建议看看
3、系统服务
主要是系统的计时器,其实是个软件定时器,
如果没有特殊要求的话,个人觉得完全可以不用改动了
其他的底层类型定义、宏定义、基础配置参数之类的,这里就不深究了
---------------------------------------------改造DEMO------------------------------------------------
添加各种驱动LCD和触摸屏的头文件和c文件
在APP_TaskHandler中撸上自己的代码
- static void APP_TaskHandler(void)
- {
- GetDisplayPoint(&display, Read_Ads7846(), &matrix );
- if((temp.x != display.x)||(temp.y != display.y)){
- printf("%d,%d\r\n",display.x,display.y);temp.x = display.x;temp.y = display.y;
- appMsg.SetX = display.x;
- appMsg.SetY = display.y;
- }
- else {temp.x = display.x;temp.y = display.y;}
- // Touch_Debug();
- if((display.y)>290)
- {
- for(is=0;is<10;is++)
- {
- if((21*is<display.x) && display.x<21*(is+1) )
- {
- touch_OpenColor = Table_Color[is];
- }
- }
- if((21*10<display.x) && (display.x)<240 )
- {
- Color_Box (0,16,239,274,Blue,Blue2);
- }
- }
- if(16<(display.y)&& (display.y)<290 ){
- TP_DrawPoint(display.x,display.y,touch_OpenColor);
- }
-
- switch (appState) {
- ……
复制代码
WSNDEMO中sio2host已经定义EDBG为串口,并重定向,可使用printf
不用白不用,哈哈
发送数据的结构体中加上X、Y坐标SetX和SetY
- typedef struct AppMessage_t {
- uint8_t commandId;
- uint8_t nodeType;
- uint64_t extAddr;
- uint16_t shortAddr;
- uint32_t softVersion;
- uint32_t channelMask;
- uint16_t panId;
- uint8_t workingChannel;
- uint16_t parentShortAddr;
- uint8_t lqi;
- int8_t rssi;
- uint8_t led_flag;
- uint16_t SetX;
- uint16_t SetY;
- struct {
- uint8_t type;
- uint8_t size;
- int32_t battery;
- int32_t temperature;
- int32_t light;
- } sensors;
- struct {
- uint8_t type;
- uint8_t size;
- char text[APP_CAPTION_SIZE];
- } caption;
- } AppMessage_t;
复制代码 发送端准备就绪
接收端按部就班修改即可,这里不多讨论了
编译,run
--------------------------------运行结果及残余问题-----------------------------------------
上个视频吧(审核中):
ZigBee目前还不能实时传输,看两块板的串口输出
左边是接收板,右边是采集板
看得出来,只有几个数据被发送到接收端了
估计要重新了解一下系统服务的相关参数
或者直接采集多个数据,一次性发送
后边再研究吧
先到这
|
赞赏
-
1
查看全部赞赏
-
|