在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4079|回复: 2

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

[复制链接]
发表于 2020-5-20 15:30:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

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

步骤

第 1 步:下载验证

ST Nucleo,按键1长按为配网,指示灯旁黑色按键为开发板复位口,USB为程序下载口。

154819bw8cr3aj33jc328w.png

涂鸦三明治(PWM)照明功能板

154834rja4gxb9tgjqy1fq.jpg

涂鸦三明治 Wi-Fi MCU 通信板(E3S)

154845cwncjgfc11a6f11u.jpg

连接方式如下:(从上到下依次为:涂鸦三明治(PWM)照明功能板,ST Nucleo,涂鸦三明治 Wi-Fi MCU 通信板(E3S))

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

154903b79wnyz4qdld3qw1.jpg


第 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);
}


2.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下发处理函数
  输入参数 : dpidP序号
           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;
}


3.dp_download_handle()主要用于处理由云端下发的DP数据,开发者需要根据相应的DP下发实现相应的功能

/*****************************************************************************
  函数名称 : dp_download_handle
  功能描述 : dp下发处理函数
  输入参数 : dpidDP序号
           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;
}

153632gp89u8ej11juivjj.png

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

RGB 调光部分几个重要API:

153701u8vmh4wmlrcccger.png


如果您想了解更多电工照明行业技术干货,我推荐您看下沈军武老师(资深电工照明行业技术专家,拥有10余年电工照明行业经验)在2020年6月3日晚19:30的直播课分享,届时沈老师将会带来《新基建逻辑下,如何实现智慧升级》的干货课程。参加课程还有机会免费获取三明治开发板,以及联网模块,课程详情见下方海报。

154627nwrdzuidibu5kb2u.png


发表于 2020-5-22 13:43:49 | 显示全部楼层
kan kan!
发表于 2020-6-23 10:43:43 | 显示全部楼层
thanks
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-16 14:53 , Processed in 0.020391 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表