收藏官网首页
查看: 82|回复: 0

[技术分享] 借助机智云平台用esp8266做一个商业化的七彩RGB彩灯

发表于 2019-12-2 13:00:15 | 显示全部楼层 |阅读模式
注册成为机智云开发者,手机加虚拟设备快速开发
5.2 业务处理;
其实整个业务处理是在 gizwits_product.c文件进行的!这里面的 gizwitsEventProcess()方法是处理从机智云 app下发的数据处理,这些数据定义都在服务器定义相约好的!有枚举、调色!

  1. int8_t ICACHE_FLASH_ATTR gizwitsEventProcess(eventInfo_t *info, uint8_t *data, uint32_t len)
  2. {
  3.     uint8_t i = 0;
  4.     dataPoint_t * dataPointPtr = (dataPoint_t *)data;
  5.     moduleStatusInfo_t * wifiData = (moduleStatusInfo_t *)data;

  6.     if((NULL == info) || (NULL == data))
  7.     {
  8.         GIZWITS_LOG("!!! gizwitsEventProcess Error \n");
  9.         return -1;
  10.     }

  11.     for(i = 0; i < info->num; i++)
  12.     {
  13.         switch(info->event[i])
  14.         {
  15.         //电源开关
  16.         case EVENT_power :
  17.                 currentDataPoint.valueLED_Color = 3 ;
  18.             currentDataPoint.valuepower = dataPointPtr->valuepower;
  19.                         GIZWITS_LOG("Evt: EVENT_power %d \n", currentDataPoint.valuepower);
  20.             //开灯
  21.                         if (0x01 == currentDataPoint.valuepower) {
  22.                                 currentDataPoint.valueLED_R = 0;
  23.                                 currentDataPoint.valueLED_G = 250;
  24.                                 currentDataPoint.valueLED_B = 0;
  25.                                 //user handle
  26.                                 WS2812_SetFillColor(currentDataPoint.valueLED_R,currentDataPoint.valueLED_G,currentDataPoint.valueLED_B);
  27.                           //关灯                       
  28.                         } else {
  29.                                 currentDataPoint.valueLED_R = 0;
  30.                                 currentDataPoint.valueLED_G = 0;
  31.                                 currentDataPoint.valueLED_B = 0;
  32.                                 //user handle
  33.                                 WS2812_SetFillColor(currentDataPoint.valueLED_R,currentDataPoint.valueLED_G,currentDataPoint.valueLED_B);
  34.                         }
  35.                         break;
  36.        //指定颜色下发。
  37.         case EVENT_LED_Color:
  38.                         currentDataPoint.valueLED_Color = dataPointPtr->valueLED_Color;
  39.                         GIZWITS_LOG("Evt: EVENT_LED_Color %d\n", currentDataPoint.valueLED_Color)        ;
  40.                         switch (currentDataPoint.valueLED_Color) {
  41.                         //黄色
  42.                         case LED_Color_VALUE0:
  43.                                 currentDataPoint.valueLED_R = 254;
  44.                                 currentDataPoint.valueLED_G = 251;
  45.                                 currentDataPoint.valueLED_B = 0;
  46.                                 //user handle
  47.                                 WS2812_SetFillColor(currentDataPoint.valueLED_R,currentDataPoint.valueLED_G,currentDataPoint.valueLED_B);
  48.                                 break;
  49.                         //紫色
  50.                         case LED_Color_VALUE1:
  51.                                 currentDataPoint.valueLED_R = 167;
  52.                                 currentDataPoint.valueLED_G = 0;
  53.                                 currentDataPoint.valueLED_B = 254;
  54.                                 //user handle
  55.                                 WS2812_SetFillColor(currentDataPoint.valueLED_R,currentDataPoint.valueLED_G,currentDataPoint.valueLED_B);
  56.                                 break;
  57.                         //橙色
  58.                         case LED_Color_VALUE2:
  59.                                 //user handle
  60.                                 currentDataPoint.valueLED_R = 254;
  61.                                 currentDataPoint.valueLED_G = 0;
  62.                                 currentDataPoint.valueLED_B = 57;
  63.                                 //user handle
  64.                                 WS2812_SetFillColor(currentDataPoint.valueLED_R,currentDataPoint.valueLED_G,currentDataPoint.valueLED_B);
  65.                                 break;
  66.                         case LED_Color_VALUE3:
  67.                                 break;
  68.                         }
  69.             break;

  70.         case EVENT_LED_R:
  71.                 currentDataPoint.valueLED_Color = 3 ;
  72.             currentDataPoint.valueLED_R= dataPointPtr->valueLED_R;
  73.             GIZWITS_LOG("Evt:EVENT_LED_R %d\n",currentDataPoint.valueLED_R);
  74.             //user handle
  75.             WS2812_SetFillColor(currentDataPoint.valueLED_R,currentDataPoint.valueLED_G,currentDataPoint.valueLED_B);
  76.             break;
  77.         case EVENT_LED_G:
  78.                 currentDataPoint.valueLED_Color = 3 ;
  79.             currentDataPoint.valueLED_G= dataPointPtr->valueLED_G;
  80.             GIZWITS_LOG("Evt:EVENT_LED_G %d\n",currentDataPoint.valueLED_G);
  81.             //user handle
  82.             WS2812_SetFillColor(currentDataPoint.valueLED_R,currentDataPoint.valueLED_G,currentDataPoint.valueLED_B);
  83.             break;
  84.         case EVENT_LED_B:
  85.                 currentDataPoint.valueLED_Color = 3 ;
  86.             currentDataPoint.valueLED_B= dataPointPtr->valueLED_B;
  87.             GIZWITS_LOG("Evt:EVENT_LED_B %d\n",currentDataPoint.valueLED_B);
  88.             //user handle
  89.             WS2812_SetFillColor(currentDataPoint.valueLED_R,currentDataPoint.valueLED_G,currentDataPoint.valueLED_B);
  90.             break;

  91.         case WIFI_SOFTAP:
  92.             break;
  93.         case WIFI_AIRLINK:
  94.             break;
  95.         case WIFI_STATION:
  96.             break;
  97.         case WIFI_CON_ROUTER:
  98.             GIZWITS_LOG("@@@@ connected router\n");

  99.             break;
  100.         case WIFI_DISCON_ROUTER:
  101.             GIZWITS_LOG("@@@@ disconnected router\n");

  102.             break;
  103.         case WIFI_CON_M2M:
  104.             GIZWITS_LOG("@@@@ connected m2m\n");
  105.                         setConnectM2MStatus(0x01);

  106.             break;
  107.         case WIFI_DISCON_M2M:
  108.             GIZWITS_LOG("@@@@ disconnected m2m\n");
  109.                         setConnectM2MStatus(0x00);

  110.             break;
  111.         case WIFI_RSSI:
  112.             GIZWITS_LOG("@@@@ RSSI %d\n", wifiData->rssi);
  113.             break;
  114.         case TRANSPARENT_DATA:
  115.             GIZWITS_LOG("TRANSPARENT_DATA \n");
  116.             //user handle , Fetch data from [data] , size is [len]
  117.             break;
  118.         case MODULE_INFO:
  119.             GIZWITS_LOG("MODULE INFO ...\n");
  120.             break;
  121.             
  122.         default:
  123.             break;
  124.         }
  125.     }
  126.     system_os_post(USER_TASK_PRIO_2, SIG_UPGRADE_DATA, 0);
  127.    
  128.     return 0;
  129. }
复制代码




原理图还有一个按键,我这里 的业务是 长按是 配网模式 ,短按是切换颜色,代码如下:
  1. int flag = 0;
  2. void timerSmartConfig_callback(void) {
  3.         flag++;
  4.         switch (flag) {
  5.         //切换为蓝色
  6.         case 1:
  7.                 currentDataPoint.valueLED_R = 0;
  8.                 currentDataPoint.valueLED_G = 0;
  9.                 currentDataPoint.valueLED_B = 254;
  10.                 //user handle
  11.                 WS2812_SetFillColor(currentDataPoint.valueLED_R,
  12.                                 currentDataPoint.valueLED_G, currentDataPoint.valueLED_B);
  13.                 break;
  14.         //切换为红色
  15.         case 2:
  16.                 currentDataPoint.valueLED_R = 254;
  17.                 currentDataPoint.valueLED_G = 0;
  18.                 currentDataPoint.valueLED_B = 0;
  19.                 //user handle
  20.                 WS2812_SetFillColor(currentDataPoint.valueLED_R,
  21.                                 currentDataPoint.valueLED_G, currentDataPoint.valueLED_B);
  22.                 break;
  23.         //切换为绿色
  24.         case 3:
  25.                 currentDataPoint.valueLED_R = 0;
  26.                 currentDataPoint.valueLED_G = 254;
  27.                 currentDataPoint.valueLED_B = 0;
  28.                 //user handle
  29.                 WS2812_SetFillColor(currentDataPoint.valueLED_R,
  30.                                 currentDataPoint.valueLED_G, currentDataPoint.valueLED_B);
  31.                 break;
  32.         case 4:
  33.                 gizwitsSetMode(WIFI_AIRLINK_MODE);
  34.                 flag = 0;
  35.                 break;
  36.         }

  37. }

  38. LOCAL void ICACHE_FLASH_ATTR keyLongPress(void) {
  39.         currentDataPoint.valueLED_R = 0;
  40.         currentDataPoint.valueLED_G = 254;
  41.         currentDataPoint.valueLED_B = 0;
  42.         //user handle
  43.         WS2812_SetFillColor(currentDataPoint.valueLED_R,currentDataPoint.valueLED_G, currentDataPoint.valueLED_B);
  44.         gizwitsSetMode(WIFI_AIRLINK_MODE);
  45.         GIZWITS_LOG("#### key2 long press, airlink mode\n");
  46. }

  47. /**
  48. * Key to initialize
  49. * @param none
  50. * @return none
  51. */
  52. LOCAL void ICACHE_FLASH_ATTR keyInit(void)
  53. {
  54.     singleKey[0] = keyInitOne(KEY_0_IO_NUM, KEY_0_IO_MUX, KEY_0_IO_FUNC,
  55.                                 keyLongPress, keyShortPress);
  56.     keys.singleKey = singleKey;
  57.     keyParaInit(&keys);
  58. }

复制代码


1、机智云QQ群: 287087942
机智云爱好者-APP开发群: 599735135
QQ群目前非常活跃,欢迎大家参与进来,交流,讨论,答疑,解惑~~
2、机智云微信公众号: 机智云 gizwits /   机智云智能宠物屋go-kit
关注机智云Gizwits官方公众号随时掌握最新资讯和活动信息
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

© 2011-2017 Gizwits ( 粤ICP备11090211号 )

快速回复 返回顶部 返回列表