回答

收藏

[原创] 【TYDE3.0 涂鸦智能 IoT开发板】3 快速添加两个开关

物联网 物联网 5197 人阅读 | 0 人回复 | 2018-02-20

本帖最后由 ddllxxrr 于 2018-2-20 15:25 编辑

年假快过去了,今天有时间了,又开始涂鸦点啥。

       我想先从简单开始,上来就高难不太现实。

       上一贴我用DEMO程序加了个点POARTA.1的程序。这次我还想利用这个来自己做个界面点一下灯。

       首先是建立自定义应用:

        定义两个开关:
      


      然后下一步建立APP界面:
   

    再下一步把SDK下来,
  


  下面就是打开SDK,我在这里想了半天,如果用新的SDK代替DEMO的SDK,那么我得改老了东东了,比如串口那块。
那不如这样用现在的DEMO彩灯的SDK,照自己定义的SDK改。彩灯的一律不要。我用NOTEAPP++打开了新SDK,用IAR打开了
DEMO彩灯那个工程。

   当然网上有详细的步骤,我是说我的步骤:下边是我的产品请不要考贝哈!!!!这个在protocol.h中
  1.                             1:修改产品信息               
  2. ******************************************************************************/
  3. #define PRODUCT_KEY "5qbkap3c2azdkFT7"    //开发平台创建产品后生成的16位字符产品唯一标识
复制代码
第二步:定义点,以前彩灯的当然屏蔽掉:
  1. /******************************************************************************
  2.                         1:dp数据点序列号重新定义
  3.           **此为自动生成代码,如在开发平台有相关修改请重新下载MCU_SDK**         
  4. ******************************************************************************/
  5. //开关(可下发可上报)
  6. //备注:
  7. //#define DPID_LED_SWITCH 1
  8. //工作模式(可下发可上报)
  9. //备注:
  10. //#define DPID_WORK_MODE 2
  11. //亮度值(可下发可上报)
  12. //备注:
  13. //#define DPID_BRIGHT_VALUE 3
  14. //彩光模式数(可下发可上报)
  15. //备注:rgbhsv
  16. //#define DPID_COLOUR_DATA 5
  17. //情景模式数(可下发可上报)
  18. //备注:rgbhsv
  19. //#define DPID_SCENE_DATA 6

  20. //开关(可下发可上报)
  21. //备注:
  22. #define DPID_SWITCH_1 1
  23. //开关 2(可下发可上报)
  24. //备注:
  25. #define DPID_SWITCH_2 2
复制代码
下面改protocol.C中的文件 :

第一步:
  1. /******************************************************************************
  2.                         1:dp数据点序列类型对照表
  3.           **此为自动生成代码,如在开发平台有相关修改请重新下载MCU_SDK**         
  4. ******************************************************************************/
  5. const DOWNLOAD_CMD_S download_cmd[] =
  6. {
  7.   {DPID_SWITCH_1, DP_TYPE_BOOL},
  8.   {DPID_SWITCH_2, DP_TYPE_BOOL},
  9. };
复制代码
第二步:定义全传函数,彩灯不要
  1. /*****************************************************************************
  2. 函数名称 : all_data_update
  3. 功能描述 : 系统所有dp点信息上传,实现APP和muc数据同步
  4. 输入参数 : 无
  5. 返回参数 : 无
  6. 使用说明 : 此函数SDK内部需调用;
  7.            MCU必须实现该函数内数据上报功能;包括只上报和可上报可下发型数据
  8. *****************************************************************************/
  9. void all_data_update(void)
  10. {
  11. //  #error "请在此处理可下发可上报数据及只上报数据示例,处理完成后删除该行"
  12.   //此代码为平台自动生成,请按照实际数据修改每个可下发可上报函数和只上报函数
  13.   //mcu_dp_bool_update(DPID_LED_SWITCH,FlashBuffer.led_switch); //BOOL型数据上报;
  14.   //mcu_dp_enum_update(DPID_WORK_MODE,FlashBuffer.work_mode); //枚举型数据上报;
  15. // mcu_dp_value_update(DPID_BRIGHT_VALUE,FlashBuffer.bright_value); //VALUE型数据上报;
  16. // mcu_dp_string_update(DPID_COLOUR_DATA,FlashBuffer.colour,14); //STRING型数据上报;
  17. // mcu_dp_string_update(DPID_SCENE_DATA,FlashBuffer.scene,14); //STRING型数据上报;
  18.   mcu_dp_bool_update(DPID_SWITCH_1,FlashBuffer.led_switch); //BOOL型数据上报;
  19.   mcu_dp_bool_update(DPID_SWITCH_2,FlashBuffer.led_switch2); //BOOL型数据上报;
  20. }
复制代码
第三步:从新SDK考贝过来的函数,自己添加点灯函数LED666

  1. /*****************************************************************************
  2. 函数名称 : dp_download_switch_1_handle
  3. 功能描述 : 针对DPID_SWITCH_1的处理函数
  4. 输入参数 : value:数据源数据
  5.         : length:数据长度
  6. 返回参数 : 成功返回:SUCCESS/失败返回:ERROR
  7. 使用说明 : 可下发可上报类型,需要在处理完数据后上报处理结果至app
  8. *****************************************************************************/
  9. static unsigned char dp_download_switch_1_handle(const unsigned char value[], unsigned short length)
  10. {
  11.   //示例:当前DP类型为BOOL
  12.   unsigned char ret;
  13.   //0:关/1:开
  14.   unsigned char switch_1;
  15.   
  16.   switch_1 = mcu_get_dp_download_bool(value,length);
  17.   if(switch_1 == 0)
  18.   {
  19.     //开关关
  20.     LED666_OFF();
  21.   }
  22.   else
  23.   {
  24.     //开关开
  25.     LED666_ON();
  26.   }
  27.   
  28.   //处理完DP数据后应有反馈
  29.   ret = mcu_dp_bool_update(DPID_SWITCH_1,switch_1);
  30.   if(ret == SUCCESS)
  31.     return SUCCESS;
  32.   else
  33.     return ERROR;
  34. }
  35. /*****************************************************************************
  36. 函数名称 : dp_download_switch_2_handle
  37. 功能描述 : 针对DPID_SWITCH_2的处理函数
  38. 输入参数 : value:数据源数据
  39.         : length:数据长度
  40. 返回参数 : 成功返回:SUCCESS/失败返回:ERROR
  41. 使用说明 : 可下发可上报类型,需要在处理完数据后上报处理结果至app
  42. *****************************************************************************/
  43. static unsigned char dp_download_switch_2_handle(const unsigned char value[], unsigned short length)
  44. {
  45.   //示例:当前DP类型为BOOL
  46.   unsigned char ret;
  47.   //0:关/1:开
  48.   unsigned char switch_2;
  49.   
  50.   switch_2 = mcu_get_dp_download_bool(value,length);
  51.   if(switch_2 == 0)
  52.   {
  53.     //开关关
  54.   }
  55.   else
  56.   {
  57.     //开关开
  58.   }
  59.   
  60.   //处理完DP数据后应有反馈
  61.   ret = mcu_dp_bool_update(DPID_SWITCH_2,switch_2);
  62.   if(ret == SUCCESS)
  63.     return SUCCESS;
  64.   else
  65.     return ERROR;
  66. }
复制代码
第四步:这个是关键:把下发函数同我上边处理函数对应上:

  1. /*****************************************************************************
  2. 函数名称 : dp_download_handle
  3. 功能描述 : dp下发处理函数
  4. 输入参数 : dpid:DP序号
  5.            value:dp数据缓冲区地址
  6.            length:dp数据长度
  7. 返回参数 : 成功返回:SUCCESS/失败返回:ERRO
  8. 使用说明 : 该函数用户不能修改
  9. *****************************************************************************/
  10. unsigned char dp_download_handle(unsigned char dpid,const unsigned char value[], unsigned short length)
  11. {
  12.   /*********************************
  13.   当前函数处理可下发/可上报数据调用                    
  14.   具体函数内需要实现下发数据处理
  15.   完成用需要将处理结果反馈至APP端,否则APP会认为下发失败
  16.   ***********************************/
  17.   unsigned char ret;
  18.   switch(dpid)
  19.   {
  20.     case DPID_SWITCH_1:
  21.       //开关处理函数
  22.       ret = dp_download_switch_1_handle(value,length);
  23.       break;
  24.     case DPID_SWITCH_2:
  25.       //工作模式处理函数
  26.       ret = dp_download_switch_2_handle(value,length);
  27.       break;
  28.   
  29.   default:
  30.     break;
  31.   }
  32.   return ret;
  33. }
复制代码
以下修改include.h我就添了两个变量:
  1. #ifndef _INCLUDE_H_
  2. #define _INCLUDE_H_

  3. #include        <stdio.h>
  4. #include        <math.h>
  5. #include        <stdlib.h>
  6. #include        <string.h>
  7. //#include         <intrins.h>
  8. #include        <ctype.h>
  9. #include        "stm32f10x.h"

  10. #define         ENABLE_BOOT                             //使能BOOT(固件升级功能)
  11. //(7+1K)+28K+28K
  12. #define         BASIC_FLASH_ADDR                        0x08000000

  13. #ifdef ENABLE_BOOT
  14.   #define         OFFSET_PARA                             0x1c00        
  15. #else
  16.   #define         OFFSET_PARA                             0xfc00         
  17. #endif

  18. #define         OFFSET_FIRMWARE_L                       0x2000                  //固件正常运行地址
  19. #define         OFFSET_FIRMWARE_H                       0x9000                  //升级固件存储地址

  20. #define         PARA_ADDR                               (BASIC_FLASH_ADDR + OFFSET_PARA)
  21. #define         FIREWARE_ADDR_L                         (BASIC_FLASH_ADDR + OFFSET_FIRMWARE_L)   //
  22. #define         FIREWARE_ADDR_H                         (BASIC_FLASH_ADDR + OFFSET_FIRMWARE_H)   //

  23. #define         FIREWARE_UPDATE_FLAG                           0x55555555

  24. #include "hal_key.h"
  25. #include "hal_rgb.h"

  26. //
  27. #include "user_uart.h"
  28. #include "user_timer.h"
  29. #include "user_flash.h"

  30. typedef struct {
  31.   uint32_t magic_code;
  32.   uint8_t led_switch;
  33.   uint8_t work_mode;
  34.   uint8_t led_switch2;
  35.   uint8_t bright_value;
  36.   uint8_t colour[14];
  37.   uint8_t scene[14];
  38. } TYPE_BUFFER_S;

  39. #endif
复制代码
其实我觉得这块不改也行,因为下来的函数已经同处理函数挂上了。

最后编译,错误多多,警告也多多,不要紧,凡是同彩灯有关的错误,一律用//斩杀。

再编译,有警告不管。

然后用FLASH LOADER那个软件,按MCU BOOT,下到0x08002000那个地方就行了。根本不用再下BOOT那个BIN。

运行效果:


当我点开关1时,PORTA的第一脚有高低电平变化,说明成功:









     
      
http://shop34182318.taobao.com/
https://shop436095304.taobao.com
分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条