久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9058|回復: 7
收起左側

手機端APP通過Wifi TCP控制LED呼吸燈狀況的stm32源碼

  [復制鏈接]
ID:310893 發表于 2018-4-18 14:52 | 顯示全部樓層 |閱讀模式
keil 手機TCP控制燈光 stm32f103
/**
  ******************************************************************************
  *                           硬石YS-F1Pro開發板例程功能說明
  *
  *  例程名稱: 3. 手機端APP通過Wifi控制開發板
  *   
  ******************************************************************************
  * 說明:
  * 本例程配套硬石stm32開發板YS-F1Pro使用。
  * 版權歸硬石嵌入式開發團隊所有,請勿商用。
  ******************************************************************************
  */

【1】例程簡介
  RS232是一個國際通用標準的串行數據通信接口,用于兩個設備直接數據交換。本例程使用USART
外設功能,實現stm32向PC端發送數據,并等待接收來著PC端的信息中斷,然后再回傳信息給PC端。
  YS_F1Pro開發板上集成一個ESP8266 WiFi模塊,只需要通過USART即可與之通信,開發板設計
通過跳線帽即可選擇USART2與之連接。
【2】跳線帽情況
******* 為保證例程正常運行,必須插入以下跳線帽 **********
絲印編號     IO端口      目標功能引腳        出廠默認設置
  JP1        PA10        TXD(CH340G)          已接入
  JP2        PA9         RXD(CH340G)          已接入
  JP3        PB0           LED1               已接入
  JP4        PG6           LED2               已接入
  JP5        PG7           LED3               已接入
  JP6        PD3         DATA(AM2302)         已接入
  CN10       PA2         RXD(WIFI)            已接入
  CN10       PA3         TXD(WIFI)            已接入
  
【3】操作及現象
  保證JP1、JP2、JP3..JP6和CN10端子上的8個跳線帽插入正確。參考文檔
《硬石YS-F1Pro開發板軟件設計手冊(手機通過ESP8266控制開發板).pdf》。
修過本例程中main.c文件中有關WiFi賬號、密碼,以及要連接的服務器IP(自己電腦IP)和端口(8000),
編譯程序。然后使用開發板配套的MINI USB線連接到開發板標示“調試串口”字樣的MIMI USB接口,在
電腦端打開串口調試助手工具,選擇對應端口,設置參數為115200 8-NO-1,下載程序之后,在串口調
試助手窗口可接收到信息。等待ESP8266正確連接上網絡后在網絡調試助手接口接收到數據。
/******************* (C) COPYRIGHT 2015-2020 硬石嵌入式開發團隊 *****END OF FILE****/

0.png


單片機源程序如下:
  1. /**
  2.   ******************************************************************************
  3.   * 文件名程: main.c
  4.   * 作    者: 硬石嵌入式開發團隊
  5.   * 版    本: V1.0
  6.   * 編寫日期: 2015-10-04
  7.   * 功    能: WiFi(ESP8266)底層驅動實現
  8.   ******************************************************************************
  9.   * 說明:
  10.   * 本例程配套硬石stm32開發板YS-F1Pro使用。
  11.   * 版權歸硬石嵌入式開發團隊所有,請勿商用。
  12.   ******************************************************************************
  13.   */
  14. /* 包含頭文件 ----------------------------------------------------------------*/
  15. #include "stm32f1xx_hal.h"
  16. #include "usart/bsp_debug_usart.h"
  17. #include "ESP8266/bsp_esp8266.h"
  18. #include "beep/bsp_beep.h"
  19. #include "led/bsp_led.h"
  20. #include "stdlib.h"
  21. #include <string.h>
  22. #include "GeneralTIM/bsp_GeneralTIM.h"

  23. /* 私有類型定義 --------------------------------------------------------------*/
  24. /* 私有宏定義 ----------------------------------------------------------------*/
  25. #define User_ESP8266_ApSsid                       "yingshi"              //要連接的熱點的名稱
  26. #define User_ESP8266_ApPwd                        "yingshi123"           //要連接的熱點的密鑰

  27. #define User_ESP8266_TcpServer_IP                 "192.168.3.4"       //要連接的服務器的 IP
  28. #define User_ESP8266_TcpServer_Port                "1234"                  //要連接的服務器的端口

  29. /* 私有變量 ------------------------------------------------------------------*/
  30. static uint8_t PWM_start=0;
  31. static uint8_t First_stemp=0;
  32. static uint8_t Second_stemp=0;
  33. static uint8_t stop_stemp=0;
  34. static uint8_t Third_temp=0;
  35. /* 擴展變量 ------------------------------------------------------------------*/
  36. extern __IO uint8_t ucTcpClosedFlag;

  37. /* 私有函數原形 --------------------------------------------------------------*/
  38. /* 函數體 --------------------------------------------------------------------*/
  39. /**
  40.   * 函數功能: 系統時鐘配置
  41.   * 輸入參數: 無
  42.   * 返 回 值: 無
  43.   * 說    明: 無
  44.   */
  45. void SystemClock_Config(void)
  46. {
  47.   RCC_OscInitTypeDef RCC_OscInitStruct;
  48.   RCC_ClkInitTypeDef RCC_ClkInitStruct;

  49.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;  // 外部晶振,8MHz
  50.   RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  51.   RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
  52.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  53.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  54.   RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;  // 9倍頻,得到72MHz主時鐘
  55.   HAL_RCC_OscConfig(&RCC_OscInitStruct);

  56.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  57.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  58.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;       // 系統時鐘:72MHz
  59.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;              // AHB時鐘:72MHz
  60.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;               // APB1時鐘:36MHz
  61.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;               // APB2時鐘:72MHz
  62.   HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);

  63.         // HAL_RCC_GetHCLKFreq()/1000    1ms中斷一次
  64.         // HAL_RCC_GetHCLKFreq()/100000         10us中斷一次
  65.         // HAL_RCC_GetHCLKFreq()/1000000 1us中斷一次
  66.   HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);  // 配置并啟動系統滴答定時器
  67.   /* 系統滴答定時器時鐘源 */
  68.   HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
  69.   /* 系統滴答定時器中斷優先級配置 */
  70.   HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
  71. }

  72. /**
  73.   * 函數功能: 主函數.
  74.   * 輸入參數: 無
  75.   * 返 回 值: 無
  76.   * 說    明: 無
  77.   */
  78. int main(void)
  79. {  
  80.   uint8_t ucStatus;  
  81.   uint8_t pCH;
  82.   
  83.   /* 復位所有外設,初始化Flash接口和系統滴答定時器 */
  84.   HAL_Init();
  85.   /* 配置系統時鐘 */
  86.   SystemClock_Config();

  87.   LED_GPIO_Init();
  88.   BEEP_GPIO_Init();
  89.   
  90.   /* 通用定時器初始化并配置PWM輸出功能 */
  91.   GENERAL_TIMx_Init();
  92.   /* 初始化串口并配置串口中斷優先級 */
  93.   MX_DEBUG_USART_Init();
  94.   
  95.   ESP8266_Init();
  96.   
  97.   ESP8266_Init();
  98.   printf("正在配置 ESP8266 ......\n" );
  99.   
  100.   if(ESP8266_AT_Test())
  101.   {
  102.     printf("AT test OK\n");
  103.   }
  104.   printf("\n< 1 >\n");
  105.         if(ESP8266_Net_Mode_Choose(STA))
  106.   {
  107.     printf("ESP8266_Net_Mode_Choose OK\n");
  108.   }  
  109.   printf("\n< 2 >\n");
  110.   while(!ESP8266_JoinAP(User_ESP8266_ApSsid,User_ESP8266_ApPwd));               
  111.         printf("\n< 3 >\n");
  112.   ESP8266_Enable_MultipleId(DISABLE);       
  113.         while(!ESP8266_Link_Server(enumTCP,User_ESP8266_TcpServer_IP,User_ESP8266_TcpServer_Port,Single_ID_0));       
  114.         printf("\n< 4 >\n");
  115.   while(!ESP8266_UnvarnishSend());       
  116.         printf("配置 ESP8266 完畢\n");
  117.   __HAL_UART_ENABLE_IT(&husartx_esp8266, UART_IT_IDLE);
  118.   /* 無限循環 */
  119.   while (1)
  120.   {
  121.     ESP8266_ReceiveString(ENABLE);
  122.     if(strEsp8266_Fram_Record .InfBit .FramFinishFlag )
  123.                 {
  124.             strEsp8266_Fram_Record .Data_RX_BUF [ strEsp8266_Fram_Record .InfBit .FramLength ]  = '\0';
  125.       printf ( "\r\n%s\r\n", strEsp8266_Fram_Record .Data_RX_BUF );
  126.       /*將接收到的字符串轉成整形數*/
  127.       pCH=atoi(strEsp8266_Fram_Record .Data_RX_BUF);
  128.        switch(pCH)
  129.        {
  130.          case 0:
  131.            PWM_start=1;
  132.            First_stemp=1;
  133.            Third_temp++;
  134.          break;
  135.          case 1:
  136.            PWM_start=1;
  137.            Second_stemp=1;
  138.          break;
  139.          case 2:
  140.            PWM_start=1;
  141.            stop_stemp=1;
  142.          break;
  143.        }         
  144.     }
  145.     if(PWM_start==1)   
  146.     {
  147.       PWM_start=0;
  148.       HAL_TIM_Base_Start_IT(&htimx);
  149.       HAL_TIM_PWM_Start(&htimx,TIM_CHANNEL_3);      
  150.     }      
  151.                 HAL_Delay(100);
  152.    
  153.     if(ucTcpClosedFlag)                                             //檢測是否失去連接
  154.                 {
  155.                         ESP8266_ExitUnvarnishSend();                                    //退出透傳模式                       
  156.                         do ucStatus = ESP8266_Get_LinkStatus();                         //獲取連接狀態
  157.                         while(!ucStatus);                       
  158.                         if(ucStatus==4)                                             //確認失去連接后重連
  159.                         {
  160.                                 printf("正在重連熱點和服務器 ......\n");                               
  161.                                 while(!ESP8266_JoinAP(User_ESP8266_ApSsid,User_ESP8266_ApPwd));                               
  162.                                 while(!ESP8266_Link_Server(enumTCP,User_ESP8266_TcpServer_IP,User_ESP8266_TcpServer_Port,Single_ID_0));                               
  163.                                 printf("重連熱點和服務器成功!!!\n");
  164.                         }                       
  165.                         while(!ESP8266_UnvarnishSend());                                       
  166.                 }
  167.   }
  168. }

  169. /**
  170.   * 函數功能: 串口接收完成回調函數
  171.   * 輸入參數: 無
  172.   * 返 回 值: 無
  173.   * 說    明:無
  174.   */
  175. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
  176. {
  177.   if(strEsp8266_Fram_Record.InfBit.FramLength<(RX_BUF_MAX_LEN-1))     //預留1個字節寫結束符
  178.   {
  179.     strEsp8266_Fram_Record.Data_RX_BUF[strEsp8266_Fram_Record.InfBit.FramLength]=esp8266_rxdata;
  180.     strEsp8266_Fram_Record.InfBit.FramLength++;
  181.     HAL_UART_Receive_IT(&husartx_esp8266,&esp8266_rxdata,1);
  182.   }

  183. }

  184. /**
  185.   * 函數功能: 非阻塞模式下定時器的回調函數
  186.   * 輸入參數: htim:定時器句柄
  187.   * 返 回 值: 無
  188.   * 說    明: 無
  189.   */
  190. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  191. {
  192.         static uint8_t period_cnt = 0;                /* 用于計算周期數 */
  193.   static uint8_t PWM_data = 0;
  194.   period_cnt++;
  195.   /* 若輸出的周期數大于20,輸出下一種脈沖寬的PWM波 */
  196.   if(period_cnt >= 10)                                                                               
  197.   {
  198.     /* 根據PWM表修改定時器的比較寄存器值 */
  199.     htimx.Instance->CCR3 = PWM_data;       
  200.     //第一種情況,設定百分之十的亮度
  201.     if((First_stemp==1)&&(Third_temp==1))
  202.     {
  203.       PWM_data++;
  204.       if( PWM_data >=  255*0.1)                                                               
  205.       {
  206.         First_stemp=0;
  207.         PWM_data=255*0.1;                                                               
  208.       }      
  209.     }
  210.     //第二種情況,設定百分之七十的亮度
  211.     if(Second_stemp==1)
  212.     {
  213.       PWM_data++;     
  214.       if( PWM_data >=  255*0.7)                                                               
  215.       {
  216.         Third_temp=1;
  217.         Second_stemp=0;
  218.         PWM_data=255*0.7;                                                               
  219.       }      
  220.     }
  221.     //第三種情況,在百分之七十的基礎上回到百分之十的亮度
  222.     if((Third_temp==2)&&(First_stemp==1))
  223.     {
  224.       PWM_data--;
  225.       if( PWM_data<=  255*0.1)                                                               
  226.       {
  227.         Third_temp=0;
  228.         First_stemp=0;
  229.         PWM_data=0;
  230.         PWM_data=255*0.1;                                                               
  231.       }  
  232.     }
  233.     //第四種情況,停止顯示
  234.     if(stop_stemp==1)
  235.     {
  236.       PWM_data=0;   
  237.       if( PWM_data == 0)                                                               
  238.       {
  239.         Third_temp=0;
  240.         stop_stemp=0;
  241.         PWM_data=0;                                
  242.       }      
  243.     }
  244.    
  245.    /* 重置周期計數標志 */
  246.    period_cnt=0;                                                                                       
  247.   }
  248. }


  249. /******************* (C) COPYRIGHT 2015-2020 硬石嵌入式開發團隊 *****END OF FILE****/
復制代碼

所有資料51hei提供下載:
3. 手機端APP通過Wifi控制LED呼吸燈狀況.rar (7.43 MB, 下載次數: 138)
回復

使用道具 舉報

ID:472904 發表于 2019-1-25 17:21 | 顯示全部樓層
頂!!!!!!!!!!!!!!!!
回復

使用道具 舉報

ID:531037 發表于 2019-7-4 18:27 | 顯示全部樓層
資料很不錯,感謝大佬
回復

使用道具 舉報

ID:531037 發表于 2019-7-4 20:57 | 顯示全部樓層
超級超級感謝,感謝
回復

使用道具 舉報

ID:280466 發表于 2019-7-23 16:12 | 顯示全部樓層
App通過WiFi控制LED
回復

使用道具 舉報

ID:282095 發表于 2019-7-24 09:06 | 顯示全部樓層
想問一下如何通過wift模塊來進行控制
回復

使用道具 舉報

ID:549902 發表于 2019-12-16 15:34 | 顯示全部樓層
請問這是單片機的嗎
回復

使用道具 舉報

ID:63317 發表于 2020-5-23 19:57 | 顯示全部樓層
謝謝分享資料
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产在线观看一区二区三区 | 欧美激情一区二区三级高清视频 | 欧美日韩不卡合集视频 | 亚洲资源在线 | 日韩精品二区 | av看看| 欧美综合在线观看 | 亚洲自拍偷拍视频 | 久久毛片| 亚洲激情自拍偷拍 | 国产aa| 精品国产乱码久久久久久蜜臀 | 日本高清中文字幕 | 3p视频在线观看 | 情侣酒店偷拍一区二区在线播放 | 欧美在线视频不卡 | 久久性色 | 日韩成人免费视频 | 龙珠z在线观看 | 欧美一区免费 | 精品久久国产 | 秋霞a级毛片在线看 | 黄色网址在线免费观看 | 一级做a爰片久久毛片免费看 | 日韩免费看片 | 亚洲一av | 日韩三级免费观看 | 红色av社区 | 蜜桃av鲁一鲁一鲁一鲁 | 成人免费视频一区二区 | 81精品国产乱码久久久久久 | 国产精品精品视频一区二区三区 | 久久99精品国产 | 成人毛片一区二区三区 | 亚洲成人一二三 | 亚洲一区二区高清 | 91一区二区 | 色婷婷久久久亚洲一区二区三区 | 国产91亚洲精品一区二区三区 | 国产成人在线免费 | 天天干夜夜拍 |