收藏官网首页
查看: 14226|回复: 2

[求助] 多路开关定时问题求助

6

主题

13

帖子

77

积分

注册会员

Rank: 2

积分
77
跳转到指定楼层
楼主
发表于 2018-5-4 11:36:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
校园创客福利
准备做个esp8266 soc的四路定时开关 四路定时互不影响 可以同时定时 最好加入周一到周七自由选择,下面三个文件应该如何修改gizwits_product.h


  1. #ifndef _GIZWITS_PRODUCT_H_
  2. #define _GIZWITS_PRODUCT_H_

  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif

  6. #include "gizwits_protocol.h"
  7. #include "GAgent_soc.h"
  8. #define ON                 1
  9. #define OFF                 0
  10. extern bool STA[5];
  11. extern uint32_t time_data[5];//用于存储定时数据
  12. extern _tm ntptimeStr;
  13. /**
  14. * MCU software version number
  15. */
  16. #define SOFTWARE_VERSION                        "03030000"

  17. /**
  18. * MCU hardware version number
  19. */
  20. #define HARDWARE_VERSION                        "03000001"

  21. /**
  22. * Gagent minor version number for OTA upgrade
  23. * OTA hardware version number: 00ESP826
  24. * OTA software version number: 040206xx // "xx" is version number defaults to "25", consistent with the Gagent library version
  25. */
  26. #define SDK_VERSION                             "25"   

  27. #ifndef SOFTWARE_VERSION
  28.     #error "no define SOFTWARE_VERSION"
  29. #endif

  30. #ifndef HARDWARE_VERSION
  31.     #error "no define HARDWARE_VERSION"
  32. #endif


  33. /** User area The current device state structure */
  34. extern dataPoint_t currentDataPoint;

  35. /** User area data point initialization */
  36. void userInit(void);

  37. /** User area device status detection */
  38. void userHandle(void);

  39. void getntpTimerFunc(void);
  40. /** User zone event handling */
  41. int8_t gizwitsEventProcess(eventInfo_t * info, uint8_t * data, uint32_t len);

  42. #ifdef __cplusplus
  43. }
  44. #endif
复制代码
gizwits_product.c
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include "gizwits_product.h"
  4. #include "driver/hal_key.h"
  5. /*
  6. LOCAL os_timer_t time_low_sz;                                                 ///< 用户定时器结构

  7. //关闭定时器
  8. //参数一:要关闭的定时器
  9. os_timer_disarm(&time_low_sz);

  10. //设置定时器
  11. //参数一:要设置的定时器;参数二:定时器到时间要执行的回调函数;参数三:回调函数的参数
  12. os_timer_setfn(&time_low_sz, (os_timer_func_t *)time_low, NULL);

  13. //使能(启动)定时器
  14. //参数一:要使能的定时器;参数二:定时时间(单位:ms);参数三:是否重复执行,即执行完1次
  15. os_timer_arm(&time_low_sz, 1000, 1);

  16. //倒计时函数
  17. void ICACHE_FLASH_ATTR time_low(void)
  18. {



  19.         currentDataPoint.valuecountdown = time_data[2];//上报当前剩余时间
  20. }
  21. */

  22. /** 用户区域当前设备状态结构 */
  23. dataPoint_t currentDataPoint;
  24. bool STA[5]={0}; //用于存储5个开关的状态
  25. uint32_t time_data[5]={0};//用于存储定时数据  0.定时时  1.定时分   2.倒计时(分钟)3.定时开:ON  定时关关:OFF   4。需要定时的开关01234

  26. _tm ntptimeStr;//时间结构体返回临时值

  27. /**@name Gizwits 用户界面
  28. * @{
  29. */
  30. /**
  31. * @brief 事件处理接口
  32. * 描述:
  33. * 1. 用户可以自定义wifi模块状态的变化
  34. * 2. 用户可以在事件处理逻辑中添加数据点,比如调用相关硬件外设操作界面。
  35. * @param [in] info: 事件队列
  36. * @param [in] data: 协议数据
  37. * @param [in] len: 协议数据长度
  38. * @return NULL
  39. * @ref gizwits_protocol.h
  40. */
  41. int8_t ICACHE_FLASH_ATTR gizwitsEventProcess(eventInfo_t *info, uint8_t *data, uint32_t len)
  42. {
  43.     uint8_t i = 0;
  44.     dataPoint_t * dataPointPtr = (dataPoint_t *)data;
  45.     moduleStatusInfo_t * wifiData = (moduleStatusInfo_t *)data;

  46.     if((NULL == info) || (NULL == data))
  47.     {
  48.         GIZWITS_LOG("!!! gizwitsEventProcess Error \n");
  49.         return -1;
  50.     }

  51.     for(i = 0; i < info->num; i++)
  52.     {
  53.         switch(info->event[i])
  54.         {
  55.         case EVENT_sw1 :
  56.                         currentDataPoint.valuesw1 = dataPointPtr->valuesw1;
  57.                         GIZWITS_LOG("Evt: EVENT_sw1 %d \n", currentDataPoint.valuesw1);
  58.                         if(0x01 == currentDataPoint.valuesw1)
  59.                         {
  60.                                 STA[0]=1;//用户处理
  61.                         }
  62.                         else
  63.                         {
  64.                                 STA[0]=0;//用户处理
  65.                         }
  66.                         break;
  67.                 case EVENT_sw2 :
  68.                         currentDataPoint.valuesw2 = dataPointPtr->valuesw2;
  69.                         GIZWITS_LOG("Evt: EVENT_sw2 %d \n", currentDataPoint.valuesw2);
  70.                         if(0x01 == currentDataPoint.valuesw2)
  71.                         {
  72.                                 STA[1]=1;//用户处理
  73.                         }
  74.                         else
  75.                         {
  76.                                 STA[1]=0;//用户处理
  77.                         }
  78.                         break;
  79.                 case EVENT_sw3 :
  80.                         currentDataPoint.valuesw3 = dataPointPtr->valuesw3;
  81.                         GIZWITS_LOG("Evt: EVENT_sw3 %d \n", currentDataPoint.valuesw3);
  82.                         if(0x01 == currentDataPoint.valuesw3)
  83.                         {
  84.                                 STA[2]=1;//用户处理
  85.                         }
  86.                         else
  87.                         {
  88.                                 STA[2]=0;//用户处理
  89.                         }
  90.                         break;
  91.                 case EVENT_sw4 :
  92.                         currentDataPoint.valuesw4 = dataPointPtr->valuesw4;
  93.                         GIZWITS_LOG("Evt: EVENT_sw4 %d \n", currentDataPoint.valuesw4);
  94.                         if(0x01 == currentDataPoint.valuesw4)
  95.                         {
  96.                                 STA[3]=1;//用户处理
  97.                         }
  98.                         else
  99.                         {
  100.                                 STA[3]=0;//用户处理
  101.                         }
  102.                         break;

  103.         case EVENT_ok :
  104.             currentDataPoint.valueok = dataPointPtr->valueok;
  105.             GIZWITS_LOG("Evt: EVENT_ok %d \n", currentDataPoint.valueok);
  106.             if(0x01 == currentDataPoint.valueok)
  107.             {
  108.                     STA[4]=0;//用户处理
  109.             }
  110.             else
  111.             {
  112.                     STA[4]=1;//用户处理
  113.             }
  114.             break;

  115.         case EVENT_sw:
  116.             currentDataPoint.valuesw = dataPointPtr->valuesw;
  117.             GIZWITS_LOG("Evt: EVENT_sw %d\n", currentDataPoint.valuesw);
  118.             switch(currentDataPoint.valuesw)
  119.             {
  120.             case sw_VALUE0://开关1
  121.                     time_data[4]=0;//用户处理
  122.                 break;
  123.             case sw_VALUE1://开关2
  124.                     time_data[4]=1;//用户处理
  125.                 break;
  126.             case sw_VALUE2://开关3
  127.                     time_data[4]=2;//用户处理
  128.                 break;
  129.             case sw_VALUE3://开关4
  130.                     time_data[4]=3;//用户处理
  131.                 break;
  132.             case sw_VALUE4://所有开关
  133.                     time_data[4]=4;//用户处理
  134.                                 break;
  135.             default:
  136.                 break;
  137.             }
  138.             break;

  139.         case EVENT_mode:
  140.             currentDataPoint.valuemode = dataPointPtr->valuemode;
  141.             GIZWITS_LOG("Evt: EVENT_mode %d\n", currentDataPoint.valuemode);
  142.             switch(currentDataPoint.valuemode)
  143.             {
  144.             case mode_VALUE0:
  145.                     time_data[3]=1;//用户处理
  146.                 break;
  147.             case mode_VALUE1:
  148.                     time_data[3]=0;//用户处理
  149.                 break;
  150.             default:
  151.                 break;
  152.             }
  153.             break;

  154.         case EVENT_hour:
  155.             currentDataPoint.valuehour= dataPointPtr->valuehour;
  156.             GIZWITS_LOG("Evt:EVENT_hour %d\n",currentDataPoint.valuehour);
  157.             time_data[0]=currentDataPoint.valuehour;//用户处理
  158.             break;

  159.         case EVENT_minute:
  160.             currentDataPoint.valueminute= dataPointPtr->valueminute;
  161.             GIZWITS_LOG("Evt:EVENT_minute %d\n",currentDataPoint.valueminute);
  162.             time_data[1]=currentDataPoint.valueminute;//用户处理
  163.             break;

  164.         case EVENT_countdown:
  165.             currentDataPoint.valuecountdown= dataPointPtr->valuecountdown;
  166.             GIZWITS_LOG("Evt:EVENT_countdown %d\n",currentDataPoint.valuecountdown);
  167.             time_data[2]=currentDataPoint.valuecountdown * 60;//用户处理,转换成秒钟
  168.             break;

  169.         case WIFI_SOFTAP://WIFI处于SOFTAP模式,热点模式,Access Point,提供无线接入服务,允许其它无线设备接入,提供数据访问,一般的无线路由/网桥工作在该模式下。AP和AP之间允许相互连接 Sta模式;
  170.             break;
  171.         case WIFI_AIRLINK://WIFI处于AIRLINK模式,广播模式
  172.             break;
  173.         case WIFI_STATION://WIFI处于STATION模式,类似于无线终端,sta本身并不接受无线的接入,它可以连接到AP,一般无线网卡即工作在该模式。
  174.             break;
  175.         case WIFI_CON_ROUTER://wifi连接路由器
  176.             GIZWITS_LOG("@@@@ connected router\n");
  177.             break;
  178.         case WIFI_DISCON_ROUTER://WiFi断开路由器
  179.             GIZWITS_LOG("@@@@ disconnected router\n");
  180.             break;
  181.         case WIFI_CON_M2M://WIFI连接M2M
  182.             GIZWITS_LOG("@@@@ connected m2m\n");
  183.                         setConnectM2MStatus(0x01);
  184.             break;
  185.         case WIFI_DISCON_M2M://WIFI断开M2M
  186.             GIZWITS_LOG("@@@@ disconnected m2m\n");
  187.                         setConnectM2MStatus(0x00);
  188.             break;
  189.         case WIFI_RSSI://wifi接收信号的强度
  190.             GIZWITS_LOG("@@@@ RSSI %d\n", wifiData->rssi);
  191.             break;
  192.         case TRANSPARENT_DATA://透明数据传输
  193.             GIZWITS_LOG("TRANSPARENT_DATA \n");
  194.             //用户处理 , 读取数据 [data] , 大小 [len]
  195.             break;
  196.         case MODULE_INFO://模块信息
  197.             GIZWITS_LOG("MODULE INFO ...\n");
  198.             break;
  199.             
  200.         default:
  201.             break;
  202.         }
  203.     }
  204.     system_os_post(USER_TASK_PRIO_2, SIG_UPGRADE_DATA, 0);
  205.     return 0;
  206. }


  207. /**
  208. * 用户网络时间获取与数据处理
  209. * 这里用户除了需要获取网络时间以外,还要创建相应的任务
  210. * @参数 无
  211. * @返回 无
  212. */

  213. void ICACHE_FLASH_ATTR getntpTimerFunc(void)
  214. {
  215.         //倒计时缓存数据
  216.         bool swls1[2] = {0};//临时缓存倒计时
  217.         bool swls2[2] = {0};//临时缓存定时
  218.         uint32_t swls[4] = {0};//缓存需要设置的开关标志
  219. /******************倒计时************************
  220. ******倒计时处理,定时器可以实现掉网情况下也能执行,还可******************
  221. ******以通过网络时间判定,触发了之后保存现在时间,计算出******************
  222. ******要相应的时间,然后判断当前时间是否达到了控制的时间******************
  223. ******网络处理方法请自行参考上述流程写*************************/
  224.         if((time_data[2]!=0) && (STA[4]==1) && (swls1[0]==0))
  225.         {
  226.                 swls1[0]=1;
  227.                 swls1[1]=1;
  228.                 STA[4]=0;//确定开关也要进行清位上报

  229.         }
  230.         if((time_data[2]!=0) && (swls1[0]==1))//如果倒计时值大于0,而起OK开关按下,倒计时不创建多任务,创建多任务之后无法看到剩余时间
  231.         {
  232.                 if(swls1[1]==1)
  233.                 {
  234.                         swls[0]=time_data[4];//缓存要使用的开关标志
  235.                         swls[1]=time_data[3];//缓存需要设置的开关标志
  236.                         time_data[4]=0;//云端清位
  237.                         time_data[3]=0;//云端清位
  238.                         swls1[1]=0;
  239.                 }
  240.                         time_data[2]--;//由于此函数是1秒执行一次,所以每秒减1就行了
  241.         }
  242.                 else//倒计时结束了
  243.                 {
  244.                         swls1[0]=0;
  245.                         //开关控制
  246.                         switch(swls[0])
  247.                         {
  248.                                 case 0 :
  249.                                 {
  250.                                         if(swls[1]==0) STA[0]=0;//设置第一个开关的状态
  251.                                                 else STA[0]=1;//设置第一个开关的状态
  252.                                 }
  253.                                         break;
  254.                                 case 1 :
  255.                                 {
  256.                                         if(swls[1]==0) STA[1]=0;//设置第二个开关的状态
  257.                                                 else STA[1]=1;//设置第一个开关的状态
  258.                                 }
  259.                                         break;
  260.                                 case 2 :
  261.                                 {
  262.                                         if(swls[1]==0) STA[2]=0;//设置第三个开关的状态
  263.                                                 else STA[2]=1;//设置第一个开关的状态
  264.                                 }
  265.                                         break;
  266.                                 case 3 :
  267.                                 {
  268.                                         if(swls[1]==0) STA[3]=0;//设置第四个开关的状态
  269.                                                 else STA[3]=1;//设置第一个开关的状态
  270.                                 }
  271.                                         break;
  272.                                 case 4 :
  273.                                 {
  274.                                         if(swls[1]==0) //设置全部开关的状态
  275.                                         {
  276.                                                 STA[0]=0;
  277.                                                 STA[1]=0;
  278.                                                 STA[2]=0;
  279.                                                 STA[3]=0;
  280.                                         }
  281.                                                 else
  282.                                                 {
  283.                                                         STA[0]=1;
  284.                                                         STA[1]=1;
  285.                                                         STA[2]=1;
  286.                                                         STA[3]=1;
  287.                                                 }
  288.                                 }
  289.                                         break;
  290.                                 default:
  291.                                         break;
  292.                         }
  293.                 }
  294. /******************倒计时处理结束************************/

  295. /******************定时预约处理*************************/
  296. /*currentDataPoint.valuehour = time_data[0];
  297. currentDataPoint.valueminute = time_data[1];*/
  298.         gagentGetNTP(&ntptimeStr);
  299.     os_printf("gagentntp secon: %d",ntptimeStr.second);//打印时间
  300.         if(((time_data[0] != 0) || (time_data[1] != 0)) && (STA[4]==1) && (swls2[0]==0))
  301.         {
  302.                 swls2[0]=1;
  303.                 swls2[1]=1;
  304.                 STA[4]=0;//确定开关也要进行清位上报
  305.                 currentDataPoint.valuehour = 0;//云端清除
  306.                 currentDataPoint.valueminute = 0;//云端清除
  307.         }
  308.     if(((time_data[0] != 0) || (time_data[1] != 0)) && (swls2[0]==1) )
  309.     {
  310.                 if(swls2[1]==1)
  311.                 {
  312.                         swls[2]=time_data[4];//缓存要使用的开关标志
  313.                         swls[3]=time_data[3];//缓存需要设置的开关标志
  314.                         time_data[4]=0;//云端清位
  315.                         time_data[3]=0;//云端清位
  316.                         swls2[1]=0;
  317.                 }
  318.             if(ntptimeStr.hour == time_data[0])//时
  319.             {
  320.                     if(ntptimeStr.minute == time_data[1])//分
  321.                     {
  322.                             swls2[0]=0;
  323.                                 //开关控制
  324.                                 switch(swls[0])
  325.                                 {
  326.                                         case 0 :
  327.                                         {
  328.                                                 if(swls[1]==0) STA[0]=0;//设置第一个开关的状态
  329.                                                         else STA[0]=1;//设置第一个开关的状态
  330.                                         }
  331.                                                 break;
  332.                                         case 1 :
  333.                                         {
  334.                                                 if(swls[1]==0) STA[1]=0;//设置第二个开关的状态
  335.                                                         else STA[1]=1;//设置第一个开关的状态
  336.                                         }
  337.                                                 break;
  338.                                         case 2 :
  339.                                         {
  340.                                                 if(swls[1]==0) STA[2]=0;//设置第三个开关的状态
  341.                                                         else STA[2]=1;//设置第一个开关的状态
  342.                                         }
  343.                                                 break;
  344.                                         case 3 :
  345.                                         {
  346.                                                 if(swls[1]==0) STA[3]=0;//设置第四个开关的状态
  347.                                                         else STA[3]=1;//设置第一个开关的状态
  348.                                         }
  349.                                                 break;
  350.                                         case 4 :
  351.                                         {
  352.                                                 if(swls[1]==0) //设置全部开关的状态
  353.                                                 {
  354.                                                         STA[0]=0;
  355.                                                         STA[1]=0;
  356.                                                         STA[2]=0;
  357.                                                         STA[3]=0;
  358.                                                 }
  359.                                                         else
  360.                                                         {
  361.                                                                 STA[0]=1;
  362.                                                                 STA[1]=1;
  363.                                                                 STA[2]=1;
  364.                                                                 STA[3]=1;
  365.                                                         }
  366.                                         }
  367.                                                 break;
  368.                                         default:
  369.                                                 break;
  370.                                 }

  371.                     }
  372.             }
  373.     }
  374. }

  375. /**
  376. * 用户数据采集
  377. * 这里用户除了需要实现数据点采集以外的数据采集外,还可以自定义采集频率和设计数据滤波算法。
  378. * @参数 无
  379. * @返回 无
  380. */
  381. void ICACHE_FLASH_ATTR userHandle(void)
  382. {
  383.         //GPIO开关控制,此处为低电平有效控制,若改为高电平,则不需要取反
  384.         GPIO_OUTPUT_SET(GPIO_ID_PIN(12), !STA[0]);
  385.         GPIO_OUTPUT_SET(GPIO_ID_PIN(13), !STA[1]);
  386.         GPIO_OUTPUT_SET(GPIO_ID_PIN(14), !STA[2]);
  387.         GPIO_OUTPUT_SET(GPIO_ID_PIN(15), !STA[3]);

  388.         //数据上报,可适当增加定时上报时间,节约芯片上传产生不必要的负荷
  389.         currentDataPoint.valuesw1 = STA[0];
  390.         currentDataPoint.valuesw2 = STA[1];
  391.         currentDataPoint.valuesw3 = STA[2];
  392.         currentDataPoint.valuesw4 = STA[3];
  393.         currentDataPoint.valueok  = STA[4];
  394.         if(time_data[2]<60 && time_data[2]>0) currentDataPoint.valuecountdown =1;//不到1分钟按照1分钟计算
  395.         else currentDataPoint.valuecountdown = time_data[2]/60;//秒钟转换成分钟
  396.     system_os_post(USER_TASK_PRIO_2, SIG_UPGRADE_DATA, 0);
  397. }

  398. /**
  399. * 数据点初始化功能
  400. * 在函数中完成初始用户相关数据
  401. * @参数 无
  402. * @返回 无
  403. * @note 开发人员可以在这个函数中添加一个数据点状态初始化值。
  404. */
  405. void ICACHE_FLASH_ATTR userInit(void)
  406. {
  407.     gizMemset((uint8_t *)¤tDataPoint, 0, sizeof(dataPoint_t));

  408.         /** 警告!!!因变量的初始化,必须在数据范围 **/
  409.     //以下数据点都不具备掉电存储的初始化
  410.         currentDataPoint.valuesw1 = 0;
  411.         currentDataPoint.valuesw2 = 0;
  412.         currentDataPoint.valuesw3 = 0;
  413.         currentDataPoint.valuesw4 = 0;
  414.         currentDataPoint.valueok = 0;
  415.         currentDataPoint.valuesw = 0;
  416.         currentDataPoint.valuemode = 0;
  417.         currentDataPoint.valuehour = 0;
  418.         currentDataPoint.valueminute = 0;
  419. }
复制代码
user_main.c
  1. #include "ets_sys.h"
  2. #include "osapi.h"
  3. #include "user_interface.h"
  4. #include "gagent_soc.h"
  5. #include "user_devicefind.h"
  6. #include "user_webserver.h"
  7. #include "gizwits_product.h"
  8. #include "driver/hal_key.h"
  9. #if ESP_PLATFORM
  10. #include "user_esp_platform.h"
  11. #endif

  12. #ifdef SERVER_SSL_ENABLE
  13. #include "ssl/cert.h"
  14. #include "ssl/private_key.h"
  15. #else
  16. #ifdef CLIENT_SSL_ENABLE
  17. unsigned char *default_certificate;
  18. unsigned int default_certificate_len = 0;
  19. unsigned char *default_private_key;
  20. unsigned int default_private_key_len = 0;
  21. #endif
  22. #endif

  23. /**@name 用户定时器相关参数
  24. * @{
  25. */
  26. #define USER_TIME_MS 50                                                           ///< 50毫秒时间
  27. LOCAL os_timer_t userTimer;                                                 ///< 用户定时器结构

  28. #define NTP_TIME_1000MS 1000                                                           ///< 1000毫秒时间
  29. LOCAL os_timer_t ntpTimer1000ms;                                                 ///< 用户定时器结构
  30. /**@} */

  31. /**@name 按键的相关定义
  32. * @{
  33. */
  34. #define GPIO_KEY_NUM                            4                           ///< 定义按键成员的总数。
  35. #define KEY_0_IO_MUX                            PERIPHS_IO_MUX_GPIO2_U      ///< ESP8266 GPIO 功能
  36. #define KEY_0_IO_NUM                            2                           ///< ESP8266 GPIO 数
  37. #define KEY_0_IO_FUNC                           FUNC_GPIO2                  ///< ESP8266 GPIO 名称
  38. #define KEY_1_IO_MUX                            PERIPHS_IO_MUX_GPIO0_U       ///< ESP8266 GPIO 功能
  39. #define KEY_1_IO_NUM                            0                          ///< ESP8266 GPIO 数
  40. #define KEY_1_IO_FUNC                           FUNC_GPIO0                 ///< ESP8266 GPIO 名称
  41. #define KEY_2_IO_MUX                            PERIPHS_IO_MUX_GPIO4_U      ///< ESP8266 GPIO 功能
  42. #define KEY_2_IO_NUM                            4                           ///< ESP8266 GPIO 数
  43. #define KEY_2_IO_FUNC                           FUNC_GPIO4                  ///< ESP8266 GPIO 名称
  44. #define KEY_3_IO_MUX                            PERIPHS_IO_MUX_GPIO5_U       ///< ESP8266 GPIO 功能
  45. #define KEY_3_IO_NUM                            5                          ///< ESP8266 GPIO 数
  46. #define KEY_3_IO_FUNC                           FUNC_GPIO5                 ///< ESP8266 GPIO 名称
  47. LOCAL key_typedef_t * singleKey[GPIO_KEY_NUM];                              ///< 定义单个按键成员数组指针
  48. LOCAL keys_typedef_t keys;                                                  ///< 定义总体按键模块结构指针。
  49. /**@} */

  50. /*key1按键短按处理*/
  51. LOCAL void ICACHE_FLASH_ATTR key1ShortPress(void)
  52. {
  53.         STA[1]=!STA[1];
  54. }
  55. /*key1按键长按处理*/
  56. LOCAL void ICACHE_FLASH_ATTR key1LongPress(void)
  57. {
  58.         gizwitsSetMode(WIFI_SOFTAP_MODE);
  59.         //gizwitsSetMode(WIFI_AIRLINK_MODE);
  60. }
  61. /*key2按键短按处理*/
  62. LOCAL void ICACHE_FLASH_ATTR key2ShortPress(void)
  63. {
  64.         STA[2]=!STA[2];
  65. }
  66. /* key2按键长按处理*/
  67. LOCAL void ICACHE_FLASH_ATTR key2LongPress(void)
  68. {
  69.         gizwitsSetMode(WIFI_SOFTAP_MODE);
  70. }
  71. /*key3按键短按处理*/
  72. LOCAL void ICACHE_FLASH_ATTR key3ShortPress(void)
  73. {
  74.         STA[3]=!STA[3];
  75. }
  76. /*key3按键长按处理*/
  77. LOCAL void ICACHE_FLASH_ATTR key3LongPress(void)
  78. {
  79.         gizwitsSetMode(WIFI_SOFTAP_MODE);
  80. }
  81. //key4按键短按处理*
  82. LOCAL void ICACHE_FLASH_ATTR key4ShortPress(void)
  83. {
  84.         STA[4]=!STA[4];
  85. }
  86. //key4按键长按处理*
  87. LOCAL void ICACHE_FLASH_ATTR key4LongPress(void)
  88. {
  89.         gizwitsSetMode(WIFI_SOFTAP_MODE);
  90. }
  91. /**
  92. * 按键初始化
  93. * @参数 无
  94. * @返回 无
  95. */
  96. LOCAL void ICACHE_FLASH_ATTR keyInit(void)
  97. {
  98.     singleKey[0] = keyInitOne(KEY_0_IO_NUM, KEY_0_IO_MUX, KEY_0_IO_FUNC,
  99.                                 key1LongPress, key1ShortPress);
  100.     singleKey[1] = keyInitOne(KEY_1_IO_NUM, KEY_1_IO_MUX, KEY_1_IO_FUNC,
  101.                                 key2LongPress, key2ShortPress);
  102.     singleKey[2] = keyInitOne(KEY_2_IO_NUM, KEY_2_IO_MUX, KEY_2_IO_FUNC,
  103.                                 key3LongPress, key3ShortPress);
  104.     singleKey[3] = keyInitOne(KEY_3_IO_NUM, KEY_3_IO_MUX, KEY_3_IO_FUNC,
  105.                                 key4LongPress, key4ShortPress);
  106.     keys.singleKey = singleKey;
  107.     keyParaInit(&keys);
  108.     PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U, FUNC_GPIO12);//开关1
  109.     PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTCK_U, FUNC_GPIO13);//开关2
  110.     PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTMS_U, FUNC_GPIO14);//开关3
  111.     PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDO_U, FUNC_GPIO15);//开关4
  112. }

  113. /**
  114. * @brief user_rf_cal_sector_set
  115. * 在Flash中使用第636扇区的(2544k ~ 2548k)存储rf_cal参数
  116. * @参数 无
  117. * @返回 无
  118. */
  119. uint32_t ICACHE_FLASH_ATTR user_rf_cal_sector_set()
  120. {
  121.     return 636;
  122. }

  123. /**
  124. * @brief 程序的入口函数
  125. * 在函数中完成与用户相关的初始化
  126. * @参数 无
  127. * @返回 无
  128. */
  129. void ICACHE_FLASH_ATTR user_init(void)
  130. {
  131.     uint32_t system_free_size = 0;

  132.     wifi_station_set_auto_connect(1);
  133.     wifi_set_sleep_type(NONE_SLEEP_T);//设置无休眠模式
  134.     espconn_tcp_set_max_con(10);
  135.     uart_init_3(9600,115200);
  136.     UART_SetPrintPort(1);
  137.     GIZWITS_LOG( "---------------SDK version:%s--------------\n", system_get_sdk_version());
  138.     GIZWITS_LOG( "system_get_free_heap_size=%d\n",system_get_free_heap_size());

  139.     struct rst_info *rtc_info = system_get_rst_info();
  140.     GIZWITS_LOG( "reset reason: %x\n", rtc_info->reason);
  141.     if (rtc_info->reason == REASON_WDT_RST ||
  142.         rtc_info->reason == REASON_EXCEPTION_RST ||
  143.         rtc_info->reason == REASON_SOFT_WDT_RST)
  144.     {
  145.         if (rtc_info->reason == REASON_EXCEPTION_RST)
  146.         {
  147.             GIZWITS_LOG("Fatal exception (%d):\n", rtc_info->exccause);
  148.         }
  149.         GIZWITS_LOG( "epc1=0x%08x, epc2=0x%08x, epc3=0x%08x, excvaddr=0x%08x, depc=0x%08x\n",
  150.                 rtc_info->epc1, rtc_info->epc2, rtc_info->epc3, rtc_info->excvaddr, rtc_info->depc);
  151.     }

  152.     if (system_upgrade_userbin_check() == UPGRADE_FW_BIN1)
  153.     {
  154.         GIZWITS_LOG( "---UPGRADE_FW_BIN1---\n");
  155.     }
  156.     else if (system_upgrade_userbin_check() == UPGRADE_FW_BIN2)
  157.     {
  158.         GIZWITS_LOG( "---UPGRADE_FW_BIN2---\n");
  159.     }

  160.     keyInit();
  161.    
  162.     userInit();

  163.     gizwitsInit();  

  164.     //使用定时
  165.     os_timer_disarm(&userTimer);
  166.     os_timer_setfn(&userTimer, (os_timer_func_t *)userHandle, NULL);
  167.     os_timer_arm(&userTimer, USER_TIME_MS, 1);

  168.     //定时获取网络时间以及处理函数
  169.     os_timer_disarm(&ntpTimer1000ms);
  170.     os_timer_setfn(&ntpTimer1000ms, (os_timer_func_t *)getntpTimerFunc, NULL);
  171.     os_timer_arm(&ntpTimer1000ms, NTP_TIME_1000MS, 1);

  172.     GIZWITS_LOG("--- system_free_size = %d ---\n", system_get_free_heap_size());
  173. }
复制代码




13

主题

81

帖子

1241

积分

金牌会员

Rank: 6Rank: 6

积分
1241
沙发
发表于 2018-5-8 07:46:38 | 只看该作者
我从来都不修改gizwits_product.h,所有定义直接写在gizwits_product.c。

0

主题

212

帖子

982

积分

超级版主

Rank: 8Rank: 8

积分
982
板凳
发表于 2018-5-15 14:27:26 | 只看该作者
我觉得用一个定时器,4个uint32的全局变量作为定时器计数值就可以四路定时开关 四路定时互不影响 可以同时定时。当然我们还有APPSDK也有定时任务
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

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