收藏官网首页
查看: 107742|回复: 68

【Gokit】从0开始实现智能插座(PCB、源码等开源)

 

20

主题

112

帖子

1626

积分

金牌会员

Rank: 6Rank: 6

积分
1626
跳转到指定楼层
#
发表于 2016-7-29 16:13:10 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
免费使用STM32、APP自动代码生成工具
本帖最后由 Genius 于 2016-8-29 15:06 编辑

【开源硬件】机智云智能硬件创新大赛  http://club.gizwits.com/thread-2646-1-1.html
原创**:如需转载,请注明来源:http://club.gizwits.com/thread-3029-1-1.html
原贴名称:基于 公版APP 机智云插座 从0开始 代码实现G
首先要感谢机智云给了我们这样一个可以实现想法的平台,如果没有机智云,我要实现这个功能,需要请做APP的同事做一款APP,还要请做云平台的同事做一个平台,自己还要云阿里注册一个账号购买一个云服务。如果把这些加起来,要请这个同事吃饭,那个同事吃饭,现实我的这个想法起码要超过1万元。在深圳会展中心了解到机智云后,这几天工作任务少,就进入这个平台学习了几天,打算从公版APP入手,为什么会选择智能云插座作为体验机智云平台呢?插座是生活中的必须品,需求还是很强的,当然还有智能灯也是。我自己的一个应用场景,现在广东天气这么热我每天晚上睡觉需要开空调,如果一直开着,到了早上会觉得有点冷,特别是有小孩的家庭。所以我希望到了凌晨3点之后关闭空调,同时又能自动打开风扇,让空气流通起来,我相信还是有很多朋友有跟我一样的想法,如果有,那就跟我一起解决生活中需要解决的问题吧,让想法照进现实。//-------------------------------------------{

共四大分部

第一部分:修改公版APP
第二部分:修改gokit MCU源码
第三部分:用GOKIT开发板验证功能
第四部分:用公模插座外壳做自己的智能插座
//--------------------------------------------}
第一部分

安装APP编译环境,这里只使用了安卓的环境,这一块我也不是很熟悉,从百度上了解到的。

五步搞定Android开发环境部署
//-----------------------------------------------------
第一步:安装JDK  http://www.oracle.com/technetwork/java/javase/downloads/index.html

JDK默认安装成功后,会在系统目录下出现两个文件夹,一个代表jdk,一个代表jre。
JDK的全称是Java SE Development Kit,也就是Java 开发工具箱。SE表示标准版。JDK是Java的核心,包含了Java的运行环境(Java Runtime Environment),一堆Java工具和给开发者开发应用程序时调用的Java类库
我们可以打开jdk的安装目录下的Bin目录,里面有许多后缀名为exe的可执行程序,这些都是JDK包含的工具。通过第二步讲到的配置JDK的变量环境,我们可以方便地调用这些工具及它们的命令。

JDK包含的基本工具主要有:
javac:Java编译器,将源代码转成字节码。
jar:打包工具,将相关的类文件打包成一个文件。
javadoc:文档生成器,从源码注释中提取文档。
jdb:debugger,调试查错工具。
java:运行编译后的java程序。

//-----------------------------------------------------
第二步:配置Windows上JDK的变量环境
很多刚学java开发的人按照网上的教程可以很轻松配置好Windows上JDK的变量环境,但是为什么要这么配置并没有多想。
我们平时打开一个应用程序,一般是通过桌面的应用程序图标双击或单击系统开始菜单中应用程序的菜单链接,无论是桌面的快捷图标还是菜单链接都包含了应用程序的安装位置信息,打开它们的时候系统会按照这些位置信息找到安装目录然后启动程序

知道了一个应用程序的安装目录位置,我们也可以通过命令行工具打开,如QQ的位置为:C:\Program Files (x86)\Tencent\QQ\QQProtect\Bin,QQ的应用程序名为为QQProtect.exe,那么我们打开命令行工具,然后进入到“C:\Program Files (x86)\Tencent\QQ\QQProtect\Bin”目录,再输入“QQProtect”,即可运行qq。

如果我们希望打开命令行工具后,直接输入“QQProtect”就能启动qq程序,而不是每次都进入qq的安装目录再启动,这个时候可以通过配置系统环境变量Path来实现。右击“我的电脑”,选择“属性”,在打开窗口中点击左边的“高级系统设置”,出现“系统属性”窗口,在“高级”选项卡下面点击“环境变量”。


编辑系统变量名“Path”,在“Path”变量(字符串内容)的后面追加qq的安装目录:;C:\Program Files (x86)\Tencent\QQ\QQProtect\Bin 注意追加的时候要在目录字符串的前面加个英文的分号;,英文分号是用来区分Path里面不同的路径。


确定保存后,再回到命令窗口,不管在任何目录下,你只要输入qqprotect的命令,qq就会启动


通过启动qq的例子,我们总结下:当要求系统启动一个应用程序时,系统会先在当前目录下查找,如果没有则在系统变量Path指定的路径去查找。前面我们说了JDK包含了一堆开发工具,这些开发工具都在JDK的安装目录下,为了方便使用这些开发工具,我们有必要把JDK的安装目录设置了系统变量。这就是为什么在Windows安装了JDK后需要设置JDK的bin目录为系统环境变量的原因。

为了配置JDK的系统变量环境,我们需要设置三个系统变量,分别是JAVA_HOME,Path和CLASSPATH。下面是这三个变量的设置防范。

JAVA_HOME
先设置这个系统变量名称,变量值为JDK在你电脑上的安装路径:C:\Program Files\Java\jdk1.8.0_20。创建好后则可以利用%JAVA_HOME%作为JDK安装目录的统一引用路径。

Path
PATH属性已存在,可直接编辑,在原来变量后追加:;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin 。

CLASSPATH
设置系统变量名为:CLASSPATH  变量值为:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar 。
注意变量值字符串前面有一个"."表示当前目录,设置CLASSPATH 的目的,在于告诉Java执行环境,在哪些目录下可以找到您所要执行的Java程序所需要的类或者包。
配置环境变量其实还是经常看得到的。特别是一些大型软件
//----------------------------------------------------------

第三步: 下载安装Eclipse
Eclipse为Java应用程序及Android开发的IDE(集成开发环境)。Eclipse不需要安装,下载后把解压包解压后,剪切eclipse文件夹到你想安装的地方,打开时设置你的工作目录即可。
Eclipse的版本有多个,这里选择下载Eclipse IDE for Java EE Developers这个版本。


//----------------------------------------------







微信截图_20160729153815.png (41.92 KB, 下载次数: 478)

微信截图_20160729153815.png

QQ图片20160729154031.png (76.72 KB, 下载次数: 435)

QQ图片20160729154031.png

微信截图_20160729154315.png (34.94 KB, 下载次数: 430)

微信截图_20160729154315.png

微信截图_20160729154459.png (47.62 KB, 下载次数: 403)

微信截图_20160729154459.png

修改ID.png (159.51 KB, 下载次数: 445)

修改ID.png

20

主题

112

帖子

1626

积分

金牌会员

Rank: 6Rank: 6

积分
1626
推荐
 楼主| 发表于 2016-7-29 17:55:24 | 只看该作者
第一部分:修改公版APP
第二部分:修改GOKIT MCU源码
第三部分:用GOKIT开发板验证功能
第四部分:用公模插座外壳做自己的智能插座
前面三个部分都有了。现在是要做最后的一个部分。根据公模外壳,画原理图,设计PCB,打样,焊接元器件,调试程序。出样品。这些过程。
前面几个步骤都做完了,但我自己还不能真正使用智能云插座去操作开与关。
前面都是过程。最后实物需要第四部分完成。
如果看到这里,你产生了和我一样的想法,制作出实物来。那么我们可以一起去做。
我们就可以共同拥有它了。

外壳选择










20

主题

112

帖子

1626

积分

金牌会员

Rank: 6Rank: 6

积分
1626
推荐
 楼主| 发表于 2016-7-29 17:30:04 | 只看该作者
/*****************************************************
* Function Name  : GizWits_ControlDeviceHandle
* Description    : Analy P0 Package根据数据有效位标志,进行控制
    4.10 WiFi模组控制MCU
    WiFi发:
    Header(2B)__LEN(2B)__CMD(1B)__sn(1B)__falg(2B)__ActionBit(1B)__attrFlags(1B)__attrValue(6B)__CheckSum(1B)
    0xFFFF      0x000D   0x03     0x##    0x0000    0x01           标志位         控制值         0x##
    MCU 回通用消息帧:
    Header(2B)__LEN(2B)__CMD(1B)__sn(1B)__falg(2B)__CheckSum(1B)
    0xFFFF      0x0005   0x04     0x##    0x0000    0x##
   
        Bit0~5ED_ONOFF, LED_Color, R,G,B, Motor_speed

    WirteTypeDef_t{
        uint8_t                                                        Attr_Flags;      //信息位 是否有效的标志
        uint8_t                                                        LED_Cmd;
        uint8_t                                                        LED_R;
        uint8_t                                                        LED_G;  
        uint8_t                                                        LED_B;
        MOTOR_T                                                        Motor;               
        }
    依靠接收的数据帧,存储到WirteTypeDef,再更改设备状态
*****************************************************/
void GizWits_ControlDeviceHandle()  //WiFi模组控制MCU
{
        //标志位 0位开关 共1个字节
        if( (WirteTypeDef.Attr_Flags & (1<<0)) == (1<<0))//低位第0位ONOFF  是否设置标志位7位
        {
                        if((WirteTypeDef.LED_Cmd &(1<<0))== 0)
                        {
                                LED_RGB_Control(0,0,0);
                                LED_OFF(LED1);
                                ReadTypeDef.LED_Cmd &= ~(1<<0);//存储状态LED_OnOff a&=~(1<<i);//将a的bit i清0
                                printf("LED OFF \r\n");
                        }
                        if((WirteTypeDef.LED_Cmd &(1<<0))== (1<<0))
                        {
                                ReadTypeDef.LED_Cmd |= (1<<0);//LED_OnOn a|=1<<i;//将a的bit i置1
                                LED_ON(LED1);
                                LED_RGB_Control(254,0,0);//默认打开时,是红色
                                printf("LED ON \r\n");
                        }
        }
        //标志位是否启用定时器
        if( (WirteTypeDef.Attr_Flags & (1<<1)) == (1<<1))//低位第1位Time_OnOff
        {
                        if((WirteTypeDef.LED_Cmd & (1<<1))== 0)
                        {
                                //LED_RGB_Control(0,0,0);
                                LED_OFF(LED2);
                                ReadTypeDef.LED_Cmd &= ~(1<<1);//存储状态LED_OnOff a&=~(1<<i);//将a的bit i清0
                                printf("Time_OnOff OFF \r\n");
                        }
                        if((WirteTypeDef.LED_Cmd & (1<<1)) == (1<<1))
                        {
                                ReadTypeDef.LED_Cmd |= (1<<1);//LED_OnOn a|=1<<i;//将a的bit i置1
                                LED_ON(LED2);
                                //LED_RGB_Control(254,254,0);//
                                printf("Time_OnOff ON \r\n");
                        }
        }
        //标志位是否启用倒计时
        if( (WirteTypeDef.Attr_Flags & (1<<2)) == (1<<2))
        {
                        if((WirteTypeDef.LED_Cmd & (1<<2))== 0)
                        {
                                //LED_RGB_Control(0,0,0);
                                LED_OFF(LED3);
                                ReadTypeDef.LED_Cmd &= ~(1<<2);//存储状态LED_OnOff a&=~(1<<i);//将a的bit i清0
                                printf("Count_Down_OnOff OFF \r\n");
                                TIM_Cmd(TIM4,DISABLE);  //失能TIMx外设
                          time_min = 0;
                          time_sec = 0;
                                min_flag = 0;
                        }
                        if((WirteTypeDef.LED_Cmd & (1<<2)) == (1<<2))
                        {
                                ReadTypeDef.LED_Cmd |= (1<<2);//LED_OnOn a|=1<<i;//将a的bit i置1
                                LED_ON(LED3);
                                //LED_RGB_Control(254,254,254);//
                                printf("Count_Down_OnOff ON \r\n");
                                CountDown_Minute_time=exchangeBytes(ReadTypeDef.CountDown_Minute);//重新给当前设置的值给倒计时
                                if(CountDown_Minute_time!=0)
                                {
                                        TIM_Cmd(TIM4, ENABLE);  //使能TIMx外设
                                }
                        }
        }
        //标志位是否重复星期
        if( (WirteTypeDef.Attr_Flags & (1<<3)) == (1<<3))
        {
                ReadTypeDef.Week_Repeat=WirteTypeDef.Week_Repeat;
                GizWits_DevStatusUpgrade((uint8_t *)&ReadTypeDef, 10*60*1000, 1);
        }
        //标志位定时开机 注:时间以分钟为单位1小时=60分钟=0x3c 存储的是16进制
        if( (WirteTypeDef.Attr_Flags & (1<<4)) == (1<<4))
        {
                        printf("Time_On_Minute ON = %d \r\n",exchangeBytes(WirteTypeDef.Time_On_Minute));
                        if(exchangeBytes(WirteTypeDef.Time_On_Minute)<1441)
                        {
                                ReadTypeDef.Time_On_Minute=WirteTypeDef.Time_On_Minute;
                                CountDown_Time_On_Minute=exchangeBytes(ReadTypeDef.Time_On_Minute);//存储的是高低位改变过的
                                GizWits_DevStatusUpgrade((uint8_t *)&ReadTypeDef, 10*60*1000, 1);
                        }
        }
        //标志位定时关机
        if( (WirteTypeDef.Attr_Flags & (1<<5)) == (1<<5))
        {
                        printf("Time_On_Minute OFF = %d \r\n",exchangeBytes(WirteTypeDef.Time_Off_Minute));
                        if(exchangeBytes(WirteTypeDef.Time_Off_Minute)<1441)
                        {
                                ReadTypeDef.Time_Off_Minute=WirteTypeDef.Time_Off_Minute;
                                CountDown_Time_Off_Minute=exchangeBytes(ReadTypeDef.Time_Off_Minute);//存储的是高低位改变过的
                                GizWits_DevStatusUpgrade((uint8_t *)&ReadTypeDef, 10*60*1000, 1);
                        }
        }
        //标志位倒计时
        if( (WirteTypeDef.Attr_Flags & (1<<6)) == (1<<6))
        {
                printf("CountDown_Minute T = %d \r\n",exchangeBytes(WirteTypeDef.CountDown_Minute));
                if(exchangeBytes(WirteTypeDef.CountDown_Minute)<1441)
                {
                        ReadTypeDef.CountDown_Minute=WirteTypeDef.CountDown_Minute;
                        GizWits_DevStatusUpgrade((uint8_t *)&ReadTypeDef, 10*60*1000, 1);
                        CountDown_Minute_time=exchangeBytes(ReadTypeDef.CountDown_Minute);//当前设置的值给倒计时
                        if(((ReadTypeDef.LED_Cmd & (1<<2)) == (1<<2))&&(CountDown_Minute_time!=0))
                        {
                          time_min = 0;
                          time_sec = 0;
                                min_flag = 0;
                                TIM_Cmd(TIM4, ENABLE);  //使能TIMx外设
                        }
                }
        }
}
/*****************************************************
* Function Name  : GizWits_GatherSensorData();
* Description    : Gather Sensor Data
* Input          : None
* Output         : None
* Return         : None
* Attention                 : None
*****************************************************/
void GizWits_GatherSensorData(void)
{
//        ReadTypeDef.Infrared = IR_Handle();
//        DHT11_Read_Data(&curTem, &curHum);
//        ReadTypeDef.Temperature = (curTem + lastTem) /2;
//        ReadTypeDef.Humidity = (curHum + lastHum)/2;

//        ReadTypeDef.Temperature = ReadTypeDef.Temperature + 13;//Temperature Data Correction//根据协议,矫正数据
//        lastTem = curTem;
//        lastHum = curHum;
}
/*****************************************************
* Function Name  : KEY_Handle
* Description    : Key processing function
*                     KEY1 短按 : None
*                     KEY1 长按 : None
*                     KEY2 短按 : SoftAP方式配置WiFi模组
*                     KEY2 长按 : AirLink方式配置WiFi模组

* 4.13获取网络时间
__packed        typedef struct
{
    Pro_HeadPartTypeDef            Pro_HeadPart;
    uint16_t                year;
          uint8_t                 month;
          uint8_t                 day;
          uint8_t                 hour;
          uint8_t                 minute;
          uint8_t                 second;
          uint32_t                other;
    uint8_t                                                                        Sum;
} Pro_W2D_GetTimeTypeDef;
*****************************************************/
void KEY_Handle(void)
{
        uint8_t Key_return =0;       
        Key_return = ReadKeyValue();       
        if(Key_return & KEY_UP)
        {
                if(Key_return & PRESS_KEY1)//短按K1
                {
#ifdef PROTOCOL_DEBUG
                                  printf("KEY1 PRESS\r\n");
#endif               
                        GizWits_D2WGetCmd();
                }
                if(Key_return & PRESS_KEY2)//短按K2
                {
#ifdef PROTOCOL_DEBUG
                        printf("KEY2 PRESS ,Soft AP mode\r\n");
#endif       
                        //Soft AP mode, RGB red
                        LED_RGB_Control(255, 0, 0);
                        GizWits_D2WConfigCmd(SoftAp_Mode);
                        NetConfigureFlag = 1;
                }                               
        }

        if(Key_return & KEY_LONG)
        {
                if(Key_return & PRESS_KEY1)//长按K1
                {
#ifdef PROTOCOL_DEBUG
                                printf("KEY1 PRESS LONG ,Wifi Reset\r\n");
#endif                       
                        GizWits_D2WResetCmd();//解绑WIFI
                }
                if(Key_return & PRESS_KEY2)//长按K2
                {
                        //AirLink mode, RGB Green
#ifdef PROTOCOL_DEBUG
                                printf("KEY2 PRESS LONG ,AirLink mode\r\n");
#endif       
                        LED_RGB_Control(0, 128, 0);
                        GizWits_D2WConfigCmd(AirLink_Mode);//进入AirLink_Mode模式
                        NetConfigureFlag = 1;
                }
        }
}
/*****************************************************
* Function Name  : GizWits_WiFiStatueHandle
* Description    : Callback function , Judge Wifi statue
* Input          : None
* Output         : None
* Return         : Bit , Attr_Flags
* Attention                 :
*****************************************************/
void GizWits_WiFiStatueHandle(uint16_t wifiStatue)
{       
        if(((wifiStatue & Wifi_ConnClouds) == Wifi_ConnClouds) && (NetConfigureFlag == 1))
        {
                printf("W2M->Wifi_ConnClouds\r\n");
                NetConfigureFlag = 0;
                LED_RGB_Control(0,0,0);
        }
}
/************* (C) COPYRIGHT 2011 STMicroelectronics ****END OF FILE***/

20

主题

112

帖子

1626

积分

金牌会员

Rank: 6Rank: 6

积分
1626
推荐
 楼主| 发表于 2016-7-29 17:29:37 | 只看该作者
main.c
/**
**************************************
*
* @file      main.c
* @author    Gizwtis
* @version   V2.3
* @date      2015-07-06
*
* @brief     机智云 只为智能硬件而生
*            Gizwits Smart Cloud  for Smart Products
*            链接|增值|开放|中立|安全|自有|自由|生态
*            www.gizwits.com
*                                                        APP打开,会发一条CMD03查询当前的状态命令ff ff  0  6  3  9  0  0  2 14
                                                                                                                                回复[208527] MCU   : ff ff  0 10  4  9  0  0  3  0  0  0  0  0  0  0  0  0  0 20
                                                                                                                                                                                                                 ff ff  0 10  4 23  0  0  3  2 10 3c  0  0  0  0  0  0  0 88
                                                                                                                                                                 如果没有收到会等待查询很久,最后提示断开连
WIFI状态改变,会把时间信息给MCU,同时MCU打开自己的RTC进行时钟,没有网络的情况下,都能正常执行预约和定时开关

**************************************/

/* Includes ------------------------------------------------------------------*/
#include "gokit.h"
#include "rtc.h"
/*Global Variable*/

extern _calendar_obj calendar;        //日历结构体

extern Pro_W2D_GetTimeTypeDef Pro_W2D_GetTimeStruct;//获取网络时间结构体
uint16_t  time_min;//分钟计时
uint32_t  time_sec;//秒种计时
uint8_t   min_flag;//分钟到标志
uint16_t                                                                                CountDown_Minute_time;                     //定时器存的时间当前剩余时间
uint16_t                                                                                CountDown_Time_On_Minute;                        //存储定时开的时间
uint16_t                                                                                CountDown_Time_Off_Minute;                //存储定时关的时间
uint32_t ReportTimeCount = 0;  //没用到
uint8_t  gaterSensorFlag = 0;         //MCU收集外设信息标志,每隔1s被TIM3中断函数置位一次
uint8_t  Set_LedStatus = 0;                 //枚举量 方式更改等颜色,这种方式下更改IoE中颜色、或者开闭灯,无效。
uint8_t  NetConfigureFlag = 0;  //是否 打印WiFi配置结果 的标志
uint8_t  curTem = 0, curHum = 0;//DHT11数据
uint8_t  lastTem = 0,lastHum = 0;

//注意是head指向了读区域,tail指向了写区域
//typedef struct {
//    size_t rb_capacity;//缓冲区容量
//    char  *rb_head;//用于读出的指针
//    char  *rb_tail;//用于写入的指针
//    char  rb_buff[256];//缓冲区实体
//}RingBuffer;
extern RingBuffer u_ring_buff;

uint8_t p0Flag = 0;//WiFi控制设备命令,主要是CMD0X03已经下达的标志

WirteTypeDef_t        WirteTypeDef; //WiFi发来的数据                   MCU要接收 WIFI发过来的数据
ReadTypeDef_t          ReadTypeDef;        //WiFi要读取的数据     MCU要发送发给WIFI的数据 接收到的数据如果是U16以上要exchangeBytes函数转换

/**
  * @brief  Main program.
  * @param  None
  * @retval None
  */
int main(void)
{
        uint8_t p0_control_buf[MAX_P0_LEN];//存储控制命令
       
        SystemInit();        //开始初始化
        HW_Init();
        Printf_SystemRccClocks();
        SW_Init();               
        while(1)
        {
                        KEY_Handle();        //处理按键       
                        GizWits_MessageHandle(p0_control_buf, sizeof(WirteTypeDef_t));//如果是控制命令,则把控制信息 放到p0_ctl_buf中
                        if(p0Flag == 1)//控制命令已经下达标志
                        {
                                //控制信息 转存到WirteTypeDef
                                memcpy((uint8_t *)&WirteTypeDef, p0_control_buf, sizeof(WirteTypeDef_t));
                                //靠WirteTypeDef来解析控制命令,控制设备
                                GizWits_ControlDeviceHandle();
                                //GizWits_DevStatusUpgrade(uint8_t *P0_Buff, uint32_t Time, uint8_t flag)
                                GizWits_DevStatusUpgrade((uint8_t *)&ReadTypeDef, 10*60*1000, 1);//flag=1,立即汇报
                                p0Flag =0;
                        }
                        //此标志每隔1s被TIM3中断函数置位一次
                        if(gaterSensorFlag != 0)
                        {
                                if((ReadTypeDef.LED_Cmd & (1<<1)) == (1<<1))//如果打开了定时功能才进入
                                {
                                        if((ReadTypeDef.Week_Repeat & ( 1<<(calendar.week-1)))==( 1<<(calendar.week-1)))//先判断星期是否是设置的。然后判断小时,分钟
                                        {
                                                        printf("t=%d",((calendar.hour*60)+calendar.min));
                                                        if(CountDown_Time_On_Minute==((calendar.hour*60)+calendar.min))//如果设置的小时数与现在的小时数相同 16进制表示
                                                        {
                                                                LED_RGB_Control(254,0,0);//默认打开时,是红色
                                                        }
                                                        if(CountDown_Time_Off_Minute==((calendar.hour*60)+calendar.min))
                                                        {
                                                                LED_RGB_Control(0,0,0);//关灯
                                                        }
                                         }
                            }
                                        GizWits_GatherSensorData(); //没有用到
                                        gaterSensorFlag = 0;
                        }
      GizWits_DevStatusUpgrade((uint8_t *)&ReadTypeDef, 10*60*1000, 0);//更新数据等待定时上报
                        //-----------------------------{
                        if(min_flag)//如果启用了预约功能
                        {
                                min_flag=0;
                                CountDown_Minute_time--;
                                if(CountDown_Minute_time<=0)//减到0
                                {
                                                TIM_Cmd(TIM4,DISABLE);  //失能TIMx外设
                                                time_min = 0;
                                          time_sec = 0;
                                                CountDown_Minute_time = 0;
                                                if((ReadTypeDef.LED_Cmd &(1<<0))== 0)
                                                        {
                                                                LED_RGB_Control(254,0,0);//打开时,是红色
                                                                LED_ON(LED1);
                                                                ReadTypeDef.LED_Cmd |= (1<<0);//LED_OnOn a|=1<<i;//将a的bit i置1如果以前是关的,现在要开
                                                                printf("TIME LED ON \r\n");
                                                        }
                                                        else if((ReadTypeDef.LED_Cmd &(1<<0))== (1<<0))
                                                        {
                                                                ReadTypeDef.LED_Cmd &= ~(1<<0);//存储状态LED_OnOff a&=~(1<<i);//将a的bit i清0如果以前是开的,现在要关
                                                                LED_OFF(LED1);
                                                                LED_RGB_Control(0,0,0);
                                                                printf("TIME LED OFF \r\n");
                                                        }
                                                        LED_OFF(LED3);
                                                        ReadTypeDef.LED_Cmd &= ~(1<<2);//预约时间已经到了,就要关闭预约开关
                                                        GizWits_DevStatusUpgrade((uint8_t *)&ReadTypeDef, 10*60*1000, 1);
                                 }
                                ReadTypeDef.CountDown_Minute=exchangeBytes(CountDown_Minute_time);
                                GizWits_DevStatusUpgrade((uint8_t *)&ReadTypeDef, 10*60*1000, 1);
                                       
                        }
                        //-----------------------------}
        }
}
/** @addtogroup GizWits_HW_Init
  * @{
  */
void HW_Init(void)
{
        Delay_Init(72);       
        UARTx_Init();
  RGB_KEY_GPIO_Init();
        RGB_LED_Init();       
        LED_GPIO_Init();       
        KEY_GPIO_Init();
        TIM3_Int_Init(7199,9);   //ms interrupt       
        TIM4_Int_Init(10000,7199);//产生1s的定时TIM4_Int_Init(10000,7199);
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
        Motor_Init();       
        DHT11_Init();       
        IR_Init();       
        RTC_Init();                                  //RTC初始化
}
/** @addtogroup GizWits_SW_Init
  * @{
  */
void SW_Init()
{
        ReadTypeDef.LED_Cmd = 0;
        ReadTypeDef.Week_Repeat = 0;
        ReadTypeDef.Time_On_Minute = 0;  
        ReadTypeDef.Time_Off_Minute = 0;
        ReadTypeDef.CountDown_Minute = 0;
        GizWits_init(sizeof(ReadTypeDef_t));
        printf("Gokit Init Ok ...\r\n");
}
/** @addtogroup Printf_SystemRccClocks
  * @{
  */
void Printf_SystemRccClocks(void)
{
        uint8_t SYSCLKSource;

        RCC_ClocksTypeDef  SystemRCC_Clocks;
        printf("System start...\r\n");
        SYSCLKSource = RCC_GetSYSCLKSource();
        if(SYSCLKSource==0x04)
                printf("SYSCLKSource is HSE\r\n");
        else if(SYSCLKSource==0x00)
                printf("SYSCLKSource is HSI\r\n");
        else if(SYSCLKSource==0x08)
                printf("SYSCLKSource is PL!\r\n");
       
        RCC_GetClocksFreq(&SystemRCC_Clocks);
        printf("SYS clock =%dMHz \r\n",(uint32_t)SystemRCC_Clocks.SYSCLK_Frequency/1000000);
        printf("HCLK clock =%dMHz \r\n",(uint32_t)SystemRCC_Clocks.HCLK_Frequency/1000000);
        printf("PCLK1 clock =%dMHz \r\n",(uint32_t)SystemRCC_Clocks.PCLK1_Frequency/1000000);
        printf("PCLK2_clock =%dMHz \r\n",(uint32_t)SystemRCC_Clocks.PCLK2_Frequency/1000000);       
        printf("SADCCLK_Frequencyclock =%dMHz \r\n",(uint32_t)SystemRCC_Clocks.ADCCLK_Frequency/1000000);

}



0

主题

8

帖子

107

积分

注册会员

Rank: 2

积分
107
65#
发表于 2021-10-27 17:25:28 | 只看该作者
校园创客福利
jipin 发表于 2016-8-2 20:52
微信宠物屋 for GoKit 2 STM V03010100 增加了点中文注释,也不是很全。主要是机智云给出的注释太少了,机 ...

可以重发下网盘地址吗?失效了

0

主题

2

帖子

17

积分

新手上路

Rank: 1

积分
17
63#
发表于 2019-8-14 11:59:29 | 只看该作者
网盘失效  烦请楼主补一个

1

主题

7

帖子

318

积分

中级会员

Rank: 3Rank: 3

积分
318
62#
发表于 2019-5-1 02:57:49 | 只看该作者
目前我也在搞这一块,加油

3

主题

8

帖子

97

积分

注册会员

Rank: 2

积分
97
61#
发表于 2019-4-28 17:19:25 | 只看该作者
APP源码在手机上运行,进入到控制开关那页面闪退

0

主题

4

帖子

68

积分

注册会员

Rank: 2

积分
68
60#
发表于 2018-5-6 14:44:33 | 只看该作者
免费使用STM32、APP自动代码生成工具
有画好插座板子的原理图么

1

主题

7

帖子

81

积分

注册会员

Rank: 2

积分
81
59#
发表于 2018-4-27 19:18:03 | 只看该作者
jipin 发表于 2016-7-29 17:45
开发板测试数据

楼主,照着这个我硬件基本搞定了,但是软件部分,实在是不会搞,能教我一下吗?有偿

0

主题

1

帖子

6

积分

新手上路

Rank: 1

积分
6
58#
发表于 2018-4-24 09:25:37 | 只看该作者
智能插座的源码百度链接挂掉了,能再补一个嘛

2

主题

25

帖子

662

积分

高级会员

Rank: 4

积分
662
56#
发表于 2017-11-21 11:16:04 | 只看该作者
@jipin 您好!看你的帖子涨知识。很用心!帖子里给的百度网盘链接失效了, 可不可以把请您将新版“智能插座”源码和相关资料分享给我学习学习。邮箱: scsi_1@163.com。多谢了!

2

主题

25

帖子

662

积分

高级会员

Rank: 4

积分
662
55#
发表于 2017-11-20 22:55:08 | 只看该作者
注册成为机智云开发者,手机加虚拟设备快速开发
赞一个,楼主分享的提适合新手学习的,采纳了

0

主题

1

帖子

184

积分

注册会员

Rank: 2

积分
184
54#
发表于 2017-10-24 16:56:24 | 只看该作者
jipin 发表于 2016-8-2 20:52
微信宠物屋 for GoKit 2 STM V03010100 增加了点中文注释,也不是很全。主要是机智云给出的注释太少了,机 ...

楼主可以在发一次智能插座与微信宠物屋的百度云的链接吗

0

主题

3

帖子

90

积分

注册会员

Rank: 2

积分
90
53#
发表于 2017-10-6 15:48:44 | 只看该作者
强大,顶起来

2

主题

22

帖子

903

积分

高级会员

Rank: 4

积分
903
52#
发表于 2017-5-2 18:23:01 | 只看该作者
楼主,你好!能给你新版“智能插座”源码和相关资料分享一分吗?我的邮箱hydyguo@126.com

0

主题

1

帖子

94

积分

注册会员

Rank: 2

积分
94
51#
发表于 2017-5-2 15:58:40 | 只看该作者
楼主你好,可以问一下,这个电源外面的壳子有工模吗,哪里可以做这个电源壳子

0

主题

2

帖子

30

积分

新手上路

Rank: 1

积分
30
50#
发表于 2017-4-12 16:12:35 | 只看该作者
校园创客福利
WJK 发表于 2017-4-1 19:47
楼主再分享一下源代码

楼主,同上

0

主题

1

帖子

45

积分

新手上路

Rank: 1

积分
45
49#
发表于 2017-4-1 19:47:12 | 只看该作者
楼主再分享一下源代码

2

主题

23

帖子

384

积分

中级会员

Rank: 3Rank: 3

积分
384
47#
发表于 2017-2-25 16:42:53 | 只看该作者
楼主,谢谢指教,百度网盘链接失效了,

0

主题

4

帖子

70

积分

注册会员

Rank: 2

积分
70
46#
发表于 2017-1-22 14:15:51 | 只看该作者
楼主,源码失效了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

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

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