[求助] 【ATMEL SAM R21 】LWMESH-WSNDEMO应用实验

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

回复评论 (2)

你们好给力 我已经有段时间没弄了
生活就是油盐酱醋再加一点糖,快活就是一天到晚乐呵呵的忙 =================================== 做一个简单的人,踏实而务实,不沉溺幻想,不庸人自扰
点赞  2015-1-24 16:44
引用: chenzhufly 发表于 2015-1-24 16:44
你们好给力 我已经有段时间没弄了



大神出马,那不就是几天搞定
So TM what......?
点赞  2015-1-24 16:55
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复