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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4679|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

基于STM32執(zhí)行的MQTT協(xié)議 源程序與資料下載

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
自己根據(jù)MQTT協(xié)議報(bào)文在STM32上成功運(yùn)行。

單片機(jī)源程序如下:
  1. /* USER CODE END Header */

  2. /* Includes ------------------------------------------------------------------*/
  3. #include "main.h"
  4. #include "tim.h"
  5. #include "usart.h"
  6. #include "gpio.h"

  7. /* Private includes ----------------------------------------------------------*/
  8. /* USER CODE BEGIN Includes */

  9. #include "string.h"
  10. #include "xianshispi.h"
  11. #include "MQTT_8266.H"

  12. /* USER CODE END Includes */

  13. /* Private typedef -----------------------------------------------------------*/
  14. /* USER CODE BEGIN PTD */

  15. /* USER CODE END PTD */

  16. /* Private define ------------------------------------------------------------*/
  17. /* USER CODE BEGIN PD */

  18. /* 大于printf重定向 */
  19. uint8_t USART1_TX_BUF[200];
  20. #define u1_printf(...)  HAL_UART_Transmit(&huart1,USART1_TX_BUF,sprintf((char *)USART1_TX_BUF,__VA_ARGS__),0xffff)
  21.                                                                                                                                                                        
  22. uint8_t USART2_TX_BUF[200];
  23. #define u2_printf(...)  HAL_UART_Transmit(&huart2,USART2_TX_BUF,sprintf((char *)USART2_TX_BUF,__VA_ARGS__),0xffff)

  24. /* esp8266加入的WIFI(熱點(diǎn))名稱和密碼 */
  25. #define WIFI_Name         "EnHahaha7"
  26. #define WIFI_Key                "hjj1234567890"

  27. /* USER CODE END PD */

  28. /* Private macro -------------------------------------------------------------*/
  29. /* USER CODE BEGIN PM */

  30. /* USER CODE END PM */

  31. /* Private variables ---------------------------------------------------------*/

  32. /* USER CODE BEGIN PV */

  33. uint8_t Uart2_RX_Buf,WIFI_IP[15];
  34. uint8_t num,Buf[150],time;
  35. extern uint8_t Connect_Flag;
  36. extern uint16_t MQTT_PING_Time;                        //PING報(bào)文計(jì)數(shù)變量
  37. uint8_t PING_Flag;

  38. /* USER CODE END PV */

  39. /* Private function prototypes -----------------------------------------------*/
  40. void SystemClock_Config(void);
  41. /* USER CODE BEGIN PFP */

  42. /* 連接WIFI程序 */
  43. void ESP_Connect_WIFI()
  44. {
  45.         char *Start;
  46.         char *End;
  47.         u1_printf("正在連接WIFI...\r\n");
  48.        
  49.         u2_printf("AT\r\n");                                                                                                                                                                                //測試AT啟動(dòng)
  50.         HAL_Delay(300);
  51.         u2_printf("AT+CWMODE=1\r\n");                                                                                                                                                //設(shè)置esp8266 STA模式
  52.         HAL_Delay(300);
  53.         u2_printf("AT+CWJAP_CUR=\"%s\",\"%s\"\r\n",WIFI_Name,WIFI_Key);        //臨時(shí)接入WIFI(熱點(diǎn))
  54.         HAL_Delay(11000);
  55.         u2_printf("AT+CIFSR\r\n");                                                                                                                                                        //獲取IP地址
  56.         HAL_Delay(300);
  57.        
  58.         if(strstr((char *)Buf,"\"") != NULL)                                //軟檢測到IP地址,OLED顯示IP地址
  59.         {
  60.                 //顯示IP地址
  61.                 OLED_ShowString(0,0,"IP:",1);       
  62.                 Start = strstr((char *)Buf,"\"") + 1;
  63.                 End = strstr(Start,"\"");
  64.                 memcpy(WIFI_IP,Start,End - Start);
  65.                 WIFI_IP[End - Start] = '\0';
  66.                 OLED_ShowString(0,2,WIFI_IP,1);
  67.                
  68.                 //串口1打印熱點(diǎn)名、IP地址
  69.                 u1_printf("WIFI Name:%s\nWIFI IP:%s\r\n",WIFI_Name,WIFI_IP);
  70.         }
  71.         else u1_printf("WIFI連接失敗");
  72. }
  73.                                                                                                                                                                        
  74. /* USER CODE END PFP */

  75. /* Private user code ---------------------------------------------------------*/
  76. /* USER CODE BEGIN 0 */

  77. /* USER CODE END 0 */

  78. /**
  79.   * @brief  The application entry point.
  80.   * @retval int
  81.   */
  82. int main(void)
  83. {
  84.   /* USER CODE BEGIN 1 */
  85.        
  86.   /* USER CODE END 1 */

  87.   /* MCU Configuration--------------------------------------------------------*/

  88.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  89.   HAL_Init();

  90.   /* USER CODE BEGIN Init */

  91.   /* USER CODE END Init */

  92.   /* Configure the system clock */
  93.   SystemClock_Config();

  94.   /* USER CODE BEGIN SysInit */

  95.   /* USER CODE END SysInit */

  96.   /* Initialize all configured peripherals */
  97.   MX_GPIO_Init();
  98.   MX_USART1_UART_Init();
  99.   MX_USART2_UART_Init();
  100.   MX_TIM1_Init();
  101.   /* USER CODE BEGIN 2 */

  102.         HAL_UART_Receive_IT(&huart2,&Uart2_RX_Buf,1);        //開啟串口2接收中斷
  103.         HAL_TIM_Base_Start_IT(&htim1);                                                                //開啟T1中斷

  104.   /* USER CODE END 2 */

  105.   /* Infinite loop */
  106.   /* USER CODE BEGIN WHILE */
  107.         OLED_Init();                                //OLED初始化
  108.        
  109.         ESP_Connect_WIFI();        //ESP8266連接WIFI,并顯示在OLED
  110.        
  111.         Connect_Sever();                //TCP連接服務(wù)器
  112.         MQTT_Conect();                        //連接云平臺(tái)
  113.        
  114.         MQTT_SUBSCRIBE();                //訂閱主題

  115. //        MQTT_PUBLISH("HJJ");                        //發(fā)送消息
  116.   while (1)
  117.   {
  118.                 if(PING_Flag == 1)
  119.                 {
  120.                         PING_Flag=0;
  121.                         MQTT_PING();                        //發(fā)送心跳包
  122.                 }
  123.     /* USER CODE END WHILE */

  124.     /* USER CODE BEGIN 3 */
  125.   }
  126.   /* USER CODE END 3 */
  127. }

  128. /**
  129.   * @brief System Clock Configuration
  130.   * @retval None
  131.   */
  132. void SystemClock_Config(void)
  133. {
  134.   RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  135.   RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  136.   /**Initializes the CPU, AHB and APB busses clocks
  137.   */
  138.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  139.   RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  140.   RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  141.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  142.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI_DIV2;
  143.   RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL16;
  144.   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  145.   {
  146.     Error_Handler();
  147.   }
  148.   /**Initializes the CPU, AHB and APB busses clocks
  149.   */
  150.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  151.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  152.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  153.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  154.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  155.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  156.   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  157.   {
  158.     Error_Handler();
  159.   }
  160. }

  161. /* USER CODE BEGIN 4 */

  162. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)//串口接收中斷回調(diào)函數(shù)
  163. {
  164.         if(huart == &huart2)
  165.         {
  166.                 HAL_UART_Receive_IT(&huart2,&Uart2_RX_Buf,1);//開啟串口2接收中斷
  167.                 Buf[num] = Uart2_RX_Buf;//將串口2接收到的數(shù)據(jù)存入Buf緩存區(qū)
  168.                 num++;time=0;
  169.         }
  170. }

  171. //uint8_t i;
  172. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)//定時(shí)器中斷回調(diào)函數(shù)
  173. {
  174.         time++;
  175.         if(time>=20 && num>0)
  176.         {
  177.                 Buf[num] = '\0';
  178.                 MQTT_RxData((char *)Buf,num);                //判斷串口2接收到的數(shù)據(jù)
  179. //                for(i=0;i<num;i++) u1_printf("%c",Buf[i]);                                //串口1打印串口2接收的數(shù)據(jù)
  180.                 time=0;num=0;
  181.         }
  182.        
  183.         if(Connect_Flag == 1)        //只有在連接了云平臺(tái)且訂閱了主題才需要發(fā)送PING報(bào)文
  184.         {
  185.                 MQTT_PING_Time++;                //每隔10S發(fā)送一次心跳包,防止服務(wù)器將客戶端踢走
  186.                 if(MQTT_PING_Time >= 40000)
  187.                 {
  188.                         PING_Flag=1;
  189.                         MQTT_PING_Time=0;
  190.                 }       
  191.         }
  192. }

  193. /* USER CODE END 4 */

  194. /**
  195. ……………………

  196. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
MQTT_Demo.7z (4.18 MB, 下載次數(shù): 122)


評分

參與人數(shù) 2黑幣 +56 收起 理由
ag26259 + 6 感謝分享
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏8 分享淘帖 頂 踩1
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:764088 發(fā)表于 2020-7-6 14:59 | 只看該作者
感恩 樓主,謝了,收藏
回復(fù)

使用道具 舉報(bào)

板凳
ID:294886 發(fā)表于 2024-9-2 09:26 | 只看該作者
謝謝分享,最近在用mqtt,剛好有用
回復(fù)

使用道具 舉報(bào)

地板
ID:1131980 發(fā)表于 2024-9-14 15:15 | 只看該作者
使用8266 MQTT
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 免费精品| 成人av一区二区三区 | 久久国产精品色av免费观看 | 精品成人佐山爱一区二区 | 欧美一级大片免费看 | 三级黄视频在线观看 | 久久国产一区二区 | 91偷拍精品一区二区三区 | 国产黄色大片网站 | 无人区国产成人久久三区 | 91精品国产一区二区 | 中文字幕国产精品视频 | 日韩精品一区二区三区中文字幕 | 91精品国产乱码久久蜜臀 | 亚洲一区二区三区在线视频 | 国产传媒在线播放 | 亚洲综合小视频 | 国产精品久久久久久久久久久久久 | 日韩在线精品视频 | 91色在线 | 欧美日韩视频在线第一区 | 三级成人在线观看 | 欧美一卡二卡在线 | 国产亚洲精品精品国产亚洲综合 | 九九视频在线观看 | 可以免费看的毛片 | 在线视频三区 | 亚洲一区中文字幕在线观看 | 亚欧精品一区 | 亚洲国产一区二区三区, | 91精品一区二区三区久久久久久 | 欧美一级免费看 | xxxxx黄色片 欧美一区免费 | 99精品国产一区二区三区 | 午夜在线 | 亚洲 中文 欧美 日韩 在线观看 | 亚洲一区二区三区久久 | 免费视频一区二区三区在线观看 | 国内精品久久久久久影视8 最新黄色在线观看 | 亚洲在线 | 国产99免费 |