日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

STM32课设-智能物联网家居系统(UCOSIII+STEMWIN)

發布時間:2023/12/16 windows 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32课设-智能物联网家居系统(UCOSIII+STEMWIN) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

工程與源代碼下載地址
Gitee:源碼點這里
Github: 源碼點這里

目錄

  • 一、功能分析與效果展示
    • 1.功能需求與分析
    • 2.硬件選型
    • 3.效果展示
      • 硬件實物圖
      • UI界面
      • 前端界面
      • 展示視頻
  • 二、下位機-STM32程序
    • 1.系統任務設計
      • 1.1 數據采集任務
      • 1.2 場景處理任務
      • 1.3 OneNet連接任務
      • 1.3 OneNet上傳數據任務
      • 1.4 OneNet下發命令處理任務
      • 1.5 UI顯示任務、觸摸檢測任務
      • 1.6 系統指示燈與堆棧檢測任務
    • 2.UI界面設計
      • 2.1主界面
      • 2.1燈光界面
      • 2.2 數據顯示界面
      • 2.3 電器控制界面
      • 2.4系統設置界面
      • 2.5 關于界面
  • 三、上位機-OneNet云端前端界面
  • 四、總結

一、功能分析與效果展示

1.功能需求與分析

  • 采集四種居家常用數據(溫度、濕度、光照強度、空氣中的可燃氣體含量)
  • 根據光照強度來控制舵機拉動床簾(模擬臥室根據日出情況來控制窗簾,智能臥室功能)
  • 根據溫度、濕度來判斷室內情況,控制電機和舵機(模擬高溫自動開窗散熱和開風扇散熱)
  • 根據空氣中的可燃氣體含量判斷室內情況,控制蜂鳴器、電機舵機(模擬煤氣泄漏報警并自動開窗和開排氣扇)
  • 制作主控的Ul界面,顯示上述的常用數據和控制家里常用電器(風扇、燈光、門窗)
  • 將上述的常用數據上傳至云端數據庫,并做出前端UI對數據進行顯示。
  • 通過手機連接云端,通過云端遠程監控家庭情況并做出控制
  • 簡單分析一下

    • 主控使用STM32,采集數據使用常規的傳感器就可以采集到這些數據。在程序中對采集回來的值做一個判斷,然后控制舵機和電機。
    • UI界面這塊,使用STEMWIN這個UI庫來做,這個庫整體使用起來比較簡單好上手,做出來的UI也OK。
    • 連網這方面使用ESP8266模塊,只要配置好串口就可以輕松駕馭。平臺基本上百度、阿里、OneNet都可以,只要支持MQTT協議接入的平臺就行。
    • 為了方便開發和項目管理,使用UCOS-III系統,將每個情況分成小任務來完成,這樣做快捷方便拓展性強

    2.硬件選型

    序號名稱數量
    1STM32F103ZET6開發板1
    24.3寸電容屏1
    3DHT11模塊1
    4MQ-2 氣體檢測模塊1
    5BH1750 光照強度檢測模塊1
    6ESP8266 WIFI 模塊1
    73.3V4路繼電器模塊1
    8L298N 驅動模塊1
    9SG90舵機2
    10電線、杜邦線若干
    1112V電機2
    1212V燈泡4

    3.效果展示

    硬件實物圖

    UI界面

    UI界面使用圖標均使用阿里圖標庫中的圖案,具體請看UI界面設計。

    前端界面

    展示視頻

    基于STM32的物聯網智能家居系統


    b站

    二、下位機-STM32程序

    整體框架圖

    硬件定時器分配:

    定時器任務
    TIM1舵機1
    TIM2L298N電機調速
    TIM3心跳包定時發送
    TIM4保存云端下發數據
    TIM8舵機2

    UCOSIII軟件定時器:蜂鳴器控制

    1.系統任務設計

    STM32中,使用UCOS-III系統,將功能分成了8個小任務分別實現。具體每個模塊如何使用網上教程很多,這里就不一一貼出,有需要可以自行搜索。詳細代碼可以參考開源連接

    1.1 數據采集任務

    將每個模塊讀取數據單獨封裝一個函數,將函數放入任務中,再將數據讀取至數組中,完畢后通過消息隊列發送到需要數據的任務。對每個模塊數據的大小要有了解,不然有可能會出現數組越界卡死的情況。考慮到居家情況,可以對數據做一個小范圍的限幅。同時在這里通過全局變量更新數據顯示界面的數據可以讓數據顯示更加流暢
    這里注意模塊讀取數據有嚴格時序,使用delay函數時,會引起任務調度,所以數據讀取函數前后需要給調度器上鎖,防止調度器打亂時序,這里的MQ-2模塊是使用ADC采集電壓與DMA傳輸數據,不受時序影響,所以就沒有加鎖

    void datacollection_task(void *p_arg) {int SensorData[5] = {0};char temp_data[7];char humi_data[7];char lux_data[25];char ppm_data[10];OS_ERR err;DHT11_Init();iic_by30_init();while(1){OSIntEnter(); //調度器加鎖 DHT11_Read_Data(&SensorData[0],&SensorData[1]);get_sunlight_value(&SensorData[2]);OSIntExit(); //調度器解鎖 MQ135_GetValue(&SensorData[3]); // 如果進入了數據顯示界面則更新數據if(windos_flag){sprintf(temp_data,"%d C",SensorData[0]);sprintf(humi_data,"%d%%",SensorData[1]);sprintf(lux_data,"%d Lux",SensorData[2]);sprintf(ppm_data,"%d PPM",SensorData[3]);TEXT_SetText(hWin_temp_Edit,temp_data);TEXT_SetText(hWin_humi_Edit,humi_data);TEXT_SetText(hWin_lux_Edit,lux_data);TEXT_SetText(hWin_ppm_Edit,ppm_data);}if(SensorData[2] >= 500)SensorData[2] = 500;/* 發送消息隊列給OneNet上傳任務 */OSQPost((OS_Q *)&SensorDataMsg, //消息變量指針(void *)SensorData, //要發送的數據的指針,將內存塊首地址通過隊列“發送出去”(OS_MSG_SIZE )30, //數據字節大小(OS_OPT )OS_OPT_POST_FIFO | OS_OPT_POST_ALL, //先進先出和發布給全部任務的形式(OS_ERR *)&err); //返回錯誤類型 //printf("已經發送信號量給上云任務!\r\n");OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_PERIODIC,&err);//延時1ms} }

    1.2 場景處理任務

    這里主要是接收采集任務發來的數據,然后根據數據的不同來控制不同的外設。簡單判斷一下即可,這里每個判斷加一個標志位與手動控制區分開,這樣就可以通過按鈕來切換自動或者手動控制外設。

    void Autocontrol_task(void *p_arg) {OS_ERR err;OS_MSG_SIZE MsgSize;while(1){int *TEXT_Buffer; TEXT_Buffer = OSQPend ((OS_Q *)&SensorDataMsg, (OS_TICK )0, (OS_OPT )OS_OPT_PEND_BLOCKING, //如果沒有獲取到信號量就等待(OS_MSG_SIZE *)&MsgSize, (CPU_TS *)0, (OS_ERR *)&err);/* TEXT_Buffer[0] = 溫度 TEXT_Buffer[1] = 濕度TEXT_Buffer[2] = 光強TEXT_Buffer[3] = 煤氣含量檢測*//**********************************場景1:出現煤氣泄漏的情況 **********************************//* 可能出現煤氣泄漏 */if(TEXT_Buffer[3] >= 300 && control_flag){printf("場景1\r\n");/* 蜂鳴器報警 */OSTmrStart(&BeepTmr,&err);/* 開窗通風 */TIM_SetCompare1(TIM8,175);/* 開排氣扇 */MotorPWM = 1;}else if(TEXT_Buffer[3] <= 300 && control_flag){/* 關閉蜂鳴器報警 */BEEP = 0;OSTmrStop(&BeepTmr,OS_OPT_TMR_NONE,0,&err);/* 關閉窗口 */TIM_SetCompare1(TIM8,195);/* 關閉排氣扇 */MotorPWM = 0; }/**********************************場景2:根據光照強度調節窗簾的開關 **********************************/if(TEXT_Buffer[2] <= 10 && control_flag){/* 到了深夜 */TIM_SetCompare1(TIM1,195);}else if(TEXT_Buffer[2] <= 30 && TEXT_Buffer[2] >= 10 && control_flag){/* 有一點光 */TIM_SetCompare1(TIM1,190); // 45度}else if(TEXT_Buffer[2] <= 120 && TEXT_Buffer[2] >= 30 && control_flag){/* 有光照 */TIM_SetCompare1(TIM1,185); // 90度}else if (TEXT_Buffer[2] <= 400 && TEXT_Buffer[2] >= 120 && control_flag){/* 日出 */TIM_SetCompare1(TIM1,175); // 180度}/**********************************場景3:根據溫度開關風扇**********************************/if(TEXT_Buffer[1] >= 30 && TEXT_Buffer[1] <= 35 && control_flag ){TIM_SetCompare2(TIM2,50);}else if(TEXT_Buffer[1] >= 35 && control_flag){TIM_SetCompare2(TIM2,100);}else if (TEXT_Buffer[1] <= 30 && control_flag) {TIM_SetCompare2(TIM2,0);}} }

    1.3 OneNet連接任務

    接下來就是要將數據發送到云端和接受云端數據了,這個可以選擇的平臺和教程也很多,這里貼幾個給大家參考,我是選擇使用電信部的OneNet平臺。
    連接OneNet平臺
    STM32連接OneNet
    大致步驟就是上網站注冊,拿到IP、端口號、產品ID、設備號、密碼。通過TCP連接到服務器之后使用MQTT協議發送報文就可以建立連接了。具體參考開源代碼
    注意OneNet是選擇多協議接入,不是選MQTT套件

    這里OneNet的IP和端口號是固定的,直接復制即可

    IP端口號
    183.230.40.396002

    產品ID:
    設備號和密碼

    在MQTT.h中填入

    #define PRODUCTKEY "183.230.40.39" //OneNetIP #define PRODUCTKEY_LEN strlen(PRODUCTKEY) #define DEVICENAME "927136809" //設備號 #define DEVICENAME_LEN strlen(DEVICENAME) //設備名長度 #define P_TOPIC_NAME "$dp" //需要發布的主題 #define PRODUCTID "503697" //產品ID #define AUTHENTICATION "123456" //密碼

    在任務中,首先初始化WIFI模塊、MQTT堆棧、OneNet連接信息等,然后與OneNet發起TCP連接,連接成功后。向OneNet發送訂閱報文,訂閱成功后,啟動定時器3,定時30S,每30S向OneNet發送一次心跳,保證我們時刻在線,同時啟動上傳數據任務和下發命令處理來上傳我們采集的數據和處理云端對下位機的控制。連接任務具體見下代碼,定時器中斷、WIFI連接代碼和TCP代碼參考開源代碼,這里就不一一貼出

    //連接OneNet任務 void connectOneNet_task(void *p_arg) {OS_ERR err;WiFi_ResetIO_Init(); //初始化WiFi的復位IOMQTT_Buff_Init(); //初始化接收,發送,命令數據的 緩沖區 以及各狀態參數OneNetIoT_Parameter_Init(); //初始化連接OneNet平臺MQTT服務器的參數 while(1) //主循環{ /*--------------------------------------------------------------------*//* Connect_flag=1同服務器建立了連接,我們可以發布數據和接收推送了 *//*--------------------------------------------------------------------*/if(Connect_flag==1){ /*-------------------------------------------------------------*//* 處理發送緩沖區數據 *//*-------------------------------------------------------------*/if(MQTT_TxDataOutPtr != MQTT_TxDataInPtr){ //if成立的話,說明發送緩沖區有數據了//3種情況可進入if//第1種:0x10 連接報文//第2種:0x82 訂閱報文,且ConnectPack_flag置位,表示連接報文成功//第3種:SubcribePack_flag置位,說明連接和訂閱均成功,其他報文可發if((MQTT_TxDataOutPtr[2]==0x10)||((MQTT_TxDataOutPtr[2]==0x82)&&(ConnectPack_flag==1))||(SubcribePack_flag==1)){ printf("發送數據:0x%x\r\n",MQTT_TxDataOutPtr[2]); //串口提示信息MQTT_TxData(MQTT_TxDataOutPtr); //發送數據MQTT_TxDataOutPtr += BUFF_UNIT; //指針下移if(MQTT_TxDataOutPtr==MQTT_TxDataEndPtr) //如果指針到緩沖區尾部了MQTT_TxDataOutPtr = MQTT_TxDataBuf[0]; //指針歸位到緩沖區開頭} }//處理發送緩沖區數據的else if分支結尾/*-------------------------------------------------------------*//* 處理接收緩沖區數據 *//*-------------------------------------------------------------*/if(MQTT_RxDataOutPtr != MQTT_RxDataInPtr){ //if成立的話,說明接收緩沖區有數據了 printf("接收到數據:");/*-----------------------------------------------------*//* 處理CONNACK報文 *//*-----------------------------------------------------*/ //if判斷,如果第一個字節是0x20,表示收到的是CONNACK報文//接著我們要判斷第4個字節,看看CONNECT報文是否成功if(MQTT_RxDataOutPtr[2]==0x20){ switch(MQTT_RxDataOutPtr[5]){ case 0x00 : printf("CONNECT報文成功\r\n"); //串口輸出信息 ConnectPack_flag = 1; //CONNECT報文成功,訂閱報文可發break; //跳出分支case 0x00 case 0x01 : printf("連接已拒絕,不支持的協議版本,準備重啟\r\n"); //串口輸出信息Connect_flag = 0; //Connect_flag置零,重啟連接break; //跳出分支case 0x01 case 0x02 : printf("連接已拒絕,不合格的客戶端標識符,準備重啟\r\n"); //串口輸出信息Connect_flag = 0; //Connect_flag置零,重啟連接break; //跳出分支case 0x02 case 0x03 : printf("連接已拒絕,服務端不可用,準備重啟\r\n"); //串口輸出信息Connect_flag = 0; //Connect_flag置零,重啟連接break; //跳出分支case 0x03case 0x04 : printf("連接已拒絕,無效的用戶名或密碼,準備重啟\r\n"); //串口輸出信息Connect_flag = 0; //Connect_flag置零,重啟連接 break; //跳出分支case 0x04case 0x05 : printf("連接已拒絕,未授權,準備重啟\r\n"); //串口輸出信息Connect_flag = 0; //Connect_flag置零,重啟連接 break; //跳出分支case 0x05 default : printf("連接已拒絕,未知狀態,準備重啟\r\n"); //串口輸出信息 Connect_flag = 0; //Connect_flag置零,重啟連接 break; //跳出分支case default }} //if判斷,第一個字節是0x90,表示收到的是SUBACK報文//接著我們要判斷訂閱回復,看看是不是成功else if(MQTT_RxDataOutPtr[2]==0x90){ switch(MQTT_RxDataOutPtr[6]){ case 0x00 :case 0x01 : printf("訂閱成功\r\n"); //串口輸出信息SubcribePack_flag = 1; //SubcribePack_flag置1,表示訂閱報文成功,其他報文可發送Ping_flag = 0; //Ping_flag清零LED1 = 0; //連接指示燈TIM3_ENABLE_30S(); //啟動30s的PING定時器OS_TaskResume(&TASK9_TCB,&err); //啟動數據上傳任務OS_TaskResume(&TASK10_TCB,&err); //啟動下發命令處理任務break; //跳出分支 default : printf("訂閱失敗,準備重啟\r\n"); //串口輸出信息 Connect_flag = 0; //Connect_flag置零,重啟連接break; //跳出分支 } }//if判斷,第一個字節是0xD0,表示收到的是PINGRESP報文else if(MQTT_RxDataOutPtr[2]==0xD0){ printf("PING報文回復\r\n"); //串口輸出信息 if(Ping_flag==1){ //如果Ping_flag=1,表示第一次發送Ping_flag = 0; //要清除Ping_flag標志}else if(Ping_flag>1){ //如果Ping_flag>1,表示是多次發送了,而且是2s間隔的快速發送Ping_flag = 0; //要清除Ping_flag標志TIM3_ENABLE_30S(); //PING定時器重回30s的時間} } //if判斷,如果第一個字節是0x30,表示收到的是服務器發來的推送數據//我們要提取控制命令else if((MQTT_RxDataOutPtr[2]==0x30)){ printf("服務器等級0推送\r\n"); //串口輸出信息 MQTT_DealPushdata_Qs0(MQTT_RxDataOutPtr); //處理等級0推送數據} MQTT_RxDataOutPtr += BUFF_UNIT; //指針下移if(MQTT_RxDataOutPtr==MQTT_RxDataEndPtr) //如果指針到緩沖區尾部了MQTT_RxDataOutPtr = MQTT_RxDataBuf[0]; //指針歸位到緩沖區開頭 }//處理接收緩沖區數據的else if分支結尾 }//Connect_flag=1的if分支的結尾/*--------------------------------------------------------------------*//* Connect_flag=0同服務器斷開了連接,我們要重啟連接服務器 *//*--------------------------------------------------------------------*/else{ printf("需要連接服務器\r\n"); //串口輸出信息TIM_Cmd(TIM4,DISABLE); //關閉TIM4 TIM_Cmd(TIM3,DISABLE); //關閉TIM3 WiFi_RxCounter=0; //WiFi接收數據量變量清零 memset(WiFi_RX_BUF,0,WiFi_RXBUFF_SIZE); //清空WiFi接收緩沖區 if(WiFi_Connect_IoTServer()==0){ //如果WiFi連接云服務器函數返回0,表示正確,進入ifprintf("建立TCP連接成功\r\n"); //串口輸出信息Connect_flag = 1; //Connect_flag置1,表示連接成功 WiFi_RxCounter=0; //WiFi接收數據量變量清零 memset(WiFi_RX_BUF,0,WiFi_RXBUFF_SIZE); //清空WiFi接收緩沖區 MQTT_Buff_ReInit(); //重新初始化發送緩沖區 } }delay_ms(100);} }

    1.3 OneNet上傳數據任務

    成功連接上OneNet后,啟動數據上傳任務,接收傳感器的數據,并將數據拼接成MQTT發布報文,發送到云端上,這里每5秒上傳一次數據,因為前端顯示那邊是5s更新一次顯示,這樣剛好可以同步更新。
    這里注意報文每個數據的拼接方式,平臺不同,拼接方式會有不同,但基本上大同小異,按使用網站的手冊修改即可

    void dataupload_task(void *p_arg) {OS_ERR err;OS_MSG_SIZE MsgSize;while(1){ char head1[3];char temp[50]; //定義一個臨時緩沖區1,不包括報頭char tempAll[150]; //定義一個臨時緩沖區2,包括所有數據int dataLen = 0; //報文長度int *TEXT_Buffer; TEXT_Buffer = OSQPend ((OS_Q *)&SensorDataMsg, (OS_TICK )0, (OS_OPT )OS_OPT_PEND_BLOCKING, //如果沒有獲取到信號量就等待(OS_MSG_SIZE *)&MsgSize, (CPU_TS *)0, (OS_ERR *)&err); //printf("已經接受到信號量!\r\n");//printf("接受到的溫:%d,濕度:%d,光:%d,空:%d\r\n",TEXT_Buffer[0],TEXT_Buffer[1],TEXT_Buffer[2],TEXT_Buffer[3]);memset(temp, 0, 50); //清空緩沖區1memset(tempAll, 0, 100); //清空緩沖區2memset(head1, 0, 3); //清空MQTT頭sprintf(temp,"{\"temperature\":\"%d\",\"humidity\":\"%d\",\"Lux\":\"%d\",\"ppm\":\"%d\"}",TEXT_Buffer[0], TEXT_Buffer[1],TEXT_Buffer[2],TEXT_Buffer[3]);//構建報文head1[0] = 0x03; //固定報頭head1[1] = 0x00; //固定報頭head1[2] = strlen(temp); //剩余長度 sprintf(tempAll, "%c%c%c%s", head1[0], head1[1], head1[2], temp);dataLen = strlen(temp) + 3;//printf("%s",tempAll);MQTT_PublishQs0(P_TOPIC_NAME,tempAll, dataLen);//添加數據,發布給服務器//printf("Seed Data OK!\r\n ");OSTimeDlyHMSM(0,0,5,0,OS_OPT_TIME_PERIODIC,&err);//延時1ms}

    1.4 OneNet下發命令處理任務

    這里檢測接收的數據是否與我們預先設定的命令相符,如果相符,則執行我們設定的動作。具體見下代碼

    /* 云端命令處理任務 */ void cmd_task(void *p_arg) {OS_ERR err;char online_cmd[20];char *cmd;unsigned char OnlinePwmControl;while(1){/* 云端指令處理 */if(MQTT_CMDOutPtr != MQTT_CMDInPtr) //if成立的話,說明命令緩沖區有數據了 { printf("命令:%s\r\n",&MQTT_CMDOutPtr[2]); //串口輸出信息/* 接收到云控制信號之后關閉自動控制模式 */control_flag = 0;/************************** 接受到控制燈的指令**************************/if(!memcmp(&MQTT_CMDOutPtr[2],LED1_ON,strlen(LED1_ON)))//判斷指令,如果是LED1_ON{ Light1 = 1;printf("已打開LED1!\r\n");}if(!memcmp(&MQTT_CMDOutPtr[2],LED1_OFF,strlen(LED1_OFF)))//判斷指令,如果是LED1_ON{ Light1 = 0;printf("已關閉LED1!\r\n");}if(!memcmp(&MQTT_CMDOutPtr[2],LED2_ON,strlen(LED2_ON)))//判斷指令,如果是LED1_ON{ Light2 = 1;printf("已打開LED2!\r\n");}if(!memcmp(&MQTT_CMDOutPtr[2],LED2_OFF,strlen(LED2_OFF)))//判斷指令,如果是LED1_ON{ Light2 = 0;printf("已關閉LED2!\r\n");}if(!memcmp(&MQTT_CMDOutPtr[2],LED3_ON,strlen(LED3_ON)))//判斷指令,如果是LED1_ON{ Light3 = 1;printf("已打開LED3!\r\n");}if(!memcmp(&MQTT_CMDOutPtr[2],LED3_OFF,strlen(LED3_OFF)))//判斷指令,如果是LED1_ON{ Light3 = 0;printf("已關閉LED3!\r\n");}if(!memcmp(&MQTT_CMDOutPtr[2],LED4_ON,strlen(LED4_ON)))//判斷指令,如果是LED1_ON{ Light4 = 1;printf("已打開LED4!\r\n");}if(!memcmp(&MQTT_CMDOutPtr[2],LED4_OFF,strlen(LED4_OFF)))//判斷指令,如果是LED1_ON{ Light4 = 0;printf("已關閉LED4!\r\n");}/************************** 接受到窗戶和排氣扇的指令 **************************/if(!memcmp(&MQTT_CMDOutPtr[2],Paiqishan_ON,strlen(Paiqishan_ON)))//判斷指令,如果是LED1_ON{ MotorPWM = 1;printf("已打開排氣扇!\r\n");}if(!memcmp(&MQTT_CMDOutPtr[2],Paiqishan_OFF,strlen(Paiqishan_OFF)))//判斷指令,如果是LED1_ON{ MotorPWM = 0;printf("已關閉排氣扇!\r\n");}if(!memcmp(&MQTT_CMDOutPtr[2],Windos_ON,strlen(Windos_ON)))//判斷指令,如果是LED1_ON{ TIM_SetCompare1(TIM8,175); // 180度;printf("已打開窗戶!\r\n");}if(!memcmp(&MQTT_CMDOutPtr[2],Windos_OFF,strlen(Windos_OFF)))//判斷指令,如果是LED1_ON{ TIM_SetCompare1(TIM8,195);printf("已關閉窗戶!\r\n");}/************************** 接受到控制電機的指令**************************/if(!memcmp(&MQTT_CMDOutPtr[2],dianji,strlen(dianji))){/* OneNet控制命令為:fangshan:控制數值 控制數值范圍為:0 - 100取出指令中的控制數值字符串并轉化為u8類型*/strcpy(online_cmd,(char*)&MQTT_CMDOutPtr[2]);cmd = &online_cmd[9];OnlinePwmControl = atoi(cmd);printf("%d",OnlinePwmControl);TIM_SetCompare2(TIM2,OnlinePwmControl);} //不做處理,后面會發送狀態else printf("未知指令\r\n"); //串口輸出信息 MQTT_CMDOutPtr += BUFF_UNIT; //指針下移if(MQTT_CMDOutPtr==MQTT_CMDEndPtr) //如果指針到緩沖區尾部了MQTT_CMDOutPtr = MQTT_CMDBuf[0]; //指針歸位到緩沖區開頭 }OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_PERIODIC,&err);//延時1ms} }

    1.5 UI顯示任務、觸摸檢測任務

    直接在循環中調用UI顯示和觸摸檢測即可

    //UI顯示任務 void emwindemo_task(void *p_arg) {while(1){Main_Ui();}} //觸摸檢測任務 void touch_task(void *p_arg) {OS_ERR err;while(1){GUI_TOUCH_Exec(); OSTimeDlyHMSM(0,0,0,5,OS_OPT_TIME_PERIODIC,&err);//延時5ms} }

    1.6 系統指示燈與堆棧檢測任務

    用指示燈閃爍來證明系統正在工作,堆棧檢測是前期做UI時,監控UI任務是否有出現爆棧的情況

    //LED心跳燈 void SystemLED_task(void *p_arg) {OS_ERR err;CPU_STK_SIZE free,used; while(1){LED0 = !LED0;OSTaskStkChk (&EmwindemoTaskTCB,&free,&used,&err); //printf("EmwindemoTaskTCB used/free:%d/%d usage:%%%d\r\n",used,free,(used*100)/(used+free));OSTimeDlyHMSM(0,0,0,500,OS_OPT_TIME_PERIODIC,&err);//延時500ms} }

    2.UI界面設計

    UI界面這邊是使用STEMWIN來制作,因為F1的RAM比較小,在顯示大量控件和圖片時會出現卡頓的情況,所以UI整體只是將基本控件放置在屏幕中,沒有做換膚和美化。

    STEMWIN這個庫,使用起來非常方便,在界面構建時,可以使用自帶的GUIBuilder來構建,在完成基本布局之后可以自動生成C代碼,在具體功能調試時,可以使用仿真文件進行仿真,功能完成之后,再移植到板子上。

    UI界面代碼中,樣式占了大多數,具體的樣式代碼就不一一貼出,這里就只貼出關鍵功能代碼,具體可以參考開源代碼

    2.1主界面

    主界面的布局如下圖所示,使用Dialog為主窗口,中間使用IconView控件,在IconView中添加5個小圖標作為5個二級界面的入口,右上角使用系統RTC來記錄時間,使用STEMWIN的軟件定時器更新到屏幕上顯示。

    這里偷了一個小賴,可以直接將圖標轉化成.c文件保存在ROM中,直接讀取顯示,中文也只是按照界面做了部分字庫。
    圖片顯示具體方式參考:STEMWIN顯示BMP
    中文顯示具體方式參考:STEMWINC字庫制作方式
    向IconView添加圖標

    ICONVIEW_hItem = WM_GetDialogItem(pMsg->hWin, ID_ICONVIEW_0);ICONVIEW_SetIconAlign(ICONVIEW_hItem, ICONVIEW_IA_TOP);ICONVIEW_AddBitmapItem(ICONVIEW_hItem,&bmdengguang,"燈光控制");ICONVIEW_AddBitmapItem(ICONVIEW_hItem,&bmdata_icon,"家庭數據");ICONVIEW_AddBitmapItem(ICONVIEW_hItem,&bmdianqi_icon,"電器控制");ICONVIEW_AddBitmapItem(ICONVIEW_hItem,&bmshezhi,"系統設置");ICONVIEW_AddBitmapItem(ICONVIEW_hItem,&bmguanyu_icon,"關于");ICONVIEW_SetFont(ICONVIEW_hItem,&GUI_Fontsongit24);

    圖標被按下

    case WM_NOTIFY_PARENT:Id = WM_GetId(pMsg->hWinSrc);NCode = pMsg->Data.v;switch(Id) {case ID_ICONVIEW_0: // Notifications sent by 'Iconview'switch(NCode) {case WM_NOTIFICATION_CLICKED:// USER START (Optionally insert code for reacting on notification message)// USER ENDbreak;case WM_NOTIFICATION_RELEASED:/* 當小圖標按下且松開時 檢測是哪個小圖標被按下 */indx = ICONVIEW_GetSel(WM_GetDialogItem(pMsg->hWin, ID_ICONVIEW_0));/* 根據按下的小圖標來切換界面 */switch(indx){/* 如果是燈光界面被按下 */case Light:GUI_EndDialog(pMsg->hWin,0);CreateLightFramewin(); break;/* 如果是關于界面被按下 */case info:GUI_EndDialog(pMsg->hWin,0);CreatehuanyinFramewin(); break;/* 如果是居家數據界面被按下 */case data:GUI_EndDialog(pMsg->hWin,0);CreateDataUi();break;/* 如果是電氣控制界面被按下 */case control:GUI_EndDialog(pMsg->hWin,0);ElectricalControl();break;/* 如果是系統配置界面被按下 */case config:GUI_EndDialog(pMsg->hWin,0);CreateConfig();break;}break;

    在創建界面時創建一個1s周期的軟件定時器

    WM_HWIN CreateFramewin(void) {WM_HWIN hWin;/* 定時器定義 */WM_HTIMER hTimer;WM_SetCreateFlags(WM_CF_MEMDEV_ON_REDRAW);hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);/* 設定定時器周期和應用窗體 */hTimer = WM_CreateTimer(WM_GetClientWindow(hWin), 0, 1000, 0);return hWin; }

    然后界面的定時器觸發中,更新RTC時間,這里的RTC庫是使用的正點原子的RTC歷程

    case WM_TIMER:sprintf(date,"%0.2d/%0.2d/%0.2d %0.2d:%0.2d:%0.2d",calendar.w_year,calendar.w_month,calendar.w_date,calendar.hour,calendar.min,calendar.sec);TEXT_SetText(WM_GetDialogItem(pMsg->hWin, ID_TEXT_1),date);WM_RestartTimer(pMsg->Data.v, 1000);break;

    2.1燈光界面

    使用Dialog為主窗體,控制使用Button控制來控制GPIO的高低電平,通過IO電平來控制繼電器的吸合從而控制12V的點燈。

    4個Button的寫法都是一樣,這里只貼出一個,其余只需要改IO口和控件號就可以

    case ID_BUTTON_0: // Notifications sent by 'Button'switch(NCode) {case WM_NOTIFICATION_CLICKED:break;case WM_NOTIFICATION_RELEASED:/* 燈光控制按鍵松開 就打開或者關閉燈 * 先讀取IO的電平信息來判斷現在燈的狀態*/LedFlag[0] = ReadLight1Status();if(!LedFlag[0]){Light1 = 1;BUTTON_SetFont(WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0), &GUI_Fonticon24);BUTTON_SetText(WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0), "關");}else{Light1 = 0;BUTTON_SetFont(WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0), &GUI_Fonticon24);BUTTON_SetText(WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0), "開");}break;}break;

    2.2 數據顯示界面

    使用Dialog為主窗體,顯示4個圖標來表示數據。
    這里的數據更新并不是在UI里面完成,而是在外面的數據采集任務中完成,進入此界面置位標志位,讓任務對這里的數據進行更新。具體可以看數據采集任務

    2.3 電器控制界面

    使用Dialog為主窗體,2Slider滑條分別控制風扇的PWM和舵機的旋轉角度,兩個Button分別控制另一個風扇和舵機旋轉角度。一個Checkbox來切換手動和自動模式的標志位,上電默認是自動模式。

    這樣做主要是考慮到在實際中,廚房排氣扇一般開就滿速,不需要做調節,同理窗戶也是只有全開和全關。

    Slider滑條控制舵機轉動

    case ID_SLIDER_1: // Notifications sent by 'Slider'switch(NCode) {case WM_NOTIFICATION_CLICKED:break;case WM_NOTIFICATION_RELEASED:break;case WM_NOTIFICATION_VALUE_CHANGED:WindosValue = 25 * SLIDER_GetValue(WM_GetDialogItem(pMsg->hWin, ID_SLIDER_1));if(WindosValue >= 0){sprintf(dis_data2,"窗簾狀態:全關");TIM_SetCompare1(TIM1,195); // 0度}if(WindosValue >= 25){sprintf(dis_data2,"窗簾狀態:1/4開");TIM_SetCompare1(TIM1,190); // 45度}if(WindosValue >= 50){sprintf(dis_data2,"窗簾狀態:半開");TIM_SetCompare1(TIM1,185); // 90度}if(WindosValue >= 75){sprintf(dis_data2,"窗簾狀態:3/4開");TIM_SetCompare1(TIM1,180); // 135度}if(WindosValue == 100){sprintf(dis_data2,"窗簾狀態:全開");TIM_SetCompare1(TIM1,175); // 180度}TEXT_SetText(WM_GetDialogItem(pMsg->hWin, ID_TEXT_1), dis_data2);break;}break;

    Slider控制風扇轉速

    case ID_SLIDER_0: // Notifications sent by 'Slider'switch(NCode) {case WM_NOTIFICATION_CLICKED:break;case WM_NOTIFICATION_RELEASED:break;case WM_NOTIFICATION_VALUE_CHANGED: dis_Value = SLIDER_GetValue(WM_GetDialogItem(pMsg->hWin, ID_SLIDER_0));TEXT_SetFont(hItem, &GUI_Fontkongzhi_font24);sprintf(fanshan_data,"風扇轉速:%d%%",dis_Value);TEXT_SetText(WM_GetDialogItem(pMsg->hWin, ID_TEXT_0), fanshan_data);TIM_SetCompare2(TIM2,dis_Value);sprintf(dis_data,"風扇轉速:%d%%",dis_Value);break;}break;

    2.4系統設置界面

    使用Dialog為主窗體,中間使用Multiedit來做多個子頁面切換的效果。這里只做了系統時間設置,可以在后續的拓展中,做WIFI信號選擇等。

    Multiedit效果就是在本身這個界面中,再添加一個其他子界面到這個頁面中,然后通過上面的橫條進行切換,但本身這個界面不能關閉或者隱藏掛起。具體使用方法可以參考官方的手冊

    時間設置主要是使用了Listwheel控制來做一個類似滑輪的效果來選擇時間。
    滑輪控制的寫法是參考了野火的教程:野火列表輪教程

    滑輪選擇核心代碼,原理參考野火的教程

    case ID_LISTWHEEL_0: // Notifications sent by 'Listwheel'switch(NCode) {case WM_NOTIFICATION_CLICKED:hItem = WM_GetDialogItem(pMsg->hWin, ID_LISTWHEEL_0);LISTWHEEL_SetTextColor(hItem, LISTWHEEL_CI_SEL, 0x191919);break;case WM_NOTIFICATION_RELEASED:break;case WM_NOTIFICATION_SEL_CHANGED:hItem = WM_GetDialogItem(pMsg->hWin, ID_LISTWHEEL_0);LISTWHEEL_SetTextColor(hItem, LISTWHEEL_CI_SEL, 0x007dfe);index1 = LISTWHEEL_GetPos(hItem);LISTWHEEL_SetSel(hItem,index1);LISTWHEEL_GetItemText(hItem,index1,Year,10);break;}break;

    2.5 關于界面

    顯示信息,沒什么好說的

    三、上位機-OneNet云端前端界面

    這里的前端是使用了OneNet自帶的大數據顯示制作

    首先在產品界面右側找到應用管理

    然后點這個
    點新建項目
    進去之后就可以在這里找到我們常用的控件了。有一些控件需要會員才能解鎖。
    當我們獲取到數據之后,就可以在前端直接拿后臺的數據來進行顯示
    具體前端操作可以參考官方手冊或者
    View 2.0控件使用
    View 2.0教程

    這里列出我的數據源和過濾器
    在新建數據源這里設備選擇你上傳數據的設備。在下面的數據流就可以選擇你上傳時候的文本了。
    比如我上傳數據時,報文是這樣

    sprintf(temp,"{\"temperature\":\"%d\",\"humidity\":\"%d\",\"Lux\":\"%d\",\"ppm\":\"%d\"}",

    那么就會有4個數據流,分別是temperature、humidity、Lux、ppm。在這里進行選擇就可以拿到單個數據了。

    溫度計過濾器

    function filter(data, rootData, variables) { data.forEach((item, index) => {x = 2 * (item.value / 100)y = item.value});return [{graphic: [{text: y +"°C"}, ],wave: [x] }] }

    儀表盤過濾器

    function filter(data, rootData, variables) { function last(arr) {var len = arr ? arr.length : 0;if (len) return arr[len - 1]; } return [{value: last(data).value, }] }

    折線圖過濾器

    function filter(data, rootData, variables){ rootData.meiqi_lfWa.forEach((item, index) => {item.x = item.update_atitem.y = item.valueitem.y1 = 250item.y2 = 200 });return rootData.meiqi_lfWa }

    按鈕和旋鈕使用就比較簡單了,只需要選擇一個數據源,然后在樣式里面就可以修改下發的命令了。貪方便可以全部控制控件都使用一個數據源來下發命令。這里的按鈕1和按鈕2就是按下和松開的狀態,命令內容里面改成和下位機匹配的命令即可。

    按鈕
    旋鈕
    注意旋扭要發送當前的數值,只能寫成{V}這個格式

    四、總結

    首先感謝大家看到這里,簡單總結一下
    這次課設的作品,總體來說做的完成度一般,沒有特別深入,做到了基本的控制、數據顯示、物聯網,整體實現了一個簡單的家居系統,系統可能還有許多BUG沒有解決,大家參考的時候酌情參考。當然這個項目后續可以拓展的點很多

    • 增加OpenMv模塊來實現人臉檢測,這部分做到門鎖中
    • 增加語音識別模塊來提供語音控制
    • 增加外紅遙控模塊來控制空調、或者其他紅外設備
    • 增加火焰傳感器來檢測火情
    • UI界面可以進行二次美化

    這是我第一次寫博客,寫的不好的地方請見諒,來都來了點個贊再走吧!

    總結

    以上是生活随笔為你收集整理的STM32课设-智能物联网家居系统(UCOSIII+STEMWIN)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    五月视频 | 国产免费视频在线 | 天天草av | 成人av免费播放 | 四虎永久精品在线 | 在线 高清 中文字幕 | 婷婷av电影 | 久久蜜臀一区二区三区av | 久久高清毛片 | 日韩专区av | 国产精品视频在线看 | 777奇米四色| 国产原创中文在线 | 欧美日本不卡 | 国产精品尤物视频 | 亚洲无在线 | 久久综合色影院 | 亚洲干视频在线观看 | 99久久婷婷国产综合精品 | 97色免费视频| 久久免费福利视频 | 天天爱天天 | 日本特黄特色aaa大片免费 | 国产999精品久久久久久 | 中文字幕在线看视频国产中文版 | 九九日九九操 | 日本久久综合网 | 日韩精品一区二区三区中文字幕 | 一区二区三区中文字幕在线 | 探花系列在线 | 黄色一级性片 | 久草观看 | 久久精品5 | 国产精品网站一区二区三区 | 六月婷婷网 | 五月天久久综合网 | 最新日韩中文字幕 | 人人插人人搞 | 日韩精品免费一线在线观看 | 精品自拍网 | www.天天干.com| www.com久久 | 日韩久久精品一区二区 | 日韩免费区 | 91污视频在线观看 | 日韩黄色大片在线观看 | av免费高清观看 | 91免费黄视频 | 男女免费av| 国产乱码精品一区二区蜜臀 | 欧美日韩国产在线 | 国产三级香港三韩国三级 | 人人干人人上 | 亚洲精品免费观看视频 | 色综合天天爱 | 在线观看久 | 国产伦精品一区二区三区无广告 | 国产精品一区二区精品视频免费看 | 激情综合一区 | 又黄又爽又刺激视频 | 免费一级片在线观看 | 午夜美女wwww| 天堂va在线观看 | 91精品影视 | 亚洲一区二区视频在线播放 | 国产福利av在线 | 国产精品高清av | 国产又粗又猛又爽 | 五月婷婷精品 | 免费在线观看av | 最新日韩视频在线观看 | 亚洲国产视频网站 | 美女视频黄是免费的 | 在线观看91久久久久久 | 在线观看视频h | 色综合久久天天 | bayu135国产精品视频 | 999视频网站 | av免费黄色 | 国产男女无遮挡猛进猛出在线观看 | 国产精品日韩欧美 | 亚洲婷婷综合色高清在线 | 色综久久| 97人人澡人人添人人爽超碰 | 亚洲国产精品女人久久久 | 在线日本看片免费人成视久网 | 国产97在线播放 | 国产日韩精品一区二区在线观看播放 | 欧美日韩视频免费 | 久久公开免费视频 | 精品亚洲免费视频 | 五月婷av | 国产精品久久久久久久久久 | 麻豆久久| 91在线精品一区二区 | 国产91精品一区二区麻豆网站 | 日韩三级视频 | 91精品在线免费观看视频 | 成人久久久久 | av不卡免费看 | 奇米网8888 | www.色就是色 | 青青啪 | 99久久99久久免费精品蜜臀 | 国内久久看 | 中文字幕在线视频第一页 | 亚洲动漫在线观看 | 最近日本中文字幕 | 精品少妇一区二区三区在线 | 激情五月婷婷 | 最近中文字幕大全中文字幕免费 | 欧美成人黄色 | 99色在线| 日韩午夜精品 | 天天综合导航 | 国产美女视频免费观看的网站 | 婷婷久久国产 | 亚洲精品乱码久久久久久蜜桃动漫 | 精品国产一区二区三区在线观看 | 久久精品波多野结衣 | 一区二区三区在线免费 | 日韩特黄av| 日本精品va在线观看 | 免费精品视频 | 九九九九九国产 | 久久欧洲视频 | 中文字幕一区在线观看视频 | 狠狠伊人| 久久这里只有精品视频99 | 免费网站黄色 | 欧美日韩国产精品一区二区亚洲 | 中文字幕欲求不满 | 日日碰狠狠添天天爽超碰97久久 | 亚洲人成影院在线 | 天天射天天做 | 日韩黄色中文字幕 | 亚洲精品成人av在线 | 四虎影视成人精品 | 美女黄频在线观看 | 国产高清在线 | 91爱在线 | 四虎天堂| 国内精品久久天天躁人人爽 | 99热最新在线 | 天天操天天射天天 | 日韩系列在线观看 | 亚洲国产97在线精品一区 | 人人爱天天操 | 亚洲成人av免费 | 91麻豆精品国产91久久久更新时间 | 91视频传媒| 亚洲一本视频 | 香蕉手机在线 | 色多视频在线观看 | 最新中文字幕视频 | 美女网站在线观看 | 欧美日韩国产一区二区三区在线观看 | 97超碰在线久草超碰在线观看 | 欧美一级片在线免费观看 | 中文字幕大全 | 中文字幕国产在线 | 久久久国产精品一区二区三区 | 日韩视频免费观看高清 | 国产69精品久久99的直播节目 | 欧美日韩高清 | 午夜精品久久久久久久99无限制 | 最近更新的中文字幕 | 日韩av三区| 国产在线免费av | 在线观看亚洲国产 | 国产成人免费高清 | 在线免费色 | 婷婷性综合| 国产麻豆精品在线观看 | 日本久久久久久久久久 | av网站手机在线观看 | 亚洲欧洲精品久久 | 99精品成人 | 日韩色视频在线观看 | 91麻豆视频网站 | 在线免费观看视频你懂的 | 天天操天天干天天 | 尤物97国产精品久久精品国产 | 亚洲精品免费在线视频 | 亚洲伦理一区 | 欧美性生交大片免网 | 久久不卡免费视频 | 成人av视屏 | 久久久 激情| 亚洲区色 | 91成人精品国产刺激国语对白 | 成人av电影免费在线播放 | 日韩欧美视频免费在线观看 | 国产黄色片免费 | 天天插一插 | 中文字幕免费高清在线观看 | 日韩免费在线观看 | 婷婷国产在线观看 | 免费福利在线观看 | 久久久久99精品成人片三人毛片 | 国产日韩欧美视频 | 成人在线视频论坛 | www.干| 日韩欧美精品一区二区三区经典 | 久久久久久激情 | 精品不卡视频 | 久久精品视频观看 | 中文字幕人成乱码在线观看 | 久草精品视频在线看网站免费 | 手机成人在线 | 成人av免费在线观看 | 欧美性一级观看 | 黄色大全免费观看 | 丝袜美女在线 | 国产青春久久久国产毛片 | 亚洲黄色片在线 | 美女黄视频免费 | 五月婷婷一区二区三区 | 国内精品久久久久久久久久久 | 久久久久久免费网 | 国产精品精 | 99综合视频 | 日韩在线免费视频 | 99精品国产成人一区二区 | 成人欧美一区二区三区黑人麻豆 | 亚洲影院国产 | 精品一区中文字幕 | 人人干免费 | 成人免费在线播放 | 国产成人精品电影久久久 | 日本黄色免费播放 | 久草精品视频 | 国产日韩在线一区 | 亚洲精品免费播放 | av在线免费观看网站 | 久操中文字幕在线观看 | 友田真希av | 在线免费观看av网站 | 激情欧美一区二区免费视频 | 久久久夜色 | 国产精品乱码久久久久久1区2区 | 国产福利一区二区在线 | 免费看的视频 | 免费看久久 | 欧美巨大荫蒂茸毛毛人妖 | 五月婷婷在线综合 | 91久久精品一区二区三区 | 黄色网在线免费观看 | 日本公乱妇视频 | 亚洲精品黄色片 | 日本三级国产 | 亚洲伊人av | 亚洲天堂网站 | 日韩美视频 | 成年人app网址 | 国产精品久久久久永久免费看 | 免费久久久久久 | 91黄色在线视频 | 亚洲激情电影在线 | 久久国产欧美日韩精品 | 久久精品中文字幕一区二区三区 | 久久国产三级 | 久久日本视频 | 国产精品美女网站 | 亚洲欧洲精品视频 | 日本久久久影视 | 亚洲精品永久免费视频 | 日韩欧美精品一区二区 | 久久成人国产 | 狠狠操.com| 亚洲我射av | 日韩精品免费一区二区在线观看 | 免费91在线 | 日产乱码一二三区别免费 | 黄色成人影视 | 999久久久免费精品国产 | 精品国产一区二区三区男人吃奶 | www.久热 | 中文字幕黄网 | 九九热只有这里有精品 | 亚洲春色成人 | 久久免费中文视频 | 日韩av不卡在线观看 | 亚洲国产中文在线 | av动图| 丁香婷婷久久久综合精品国产 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 日韩精品黄 | 国精产品999国精产品视频 | 国产精品精品 | 中文字幕在线免费观看视频 | 91精品久久久久久粉嫩 | 啪啪凸凸 | 欧美精品久 | 中文乱码视频在线观看 | 久久久免费毛片 | 免费国产ww| 免费视频黄色 | 国产精品成人自产拍在线观看 | 精品视频国产一区 | 国产999精品久久久久久麻豆 | 中文字幕在线国产 | 美女精品网站 | 91在线国内视频 | 91视频91蝌蚪 | 国产精品 日韩 欧美 | 九月婷婷综合网 | 日韩网站在线观看 | 免费久久久久久 | 免费国产在线观看 | 欧美日韩视频一区二区三区 | 成人小电影在线看 | 手机在线永久免费观看av片 | 国产精品免费观看网站 | 日本久久高清视频 | 日韩黄色免费电影 | 久久久免费少妇 | 91精品伦理 | 在线视频你懂 | 丁香激情五月 | 麻豆超碰 | 婷婷夜夜 | 日韩免费一级a毛片在线播放一级 | 国产成人黄色片 | 中文字幕一二三区 | 青草视频在线看 | 国产精品亚洲人在线观看 | 91视频免费国产 | 色婷五月天 | 99这里都是精品 | 日韩欧美一二三 | 久久成人欧美 | 69精品 | 午夜国产福利在线 | 亚洲精品h | 久久激情电影 | 欧美做受高潮电影o | 亚洲第一av在线 | 国产成人黄色在线 | 日本精品va在线观看 | 欧美一二区在线 | 婷婷激情小说网 | 不卡的av电影 | 中文字幕国产视频 | 国产一区在线观看视频 | 免费91在线观看 | 久久人人爽av | 999抗病毒口服液 | 在线不卡视频 | 99热9| 亚洲免费一级 | 久久超碰网 | 五月婷婷综合在线 | 久久久久久久久久电影 | 欧美一级免费在线 | 亚洲欧美日本一区二区三区 | 日韩av在线资源 | 亚洲乱码久久久 | 99国产精品一区二区 | 亚洲精品综合一二三区在线观看 | 日韩高清在线不卡 | 在线看片一区 | 日p视频在线观看 | 日韩电影一区二区在线观看 | 超碰在线1| 日韩亚洲国产精品 | 97超碰影视 | 亚洲午夜久久久久久久久电影网 | 国产 精品 资源 | 日韩欧美在线中文字幕 | 一区二区不卡高清 | 成人毛片100免费观看 | 在线观看成人小视频 | 99视频在线免费观看 | 精品国产视频一区 | 91porny九色在线播放 | 色综合激情久久 | 五月激情亚洲 | av高清网站在线观看 | 81精品国产乱码久久久久久 | 久久久久久久久综合 | 九九综合在线 | 亚洲一区网 | 美女中文字幕 | 日本mv大片欧洲mv大片 | 午夜国产在线 | 中文字幕人成人 | 亚洲精品国产欧美在线观看 | 69久久久| 中文字幕.av.在线 | 日韩av电影网站在线观看 | 日韩精品一区二区三区高清免费 | 成人精品99 | 国产日韩视频在线 | 色婷婷九月| 中国老女人日b | 国产精品区二区三区日本 | 国产香蕉97碰碰久久人人 | 五月天亚洲综合小说网 | 欧美日韩精品在线一区二区 | 五月天色综合 | 精品黄色在线观看 | 999久久久久久久久久久 | 国产精品久久久久久久久久新婚 | 国产裸体永久免费视频网站 | 亚洲精品乱码久久久久久蜜桃不爽 | 国产在线不卡视频 | 91精品久久久久久粉嫩 | 中文字幕在线观看av | 日韩中文字 | 五月婷婷丁香综合 | a成人v在线 | 国产欧美三级 | 久久深夜 | av免费黄色| 国产精品99页 | 日本一区二区免费在线观看 | 国产自产在线视频 | 在线观看色网站 | 一级性av | 精品美女久久久久 | 久久99热这里只有精品 | 丁香六月婷 | 二区中文字幕 | 91精品国产乱码 | 久久精品这里热有精品 | 久久人91精品久久久久久不卡 | www.玖玖玖| 91日韩精品一区 | 亚洲高清久久久 | 亚洲 欧洲 国产 日本 综合 | 黄色精品久久久 | 国产露脸91国语对白 | 亚洲va男人天堂 | 久久五月天综合 | 天天操福利视频 | 欧美在线视频一区二区 | 天天操操 | 久久人人精 | 五月天九九 | 91人人在线 | 一级片免费在线 | 亚洲精品国产精品国产 | 少妇做爰k8经典 | 96久久欧美麻豆网站 | 一区三区视频 | 国产成人精品在线 | 成人小视频在线观看免费 | 久久久91精品国产一区二区三区 | 视频在线精品 | 久日精品 | 久久国产免费视频 | 高清精品视频 | 欧美日韩精品在线观看视频 | free,性欧美 九九交易行官网 | 香蕉视频网址 | 国产精品女教师 | 精品福利网站 | 在线视频久 | 99热官网 | 久久99精品国产99久久6尤 | 97久久久免费福利网址 | 国产日产精品一区二区三区四区 | 婷婷丁香社区 | 欧美日韩a视频 | 黄色软件在线观看免费 | av网站播放 | 久久a视频 | 国产小视频在线看 | 成人xxxx | 国产亚洲精品久久网站 | 最新色视频 | 国产精品福利在线 | 在线播放国产精品 | 久久久精品一区二区 | 婷婷视频导航 | 国产一级做a爱片久久毛片a | 日韩视频一区二区三区在线播放免费观看 | 精品一区二区电影 | 国产精品手机在线观看 | 在线高清av | 国产精品久久一区二区无卡 | 精品一区二区久久久久久久网站 | 欧美日韩网站 | av一区二区三区在线播放 | 国语黄色片 | 国产精品嫩草影院9 | 国产精品久久久久久一区二区三区 | 九九久久影视 | av在线播放免费 | 亚洲japanese制服美女 | 国产精品久久久久久久久久白浆 | 久久精品视频网站 | 国产精品欧美久久 | 日韩一区视频在线 | 九九免费在线观看视频 | 99精品国产99久久久久久97 | 国产精品一区二区久久 | 欧美一二三区播放 | 国产精品国产毛片 | 91香蕉嫩草 | 亚洲男人天堂2018 | 狠狠撸电影 | 亚洲性少妇性猛交wwww乱大交 | 中文字幕电影一区 | 国产区欧美 | 免费视频一二三 | 久久九九影视网 | 天天射天天干天天插 | 天天干天天操天天 | 精品国产一区二区三区男人吃奶 | 91精品视频导航 | 五月激情电影 | 91激情| av看片在线| 天天天天爱天天躁 | 精品国产乱码 | 国产视频亚洲精品 | 国产香蕉97碰碰碰视频在线观看 | 草久在线观看 | 免费在线观看亚洲视频 | 欧美一性一交一乱 | av免费福利 | 91亚洲永久精品 | 欧美视频国产视频 | 国产一区二区不卡视频 | 天天操天天干天天操天天干 | 日韩一级网站 | 少妇性bbb搡bbb爽爽爽欧美 | 欧美一级在线看 | 免费在线观看国产黄 | 日韩69av | 亚洲天堂视频在线 | 午夜精品久久久 | 亚洲精品国产精品乱码不99热 | 国产精品入口a级 | 欧美久草视频 | 国产裸体无遮挡 | 中文字幕在线精品 | 成人免费电影 | www日韩精品 | 人人插人人做 | 日日夜夜人人精品 | 韩国精品一区二区三区六区色诱 | 久久精品导航 | 人人插人人费 | 国产福利91精品 | 亚洲成成品网站 | 亚洲 欧美 综合 在线 精品 | 日韩精品中文字幕在线观看 | 亚洲极色 | 亚洲涩涩涩涩涩涩 | 99欧美 | av福利第一导航 | 亚洲人成在线电影 | 成人av高清在线观看 | 96看片| 玖玖视频 | 精品美女在线观看 | 国产区网址 | 在线看黄色的网站 | 国产精品免费观看网站 | 国际精品久久久久 | 五月视频 | 天堂v中文 | 99高清视频有精品视频 | 在线成人国产 | 欧美一级久久久 | 欧美日韩三级 | 欧美国产大片 | 欧美一级黄色片 | 精品综合久久久 | 日本精品视频在线播放 | av网站地址| 蜜臀av性久久久久蜜臀aⅴ流畅 | 91视频免费网站 | 美女视频黄是免费的 | 久草国产视频 | 黄色一级在线免费观看 | 丝袜美腿亚洲综合 | 亚洲电影免费 | 精品视频免费播放 | japanese黑人亚洲人4k | 在线www色| 西西44人体做爰大胆视频 | 日本超碰在线 | 手机在线看a | 99久久99久久精品国产片果冰 | 欧美成人69av | 日韩av电影网站在线观看 | 国产精品毛片一区二区三区 | 亚洲aⅴ乱码精品成人区 | 91精品国产综合久久久久久久 | 女人18片毛片90分钟 | 日韩精品一区二区三区第95 | 中文字幕黄网 | 91在线区 | 草久视频在线观看 | 国产97av| 四虎影视成人精品国库在线观看 | 免费看一级一片 | 国产精品久久久久久久久久久久 | 久久久久久久久福利 | 91精彩在线视频 | 国产精品色视频 | 免费一级片视频 | 正在播放 国产精品 | 一区二区精品视频 | 九九久久精品视频 | 久一网站| 丁香5月婷婷 | 国产专区一 | 狠狠操操 | 亚洲精品高清视频 | 国产不卡片| 天天射天天舔天天干 | 国产精选在线 | 欧美一级免费在线 | 亚洲视频在线播放 | 在线午夜电影神马影院 | 国产日韩精品一区二区三区 | 中文字幕永久在线 | 久久99深爱久久99精品 | 免费看污在线观看 | 国产不卡在线观看 | 人人澡人人爽欧一区 | 欧美一区二区精品在线 | 992tv在线| 亚洲人成人在线 | 国产精品资源网 | 久久精品国产亚洲精品2020 | 久久久久欠精品国产毛片国产毛生 | 欧美黑人性爽 | 激情五月婷婷丁香 | 国产精品专区在线 | 久久久亚洲麻豆日韩精品一区三区 | 在线观看你懂的网站 | 久久99精品久久久久蜜臀 | 久久一区国产 | 亚洲免费不卡 | 久久久久久久久久亚洲精品 | 国产不卡在线观看视频 | 一区二区视频电影在线观看 | 成人黄色在线观看视频 | 99精品国产一区二区三区不卡 | 国产精品午夜在线观看 | 中文字幕亚洲精品在线观看 | 欧美激情精品久久久久久变态 | 亚洲免费婷婷 | 婷婷色在线播放 | 999久久久| 久久99久久精品国产 | 91精品国产91久久久久福利 | 不卡国产视频 | 亚洲精品视频一二三 | 国产精品一区二区免费视频 | 探花系列在线 | 欧美性猛片 | 久久视频这里只有精品 | 99免费在线观看视频 | 亚洲国产午夜精品 | 免费aa大片 | 中文字幕精品一区 | 成人h在线播放 | 欧美一级黄色网 | 91精品国产欧美一区二区成人 | 999久久a精品合区久久久 | 亚洲精品电影在线 | 色综合天天视频在线观看 | 91av在线免费看 | 日本资源中文字幕在线 | 久久免费的视频 | 欧洲高潮三级做爰 | 国产91精品一区二区麻豆网站 | 欧美一区二区在线免费观看 | 国产经典三级 | 国产视频一二区 | 国产又粗又硬又爽的视频 | 91亚洲永久精品 | 热99在线| 天天操夜夜想 | 超碰人人做 | 亚洲日本激情 | 美女视频黄频大全免费 | 久久国产精品一区二区三区四区 | 国产精品va| 中文字幕久久精品一区 | 国产一级二级在线观看 | 日批视频在线 | 午夜精品久久久久久中宇69 | 五月天婷亚洲天综合网精品偷 | 中文字幕精品三级久久久 | 成人亚洲欧美 | 久草免费在线视频观看 | 在线观看亚洲专区 | 中文字幕日本电影 | 国产精品剧情 | 亚洲一区二区三区精品在线观看 | 国产成人精品一区二 | 久久黄色精品视频 | 粉嫩av一区二区三区免费 | 四虎成人av | 97人人爽 | 欧美色图一区 | 97超碰资源网 | 99久久精品无码一区二区毛片 | a级国产乱理伦片在线观看 亚洲3级 | 日韩精品三区四区 | 久久人人爽人人人人片 | 亚洲欧洲精品一区二区精品久久久 | 成人在线免费视频观看 | 成人一区二区三区在线观看 | 激情亚洲综合在线 | 人人爱人人做人人爽 | 国产精品视频一二三 | 搡bbbb搡bbb视频 | 久久免费精品国产 | 国产69精品久久99不卡的观看体验 | 欧美激情精品久久久久久 | 色丁香色婷婷 | 国产日韩av在线 | 国产手机视频精品 | 亚洲精品视频在线播放 | 日韩av偷拍| 日韩在线一二三区 | 国产一区二区三区高清播放 | 国产精品免费观看网站 | 六月丁香在线视频 | 久久综合久久综合这里只有精品 | 永久免费精品视频 | 国产精品久久久久永久免费观看 | 国产高h视频 | 成年人电影免费在线观看 | 婷婷色综合色 | 中文字幕亚洲欧美日韩2019 | 欧美日韩一区久久 | 嫩草91影院| 国产精品黄色在线观看 | 国产黄视频在线观看 | 99色视频 | 国产中文字幕视频在线 | 天天插伊人 | 色婷婷激情四射 | 色婷婷久久久综合中文字幕 | 免费av视屏| 91中文在线 | 亚洲伊人天堂 | 天天干天天操天天拍 | 天天操天天射天天舔 | 久久国产99 | 最近中文字幕高清字幕免费mv | 国产aaa毛片| 一本色道久久综合亚洲二区三区 | 国色天香第二季 | 91天堂在线观看 | 久久国产精品影片 | 美女黄视频免费看 | 国产精品6 | 丁香婷婷基地 | 少妇bbb搡bbbb搡bbbb′ | 91资源在线视频 | 亚洲精品久久久久久久蜜桃 | 伊人小视频 | 成人黄在线观看 | 国产成人中文字幕 | 精品一区电影 | 97超视频 | 中文字幕国产精品一区二区 | av资源网在线播放 | 久久精品小视频 | 久久精品亚洲一区二区三区观看模式 | 亚洲成av人片在线观看香蕉 | 久久精品久久精品久久精品 | 免费毛片aaaaaa | 伊香蕉大综综综合久久啪 | 国产精品免费看久久久8精臀av | 看国产黄色大片 | 久久手机免费视频 | 在线观看av免费 | 国产午夜精品理论片在线 | 日韩精品首页 | 麻豆激情电影 | 亚洲伊人网在线观看 | 91亚洲综合 | 国产日韩精品在线观看 | 婷婷五情天综123 | 日本久久中文 | 日韩精品资源 | 欧美性大战久久久久 | 久久久国产精品一区二区中文 | 国产精品久久久久久麻豆一区 | 中文视频在线看 | 精品一区电影 | 人人舔人人插 | 日韩视频免费看 | 中文字幕日本在线 | 开心激情五月网 | 国产色视频网站 | 国产精品91一区 | 亚洲波多野结衣 | 日韩欧美一区二区三区视频 | 欧美日韩中字 | 欧美精彩视频在线观看 | 色综合久久久久久久久五月 | 天天av综合网 | 黄色三级免费片 | 亚洲国产三级在线观看 | 三级黄色理论片 | 菠萝菠萝在线精品视频 | 一区二区伦理电影 | 成人av电影免费观看 | 91av观看 | 亚洲一区二区视频 | 国产精品完整版 | 欧美成人999| 91亚洲精品乱码久久久久久蜜桃 | 最近在线中文字幕 | 成人h视频在线 | 国产麻豆视频在线观看 | 久久国产一二区 | 国产精品成人品 | 夜夜爽天天爽 | 免费观看91视频 | 一区二区三区在线视频观看58 | 亚洲精品综合欧美二区变态 | 狠狠色网 | 香蕉视频久久久 | 免费网站黄 | 处女av在线 | 婷婷在线不卡 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 国产免费三级在线观看 | 五月天六月丁香 | 国产精品国产三级国产aⅴ9色 | 欧美成人理伦片 | 西西www4444大胆视频 | 成人免费看视频 | 午夜久久影视 | 午夜精品麻豆 | 精品中文字幕在线播放 | 欧美日韩在线播放一区 | 欧美伦理电影一区二区 | 不卡电影免费在线播放一区 | 超碰人人超 | 色综合久久88色综合天天 | av黄色亚洲| 久久综合色天天久久综合图片 | 久久综合干 | 国模一区二区三区四区 | 精品一区精品二区 | www.五月婷婷 | 久久久久久久福利 | 成人av在线直播 | 欧美日韩国产一区二区在线观看 | 久久精品视频一 | 在线观av | 日本最新一区二区三区 | 免费在线国产 | 欧美aⅴ在线观看 | 97av免费视频| 国产黄在线 | 国产一区二区高清 | 成人a在线观看高清电影 | 麻花豆传媒一二三产区 | 中文字幕乱码电影 | 免费看v片 | 久久在线免费 | 综合铜03 | 在线看中文字幕 | 国产视频2 | 91成人天堂久久成人 | 亚洲激情电影在线 | 久av在线| 在线播放国产精品 | 欧美一级免费片 | 中文字幕在线观看一区二区三区 | 色www免费视频 | 成人免费视频观看 | 91欧美国产 | 国产精品涩涩屋www在线观看 | 亚洲精品一区二区三区新线路 | 五月视频| 久久精品91视频 | 欧美 亚洲 另类 激情 另类 | 一区二区三区不卡在线 | 久草在线视频新 | 伊人丁香| 婷婷伊人五月 | 国产视频在线观看一区 | 婷婷草 | 97福利| 久久久国产一区二区三区四区小说 | 亚洲人人网 | 中文字幕人成不卡一区 | 一级免费黄色 | 99精品99 | 成人av资源 | 天天色草 | 免费看片网站91 | 久久五月精品 | 日韩欧美精品在线视频 | 最新婷婷色 | 色综合天天综合 | 99精品亚洲| 国产色综合天天综合网 | 在线亚洲观看 | 日韩一区二区三区在线观看 | 成全免费观看视频 | 亚洲波多野结衣 | 在线观看免费一级片 | 国产日韩精品一区二区在线观看播放 | 久久久精品成人 | 91免费高清视频 | 色综合久久综合网 | 99热最新在线 | 亚洲更新最快 | 久久中文字幕视频 | 亚洲最新视频在线播放 | 久久免费成人 | 免费看黄网站在线 | av网站手机在线观看 | 超碰在线人 | 在线观看免费一级片 | 最近中文字幕在线中文高清版 | 国产色女人 | 91在线免费公开视频 | 蜜臀久久99精品久久久无需会员 | 丁香六月天| 久射网| 国产又黄又硬又爽 | 韩国一区视频 | 色妞色视频一区二区三区四区 | 久久在线免费观看视频 | 99婷婷狠狠成为人免费视频 | 亚洲国产一二三 | 国产亚洲视频在线 | 国产淫a| 一区二区av | 99国产一区二区三精品乱码 | 极品久久久 | 国产91丝袜在线播放动漫 | 日韩av中文在线观看 | 欧美在线18| 亚洲aⅴ在线 | 天天干天天干天天射 | 狠狠色狠狠色综合日日92 | 精品欧美一区二区精品久久 | 国产成人精品久久亚洲高清不卡 | 99视频国产在线 | 欧美一区日韩精品 | 欧美日韩成人一区 | 91视频专区| 草莓视频在线观看免费观看 | 国产夫妻性生活自拍 | 欧美久久久久久久久久久 | 久久九九视频 | 国产精品视频地址 | 黄色aaa级片 | 视频1区2区 | 久久久久久久久久久久久影院 | 99精品国产一区二区三区不卡 | www.色午夜,com | 国产伦理精品一区二区 | 99免费在线视频观看 | 91精品国产一区二区三区 | 国产精品久久久久久久久费观看 | 五月开心网 | 精品国产欧美一区二区三区不卡 | av一本久道久久波多野结衣 | 国产伦理一区二区三区 | 国产精品三级视频 | 欧美精品乱码久久久久久 | 国产91免费在线观看 | 日韩专区 在线 | 日韩大片在线免费观看 | 黄污网 | av网站在线免费观看 | 日韩在线观看中文字幕 | 天天干天天摸天天操 | 人人干干人人 | 成人小电影在线看 | 成人天堂网 | 狠狠色狠狠色 | 中文字幕亚洲国产 | 国产日韩欧美在线观看 | 99视频在线播放 | 91女神的呻吟细腰翘臀美女 | 欧美成人猛片 | av片无限看| 亚洲天天在线日亚洲洲精 | 久久国产精品99久久人人澡 | 激情网婷婷 | 麻豆av电影| 91成人蝌蚪| 国产精品综合久久 | 久久五月婷婷丁香 | 免费不卡中文字幕视频 | 国产一区久久久 |