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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 9192|回復(fù): 7
收起左側(cè)

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

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

【1】例程簡(jiǎn)介
  RS232是一個(gè)國(guó)際通用標(biāo)準(zhǔn)的串行數(shù)據(jù)通信接口,用于兩個(gè)設(shè)備直接數(shù)據(jù)交換。本例程使用USART
外設(shè)功能,實(shí)現(xiàn)stm32向PC端發(fā)送數(shù)據(jù),并等待接收來著PC端的信息中斷,然后再回傳信息給PC端。
  YS_F1Pro開發(fā)板上集成一個(gè)ESP8266 WiFi模塊,只需要通過USART即可與之通信,開發(fā)板設(shè)計(jì)
通過跳線帽即可選擇USART2與之連接。
【2】跳線帽情況
******* 為保證例程正常運(yùn)行,必須插入以下跳線帽 **********
絲印編號(hào)     IO端口      目標(biāo)功能引腳        出廠默認(rèn)設(shè)置
  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】操作及現(xiàn)象
  保證JP1、JP2、JP3..JP6和CN10端子上的8個(gè)跳線帽插入正確。參考文檔
《硬石YS-F1Pro開發(fā)板軟件設(shè)計(jì)手冊(cè)(手機(jī)通過ESP8266控制開發(fā)板).pdf》。
修過本例程中main.c文件中有關(guān)WiFi賬號(hào)、密碼,以及要連接的服務(wù)器IP(自己電腦IP)和端口(8000),
編譯程序。然后使用開發(fā)板配套的MINI USB線連接到開發(fā)板標(biāo)示“調(diào)試串口”字樣的MIMI USB接口,在
電腦端打開串口調(diào)試助手工具,選擇對(duì)應(yīng)端口,設(shè)置參數(shù)為115200 8-NO-1,下載程序之后,在串口調(diào)
試助手窗口可接收到信息。等待ESP8266正確連接上網(wǎng)絡(luò)后在網(wǎng)絡(luò)調(diào)試助手接口接收到數(shù)據(jù)。
/******************* (C) COPYRIGHT 2015-2020 硬石嵌入式開發(fā)團(tuán)隊(duì) *****END OF FILE****/

0.png


單片機(jī)源程序如下:
  1. /**
  2.   ******************************************************************************
  3.   * 文件名程: main.c
  4.   * 作    者: 硬石嵌入式開發(fā)團(tuán)隊(duì)
  5.   * 版    本: V1.0
  6.   * 編寫日期: 2015-10-04
  7.   * 功    能: WiFi(ESP8266)底層驅(qū)動(dòng)實(shí)現(xiàn)
  8.   ******************************************************************************
  9.   * 說明:
  10.   * 本例程配套硬石stm32開發(fā)板YS-F1Pro使用。
  11.   * 版權(quán)歸硬石嵌入式開發(fā)團(tuán)隊(duì)所有,請(qǐng)勿商用。
  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"              //要連接的熱點(diǎn)的名稱
  26. #define User_ESP8266_ApPwd                        "yingshi123"           //要連接的熱點(diǎn)的密鑰

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

  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. /* 擴(kuò)展變量 ------------------------------------------------------------------*/
  36. extern __IO uint8_t ucTcpClosedFlag;

  37. /* 私有函數(shù)原形 --------------------------------------------------------------*/
  38. /* 函數(shù)體 --------------------------------------------------------------------*/
  39. /**
  40.   * 函數(shù)功能: 系統(tǒng)時(shí)鐘配置
  41.   * 輸入?yún)?shù): 無
  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主時(shí)鐘
  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;       // 系統(tǒng)時(shí)鐘:72MHz
  59.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;              // AHB時(shí)鐘:72MHz
  60.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;               // APB1時(shí)鐘:36MHz
  61.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;               // APB2時(shí)鐘: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);  // 配置并啟動(dòng)系統(tǒng)滴答定時(shí)器
  67.   /* 系統(tǒng)滴答定時(shí)器時(shí)鐘源 */
  68.   HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
  69.   /* 系統(tǒng)滴答定時(shí)器中斷優(yōu)先級(jí)配置 */
  70.   HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
  71. }

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

  87.   LED_GPIO_Init();
  88.   BEEP_GPIO_Init();
  89.   
  90.   /* 通用定時(shí)器初始化并配置PWM輸出功能 */
  91.   GENERAL_TIMx_Init();
  92.   /* 初始化串口并配置串口中斷優(yōu)先級(jí) */
  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.   /* 無限循環(huán) */
  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.       /*將接收到的字符串轉(zhuǎn)成整形數(shù)*/
  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)                                             //檢測(cè)是否失去連接
  154.                 {
  155.                         ESP8266_ExitUnvarnishSend();                                    //退出透?jìng)髂J?nbsp;                      
  156.                         do ucStatus = ESP8266_Get_LinkStatus();                         //獲取連接狀態(tài)
  157.                         while(!ucStatus);                       
  158.                         if(ucStatus==4)                                             //確認(rèn)失去連接后重連
  159.                         {
  160.                                 printf("正在重連熱點(diǎn)和服務(wù)器 ......\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("重連熱點(diǎn)和服務(wù)器成功!!!\n");
  164.                         }                       
  165.                         while(!ESP8266_UnvarnishSend());                                       
  166.                 }
  167.   }
  168. }

  169. /**
  170.   * 函數(shù)功能: 串口接收完成回調(diào)函數(shù)
  171.   * 輸入?yún)?shù): 無
  172.   * 返 回 值: 無
  173.   * 說    明:無
  174.   */
  175. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
  176. {
  177.   if(strEsp8266_Fram_Record.InfBit.FramLength<(RX_BUF_MAX_LEN-1))     //預(yù)留1個(gè)字節(jié)寫結(jié)束符
  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.   * 函數(shù)功能: 非阻塞模式下定時(shí)器的回調(diào)函數(shù)
  186.   * 輸入?yún)?shù): htim:定時(shí)器句柄
  187.   * 返 回 值: 無
  188.   * 說    明: 無
  189.   */
  190. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  191. {
  192.         static uint8_t period_cnt = 0;                /* 用于計(jì)算周期數(shù) */
  193.   static uint8_t PWM_data = 0;
  194.   period_cnt++;
  195.   /* 若輸出的周期數(shù)大于20,輸出下一種脈沖寬的PWM波 */
  196.   if(period_cnt >= 10)                                                                               
  197.   {
  198.     /* 根據(jù)PWM表修改定時(shí)器的比較寄存器值 */
  199.     htimx.Instance->CCR3 = PWM_data;       
  200.     //第一種情況,設(shè)定百分之十的亮度
  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.     //第二種情況,設(shè)定百分之七十的亮度
  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.     //第三種情況,在百分之七十的基礎(chǔ)上回到百分之十的亮度
  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.    /* 重置周期計(jì)數(shù)標(biāo)志 */
  246.    period_cnt=0;                                                                                       
  247.   }
  248. }


  249. /******************* (C) COPYRIGHT 2015-2020 硬石嵌入式開發(fā)團(tuán)隊(duì) *****END OF FILE****/
復(fù)制代碼

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


回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

ID:531037 發(fā)表于 2019-7-4 20:57 | 顯示全部樓層
超級(jí)超級(jí)感謝,感謝
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

ID:549902 發(fā)表于 2019-12-16 15:34 | 顯示全部樓層
請(qǐng)問這是單片機(jī)的嗎
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91在线视频精品 | 久久99深爱久久99精品 | 久久久999国产精品 中文字幕在线精品 | 国产91视频一区二区 | 国产农村妇女精品一二区 | 综合久久av | 国产ts人妖一区二区三区 | 看av在线 | 亚洲精品久久久久久一区二区 | 欧美大片在线观看 | 国产精品久久久久久久岛一牛影视 | 天堂久久一区 | 免费国产一区二区视频 | 欧美在线不卡 | 欧美在线资源 | 欧美a视频| 一区二区三区免费在线观看 | 成人精品一区二区 | 国产一区 在线视频 | 在线一区| 成人精品一区二区三区中文字幕 | 日韩欧美在线视频 | 国产精品一区二区三区四区 | www.99热.com| 免费一区二区 | 91最新在线视频 | 亚洲精品一级 | 日韩欧美专区 | 91极品尤物在线播放国产 | 国产伊人精品 | 少妇性l交大片免费一 | 特一级黄色毛片 | 亚洲性免费 | 久久电影一区 | 99福利视频 | 亚洲福利在线观看 | 日韩在线观看一区二区三区 | 日韩在线中文字幕 | 国产精品不卡一区二区三区 | 黄瓜av| 亚洲精品成人av久久 |