|
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
1、修復(fù)ST V2.1底板時溫濕度不規(guī)則報0的問題[bug:45027];
1、支持GoKit2.2硬件(增加RGB燈使能引腳A0)
1、采用uVision V4.70.0.0軟件
2、修改了軟件結(jié)構(gòu),封裝了串口協(xié)議部分,進(jìn)一步提升擴(kuò)展性;
3、解決了app上顯示溫度不準(zhǔn)確的問題;
4、修改了入網(wǎng)配置方法;
長按key1恢復(fù)默認(rèn)配置,短按key2進(jìn)入Soft AP模式,RGB燈紅色,長按key2進(jìn)入AirLink模式,RGB燈綠色;
5、關(guān)掉了進(jìn)入配置模式時電機(jī)轉(zhuǎn)動操作;
6、解決了APP中自定義燈顏色切換不準(zhǔn)確的問題;
7、完善了協(xié)議指令01、03、04、05指令;
8、解決了上電時RGB高亮一段時間的問題;
9、需配合最新版GAgent固件
單片機(jī)源程序如下:
- #include "gokit.h"
- int a=0;
- int b=0;
- u8 wtadd=0;
- int h;
- int q;
- int g;
- /*Global Variable*/
- uint32_t ReportTimeCount = 0;
- uint8_t gaterSensorFlag = 0;
- uint8_t Set_LedStatus = 0;
- uint8_t NetConfigureFlag = 0;
- uint8_t curTem = 0, curHum = 0;
- uint8_t lastTem = 0,lastHum = 0;
- extern RingBuffer u_ring_buff;
- uint8_t p0Flag = 0;
- WirteTypeDef_t WirteTypeDef;
- ReadTypeDef_t ReadTypeDef;
- extern uint8_t benday; //???
- extern uint8_t benDhour;//?
- extern uint8_t benminute;//?
- extern uint8_t bensecond;//?
- extern uint8_t getTime[9];
- extern uint8_t XIEDate;
- extern uint8_t XIEHour;
- extern uint8_t XIEMin;
- extern uint8_t XIEsecond;
- extern unsigned char time[7],Tmp[20],temp,Flag8563_2402;
- extern uint8_t Month;
- extern uint8_t Date;
- extern uint8_t Hour;
- extern uint8_t Min;
- extern uint8_t second;
- uint8_t CENCHU_A;
- uint8_t CENCHU_B;
- uint8_t CENCHU_C;
- uint8_t CENCHU_D;
- uint8_t ZAOSHI;
- uint8_t ZAOFEN;
- uint8_t ZHONGSHI;
- uint8_t ZHONGFEN;
- uint8_t WANSHI;
- uint8_t WANFEN;
- uint16_t cx=0, cxx=0,cxxx=0;
- /**
- * @brief Main program.
- * @param None
- * @retval None
- */
- int main(void)
- {
- uint8_t p0_control_buf[MAX_P0_LEN],frist;
- uint16_t cxx=0,cxxx=0;
- // uint8_t frist[2] ;
- SystemInit();
- HW_Init();
- Printf_SystemRccClocks();
- SW_Init();
-
- // Time_Disposal ();
- //PCF8563_set(0x10,0x07,XIEDate,XIEHour,XIEMin,XIEsecond,0x05);//,年、月、日、時、分、秒、星期。BCD碼表示
- Flag8563_2402=0;
-
- IIC_ReadBuf(0,Tmp,16);
-
- Flag8563_2402=111;
- IIC_ReadBuf(2,&frist,1);// 判斷是否第一次啟動8563
- if((frist&0x20)!=0)
- {
- PCF8563_set(0x16,0x07,0x14,XIEHour,XIEMin,XIEsecond,0x05);
- }
-
- while(1)
- {
- if(++cxxx==60000)
- {
- if(++cx>>3)
- {
- Pro_UART_SendBuf(getTime,9,1);
- Flag8563_2402=WR8563;
- PCF8563_read(time);
- Ben_AckHandle();
- printf("\r\nEEPROM: %d %d %d %d %d %d %d %d %d %d %d %d %d \r\n",Tmp[0],Tmp[1],Tmp[2],Tmp[3],Tmp[4],Tmp[5],Tmp[6],Tmp[7],Tmp[8],Tmp[9],Tmp[10],Tmp[11],Tmp[12]);
- printf("\r\nTime: %s %d %d :%d:%d\r\n","下位機(jī)--時間",benday,benDhour,benminute,bensecond);
- printf("\r\nTime: %s %d-%d %d:%d:%d \r\n","云端----時間",Month,Date,Hour,Min,second);
- }
-
- if(wtadd==0)
- {
- if((GPIO_ReadInputDataBit(GPIO_WT588BY_PORT,GPIO_Pin_1)))
- {
- Send_oneline( 0 );
- ++wtadd;
- }
- }
-
-
-
-
-
- if((Tmp[5] == benDhour && Tmp[6] == benminute&&(bensecond<5)) || (Tmp[7] == benDhour && Tmp[8] == benminute&&(bensecond<5)) || (Tmp[9] == benDhour && Tmp[10] == benminute&&(bensecond<5)))
- {
- if(benDhour==0)////bug
- {
- if(benminute==0)
- {}
- else
- luoyao(Tmp[1],Tmp[2],Tmp[3],Tmp[4]);
- }
-
- if(benDhour!=0)
- {
- if(benminute!=0)
- luoyao(Tmp[1],Tmp[2],Tmp[3],Tmp[4]);
-
- }
- }
- }
-
-
- if(cxx==1)
- {
- cxx=0;
- printf("開始寫入數(shù)據(jù)");
- Flag8563_2402=WR2402;
- Tmp[1]= CENCHU_A;Tmp[2]=CENCHU_B;Tmp[3]=CENCHU_C;Tmp[4]=CENCHU_D;
- Tmp[5]= ZAOSHI;Tmp[6]=ZAOFEN;Tmp[7]=ZHONGSHI;Tmp[8]=ZHONGFEN;
- Tmp[9]= WANSHI;Tmp[10]=WANFEN;Tmp[11]=CENCHU_C;Tmp[12]=CENCHU_D;
- IIC_WriteBuf(0,Tmp,16);
- IIC_ReadBuf(0,Tmp,16);
- printf("\r\nEEPROM: %d %d %d %d %d %d %d %d %d %d %d %d %d \r\n",Tmp[0],Tmp[1],Tmp[2],Tmp[3],Tmp[4],Tmp[5],Tmp[6],Tmp[7],Tmp[8],Tmp[9],Tmp[10],Tmp[11],Tmp[12]);
- Flag8563_2402=WR8563;
- }
-
- KEY_Handle();
- GizWits_MessageHandle(p0_control_buf, sizeof(WirteTypeDef_t));
- if(p0Flag == 1)
- {
- memcpy((uint8_t *)&WirteTypeDef, p0_control_buf, sizeof(WirteTypeDef_t));
- GizWits_ControlDeviceHandle();
- GizWits_DevStatusUpgrade((uint8_t *)&ReadTypeDef, 10*60*1000, 1);
- p0Flag =0;
- }
- if(gaterSensorFlag != 0)
- {
- GizWits_GatherSensorData();
- gaterSensorFlag = 0;
- }
- GizWits_DevStatusUpgrade((uint8_t *)&ReadTypeDef, 10*60*1000, 0);
- }
- }
- /** @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
- // Motor_Init();
- DHT11_Init();
- IR_Init();
- EXTIX_Init();
- }
- /** @addtogroup GizWits_SW_Init
- * @{
- */
- void SW_Init()
- {
- ReadTypeDef.Alert = 0;
- ReadTypeDef.LED_Cmd = 0;
- ReadTypeDef.Infrared = 0;
-
- ReadTypeDef.SetA_YAO=0;
- ReadTypeDef.SetB_YAO=0;
- ReadTypeDef.SetC_YAO=0 ;
- ReadTypeDef.SetD_YAO=0;
-
- ReadTypeDef.ZAO_SHI=0;
- ReadTypeDef.ZAO_FEN=0;
- ReadTypeDef.SetZHONG_SHI=0 ;
- ReadTypeDef.SetZHONG_FEN=0;
- ReadTypeDef.SetWAN_SHI=0;
- ReadTypeDef.SetWAN_FEN=0;
-
- ReadTypeDef.Temperature = 0;
- ReadTypeDef.Humidity = 0;
- ReadTypeDef.Alert = 0;
- ReadTypeDef.Fault = 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);
- }
- /*******************************************************************************
- * Function Name : GizWits_ControlDeviceHandle
- * Description : Analy P0 Package
- * Input : None
- * Output : None
- * Return : Bit , Attr_Flags
- * Attention :
- *******************************************************************************/
- void GizWits_ControlDeviceHandle()
- {
- if( ((WirteTypeDef.Attr_Flags>>8) & 1) == 1)
- {
- if(Set_LedStatus != 1)
- {
- if(WirteTypeDef.LED_Cmd == LED_OnOff)
- {
- printf("\r\nEEPROM: %d %d %d %d %d %d %d %d %d %d %d %d %d \r\n",Tmp[0],Tmp[1],Tmp[2],Tmp[3],Tmp[4],Tmp[5],Tmp[6],Tmp[7],Tmp[8],Tmp[9],Tmp[10],Tmp[11],Tmp[12]);
- printf("\r\nTime: %s %d %d :%d:%d\r\n","下位機(jī)--時間",benday,benDhour,benminute,bensecond);
- printf("\r\nTime: %s %d-%d %d:%d:%d \r\n","云端----時間",Month,Date,Hour,Min,second);
-
- LED_RGB_Control(0,0,0);
- ReadTypeDef.LED_Cmd = LED_OnOff;
- printf("SetLED_Off \r\n");
- }
- if(WirteTypeDef.LED_Cmd == LED_OnOn)
- {
- ReadTypeDef.LED_Cmd = LED_OnOn;
-
- Flag8563_2402=WR8563;
- cxx=1;
- Time_Disposal();
- PCF8563_set(0x10,0x07,XIEDate,XIEHour,XIEMin,XIEsecond,0x05);//設(shè)置時間,年、月、日、時、分、秒、星期。BCD碼表示
- PCF8563_read(time);
- Ben_AckHandle();
- if(cxx==1)
- {
- cxx=0;
- printf("開始寫入數(shù)據(jù)");
- Flag8563_2402=0;
- Tmp[1]= CENCHU_A;Tmp[2]=CENCHU_B;Tmp[3]=CENCHU_C;Tmp[4]=CENCHU_D;
- Tmp[5]= ZAOSHI;Tmp[6]=ZAOFEN;Tmp[7]=ZHONGSHI;Tmp[8]=ZHONGFEN;
- Tmp[9]= WANSHI;Tmp[10]=WANFEN;Tmp[11]=CENCHU_C;Tmp[12]=CENCHU_D;
- IIC_WriteBuf(0,Tmp,16);
- IIC_ReadBuf(0,Tmp,16);
- printf("\r\nEEPROM: %d %d %d %d %d %d %d %d %d %d %d %d %d \r\n",Tmp[0],Tmp[1],Tmp[2],Tmp[3],Tmp[4],Tmp[5],Tmp[6],Tmp[7],Tmp[8],Tmp[9],Tmp[10],Tmp[11],Tmp[12]);
- }
-
- printf("\r\nTime: %s %d %d :%d:%d\r\n","下位機(jī)--時間",benday,benDhour,benminute,bensecond);
- printf("\r\nTime: %s %d-%d %d:%d:%d \r\n","云端----時間",Month,Date,Hour,Min,second);
-
- ReadTypeDef.LED_Cmd = LED_OnOn;
- LED_RGB_Control(254,0,0);
- printf("SetLED_On \r\n");
- if((GPIO_ReadInputDataBit(GPIO_WT588BY_PORT,GPIO_Pin_1)))
- {
- Send_oneline(1);
- }
- }
- }
- }
- if( ((WirteTypeDef.Attr_Flags>>9) & 1) == 1)
- { printf("開始輸入A藥數(shù)據(jù)");
- ReadTypeDef.SetA_YAO= WirteTypeDef.SetA_YAO;
- CENCHU_A= WirteTypeDef.SetA_YAO;
- printf("輸入的a藥數(shù)據(jù)為%d 不要忘記寫入哦",CENCHU_A);
- }
-
-
-
-
- if( ((WirteTypeDef.Attr_Flags>>10) & 1) == 1)
- { printf("開始輸入B藥數(shù)據(jù)");
- ReadTypeDef.SetB_YAO= WirteTypeDef.SetB_YAO;
- CENCHU_B= WirteTypeDef.SetB_YAO;
-
- printf("輸入的B要數(shù)據(jù)%d 不要忘記寫入哦",CENCHU_B);
-
- }
- if( ((WirteTypeDef.Attr_Flags>>11) & 1) == 1)
- { printf("開始輸入C藥數(shù)據(jù)");
- ReadTypeDef.SetC_YAO= WirteTypeDef.SetC_YAO;
- CENCHU_C = WirteTypeDef.SetC_YAO;
-
- printf("輸入的C要數(shù)據(jù)%d 不要忘記寫入哦",CENCHU_C);
-
- }
- if( ((WirteTypeDef.Attr_Flags>>12) & 1) == 1)
- {
-
-
- ReadTypeDef.ZAO_SHI= WirteTypeDef.ZAO_SHI;
- ZAOSHI= WirteTypeDef.ZAO_SHI;
-
- printf("輸入早晨小時為%d 不要忘記寫入哦",ZAOSHI);
-
-
- }
- if( ((WirteTypeDef.Attr_Flags>>13) & 1) == 1)
- {
-
-
- ReadTypeDef.ZAO_FEN= WirteTypeDef.ZAO_FEN;
- ZAOFEN= WirteTypeDef.ZAO_FEN;
-
- printf("輸入早晨分鐘%d 不要忘記寫入哦",ZAOFEN);
-
-
- }
- if( ((WirteTypeDef.Attr_Flags>>14) & 1) == 1)
- {
-
-
- ReadTypeDef.SetZHONG_SHI= WirteTypeDef.SetZHONG_SHI;
- ZHONGSHI= WirteTypeDef.SetZHONG_SHI;
-
- printf("輸入SHANGWU時為%d 不要忘記寫入哦",ZHONGSHI);
-
-
- }
- if( ((WirteTypeDef.Attr_Flags>>15) & 1) == 1)
- {
-
-
- ReadTypeDef.SetZHONG_FEN= WirteTypeDef.SetZHONG_FEN;
- ZHONGFEN= WirteTypeDef.SetZHONG_FEN;
-
- printf("輸入SHANGWU分鐘%d 不要忘記寫入哦",ZHONGFEN);
- }
- if( ((WirteTypeDef.Attr_Flags>>0) & 1) == 1)
- {
-
-
- ReadTypeDef.SetWAN_SHI= WirteTypeDef.SetWAN_SHI;
- WANSHI= WirteTypeDef.SetWAN_SHI;
-
- printf("晚上的小時%d 不要忘記寫入哦",WANSHI);
-
-
- }
- if( ((WirteTypeDef.Attr_Flags>>1) & 1) == 1)
- {
-
-
- ReadTypeDef.SetWAN_FEN= WirteTypeDef.SetWAN_FEN;
- WANFEN= WirteTypeDef.SetWAN_FEN;
-
- printf("晚上的分鐘%d 不要忘記寫入哦",WANFEN);
-
-
- }
- if( ((WirteTypeDef.Attr_Flags>>2) & 1) == 1)
- {
-
-
- ReadTypeDef.SetD_YAO= WirteTypeDef.SetD_YAO;
- CENCHU_D= WirteTypeDef.SetD_YAO;
-
- printf("輸入D藥數(shù)據(jù)時為%d 不要忘記寫入哦",CENCHU_D);
-
-
- }
- }
復(fù)制代碼 本資料為網(wǎng)絡(luò)收集分享給大家,目測還不完善,大家繼續(xù)改進(jìn)一起完善吧,僅供參考,切勿照搬:
程序PCB原理圖.7z
(5.87 MB, 下載次數(shù): 50)
2023-4-20 18:08 上傳
點(diǎn)擊文件名下載附件
|
評分
-
查看全部評分
|