查看: 4273|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    2023-12-3 18:51
  • 签到天数: 772 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2018-2-20 12:11:08 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 ddllxxrr 于 2018-2-20 15:25 编辑

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

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

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

           首先是建立自定义应用:

            定义两个开关:
           eeboard1.jpg

          然后下一步建立APP界面:
        eeboard2.jpg
        再下一步把SDK下来,
       eeboard3.jpg

      下面就是打开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。

    运行效果:
    Screenshot_2018-02-20-11-39-15.png

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


    IMG_0076.JPG


    IMG_0077.JPG



         
          
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-4-18 09:59 , Processed in 0.127136 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.