智能彩灯五路产品原型的代码实现(三明治开发板+Arduino,Wi-Fi)

更新时间Invalid date

概况

本文档主要介绍智能彩灯五路产品原型的应用代码部分,关于环境搭建、SDK移植、下载调试。请参考以下文章。

涂鸦三明治开发板开发环境搭建

涂鸦三明治开发板快速上手

名词解释

步骤

  • 第 1 步:下载验证

    1. ST Nucleo,按键1长按为配网,指示灯旁黑色按键为开发板复位口,USB为程序下载口。
    1. 涂鸦三明治(PWM)照明功能板
    1. 涂鸦三明治 Wi-Fi MCU 通信板(E3S)
    1. 连接方式如下:(从上到下依次为:涂鸦三明治(PWM)照明功能板,ST Nucleo,涂鸦三明治 Wi-Fi MCU 通信板(E3S))

    注意:为防止电脑 USB 供电不足导致下载完成后,开发板不断重启,推荐使用独立电源板供电,或者,下载时将 RGB 板取下,下载完成后再接上。

  • 第 2 步:程序实现

    开发者需要重点关注三个函数setup(),loop()与 dp_download_handle()

    1. setup()函数用于执行一些初始化内容,只执行一次
    void setup() {
      pinMode(PC13, INPUT);     //配网初始化
      mySerial.begin(9600);     //软件串口初始化
      mySerial.println("myserial init successful!");
      Serial.begin(115200);     //PA3 RX   PA2 TX
      Serial.println("serial init successful!\r\n");
      light_data_int();			//RGB冷暖灯初始化
      IIC_Init();				//IIC初始化用于驱动RGB灯
      delay(10);
      rgb_init(0, 0, 0);		
      wifi_protocol_init();		//协议串口初始化函数
      timer_init();				//定时器初始化
      Hue_shade_start(&a);
    }
    
    1. loop()函数将会循环执行函数体中的内容
    void loop() {
      if (init_flag == 0) {
        time_cnt++;
        if (time_cnt % 6000 == 0) {
          time_cnt = 0;
          cnt ++;
        }
        wifi_stat_led(&cnt);   	//WI-FI状态处理
      }
      wifi_uart_service();		//WI-FI串口处理服务
      myserialEvent();         	//串口接收处理
      key_scan();               //重置配网按键检测
    }
    
    
    /*****************************************************************************
      函数名称 : dp_download_handle
      功能描述 : dp下发处理函数
      输入参数 : dpid:DP序号
               value:dp数据缓冲区地址
               length:dp数据长度
      返回参数 : 成功返回:SUCCESS/失败返回:ERRO
      使用说明 : 该函数用户不能修改
    *****************************************************************************/
    unsigned char dp_download_handle(unsigned char dpid, const unsigned char value[], unsigned short length)
    {
      /*********************************
        当前函数处理可下发/可上报数据调用
        具体函数内需要实现下发数据处理
        完成用需要将处理结果反馈至APP端,否则APP会认为下发失败
      ***********************************/
      unsigned char ret;
      printf("dpid = %d\r\n", dpid);
      switch (dpid)
      {
        case DPID_SWITCH_LED:
          //开关处理函数
          ret = dp_download_switch_led_handle(value, length);
          break;
        case DPID_WORK_MODE:
          //模式处理函数
          ret = dp_download_work_mode_handle(value, length);
          break;
        case DPID_BRIGHT_VALUE:
          //白光亮度处理函数
          ret = dp_download_bright_value_handle(value, length);
          break;
        case DPID_TEMP_VALUE:
          //白光色温处理函数
          ret = dp_download_temp_value_handle(value, length);
          break;
        case DPID_COLOUR_DATA:
          //彩光颜色处理函数
          ret = dp_download_colour_data_handle(value, length);
          break;
        case DPID_CONTROL_DATA:
          //调节处理函数
          ret = dp_download_control_data_handle(value, length);
          break;
    
        default:
          break;
      }
      return ret;
    }
    
    1. dp_download_handle()主要用于处理由云端下发的DP数据,开发者需要根据相应的DP下发实现相应的功能
    /*****************************************************************************
      函数名称 : dp_download_handle
      功能描述 : dp下发处理函数
      输入参数 : dpid:DP序号
               value:dp数据缓冲区地址
               length:dp数据长度
      返回参数 : 成功返回:SUCCESS/失败返回:ERRO
      使用说明 : 该函数用户不能修改
    *****************************************************************************/
    unsigned char dp_download_handle(unsigned char dpid, const unsigned char value[], unsigned short length)
    {
      /*********************************
        当前函数处理可下发/可上报数据调用
        具体函数内需要实现下发数据处理
        完成用需要将处理结果反馈至APP端,否则APP会认为下发失败
      ***********************************/
      unsigned char ret;
      printf("dpid = %d\r\n", dpid);
      switch (dpid)
      {
        case DPID_SWITCH_LED:
          //开关处理函数
          ret = dp_download_switch_led_handle(value, length);
          break;
        case DPID_WORK_MODE:
          //模式处理函数
          ret = dp_download_work_mode_handle(value, length);
          break;
        case DPID_BRIGHT_VALUE:
          //白光亮度处理函数
          ret = dp_download_bright_value_handle(value, length);
          break;
        case DPID_TEMP_VALUE:
          //白光色温处理函数
          ret = dp_download_temp_value_handle(value, length);
          break;
        case DPID_COLOUR_DATA:
          //彩光颜色处理函数
          ret = dp_download_colour_data_handle(value, length);
          break;
        case DPID_CONTROL_DATA:
          //调节处理函数
          ret = dp_download_control_data_handle(value, length);
          break;
    
        default:
          break;
      }
      return ret;
    }
    
    面板RGB数据处理函数 dp_download_colour_data_handle()
    面板冷光数据处理函数 dp_download_bright_value_handle()
    面板暖光数据处理函数 dp_download_temp_value_handle()

    云端下发的颜色数据为 HSV 格式我们需要将其转化为 RGB 格式,并对 RGB 数据修正,即得到正确的 RGB 值供显示

    RGB 调光部分几个重要API:

    HSV转RGB接口 hsv2rgb();
    RGB数据修正接口 tuya_light_gamma_adjust();
    RGB颜色设置接口 rgb_init();

    具体实现细节可查看 Demo

  • 第 3 步:Arduino-API使用说明

    由于涂鸦三明治开发板编程采用 Arduino 标准API,Arduino-API 使用方法开发者可参考以下网址:

    《Arduino-API说明》

    ArduinoIDE 也提供了 Demo 来演示相关 API 的用法