国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

STM32-連接wifi模塊(esp8266)

這篇具有很好參考價值的文章主要介紹了STM32-連接wifi模塊(esp8266)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

1. ESP8266模塊介紹

1.1. 系統(tǒng)結構圖

1.2. 功能介紹

?1.3. AT指令說明

?2. STM32連接ESP8266

3. ESP8266示例

3.1. ESP8266透傳模式

?3.2. ESP8266上傳數據例程


1. ESP8266模塊介紹

1.1. 系統(tǒng)結構圖

樂鑫智能互聯(lián)平臺——ESP8266 擁有高性能無線 SOC,是一個完整且自成體系的 WiFi 網絡解決方案,能夠獨立運行,也可以作為 slave 搭載于其他 Host 運行。

裝有ESP8266的系統(tǒng)表現(xiàn)出來的領先特征有:節(jié)能VoIP在睡眠/喚醒模式之間的快速切換、配合低功率操作的自適應無線電偏置、前端信號的處理功能、故障排除和無線電系統(tǒng)共存特性為消除蜂窩/藍牙/DDR/LVDS/LCD干擾。

?stm32wifi模塊,STM32驅動,stm32,單片機,嵌入式硬件

?管腳定義:

stm32wifi模塊,STM32驅動,stm32,單片機,嵌入式硬件

stm32wifi模塊,STM32驅動,stm32,單片機,嵌入式硬件

stm32wifi模塊,STM32驅動,stm32,單片機,嵌入式硬件

1.2. 功能介紹

ESP8266 支持 softAP 模式,station 模式,softAP + station 共存模式三種。
利用 ESP8266 可以實現(xiàn)十分靈活的組網方式和網絡拓撲。
注,
SoftAP:即無線接入點,是一個無線網絡的中心節(jié)點。通常使用的無線路
由器就是一個無線接入點。
Station:即無線終端,是一個無線網絡的終端端。?

提供三種省電模式:

stm32wifi模塊,STM32驅動,stm32,單片機,嵌入式硬件

?1.3. AT指令說明

AT指令分類:?

stm32wifi模塊,STM32驅動,stm32,單片機,嵌入式硬件

指令集:

stm32wifi模塊,STM32驅動,stm32,單片機,嵌入式硬件

?2. STM32連接ESP8266

用STM32F103的USART3(PB10、PB11)連接ESP8266的URXD、UTXD,PB8連接CH-PD,PB9連接RST。

3. ESP8266示例

3.1. ESP8266透傳模式

打開CubeMX, 配置USART1和USART3,并且NVIC處Enable打√,USART1用于與電腦的串口調試助手連接,USART3用于與ESP8266的串口連接:

stm32wifi模塊,STM32驅動,stm32,單片機,嵌入式硬件

在main.c定義變量,并且配置非阻塞接收:

//main.c:

uint8_t revData[100];
uint8_t esp8266RevData[200];
int main(void)
{
	HAL_UARTEx_ReceiveToIdle_IT(&huart1, revData, 100);
	HAL_UARTEx_ReceiveToIdle_IT(&huart3, esp8266RevData, 200);
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

在usart.c文件中重寫HAL_UARTEx_RxEventCallback函數:

//usart.c:

#include <stdio.h>

extern uint8_t revData[100];
extern uint8_t esp8266RevData[200];

/* USER CODE BEGIN 1 */
int fputc(int ch,FILE *f)
{
	HAL_UART_Transmit(&huart1,(uint8_t *)&ch,1,1000);
	return ch;
}


void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{

	if(huart->Instance==USART1)
	{
//		HAL_UART_Transmit(&huart1,revData,Size,10);
		HAL_UART_Transmit(&huart3,revData,Size,10);	
		
		while(HAL_UARTEx_ReceiveToIdle_IT(&huart1, revData, 100) != HAL_OK);
	}
	else if(huart->Instance==USART3)
	{
		HAL_UART_Transmit(&huart1,esp8266RevData,Size,10);	
		while(HAL_UARTEx_ReceiveToIdle_IT(&huart3, esp8266RevData, 200) != HAL_OK);
	}
}


/* USER CODE END 1 */

編譯并且燒錄至單片機,可以看到串口助手輸入指令后正確的得到反饋:

stm32wifi模塊,STM32驅動,stm32,單片機,嵌入式硬件

?3.2. ESP8266上傳數據例程

新增接收數據大小的變量:

//usart.c
uint16_t *esp8266Size;

void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{

	if(huart->Instance==USART1)
	{
//		HAL_UART_Transmit(&huart1,revData,Size,10);
		HAL_UART_Transmit(&huart3,revData,Size,10);	
		
		while(HAL_UARTEx_ReceiveToIdle_IT(&huart1, revData, 100) != HAL_OK);
	}
	else if(huart->Instance==USART3)
	{
		HAL_UART_Transmit(&huart1,esp8266RevData,Size,10);	
		esp8266Size=&Size;
		while(HAL_UARTEx_ReceiveToIdle_IT(&huart3, esp8266RevData, 200) != HAL_OK);
	}
}

編寫wifi AT指令的操作函數:

//usart.c

/*
 * 函數名:cmdAT
 * 描述  :對WF-ESP8266模塊發(fā)送AT指令
 * 輸入  :cmdData,待發(fā)送的指令
 *         expReturn1,expReturn2,期待的響應,為NULL表不需響應,兩者為或邏輯關系
 * 返回  : 1,指令發(fā)送成功
 *         0,指令發(fā)送失敗
 * 調用  :被外部調用
 */
_Bool cmdAT(char *cmdData,char *expReturn1,char *expReturn2)
{
	char cmdDataTmp[40];
	sprintf(cmdDataTmp,"%s\r\n",cmdData);
	HAL_UART_Transmit(&huart3,(uint8_t *)cmdDataTmp,strlen(cmdDataTmp),10);	
//	printf("cmdDataTmp:%s\r\nlenth:%d",cmdDataTmp,sizeof((char *)cmdDataTmp)/sizeof(char));
	if(expReturn1==NULL && expReturn2==NULL)
		return 1;
	HAL_Delay(100);
	uint8_t count=0;
	if(esp8266Size==0 || count<40)
	{
		HAL_Delay(200);
		count++;
	}
	esp8266RevData[*esp8266Size]='\0';
	esp8266Size=0;
	if(expReturn2!=NULL)
		return (((_Bool)strstr((const char *)esp8266RevData,expReturn1))||((_Bool)strstr((const char *)esp8266RevData,expReturn2)));
	else
		return ((_Bool)strstr((const char *)esp8266RevData,expReturn1));
}

_Bool testAT( void )
{
	char count=0;

//	ESP8266_RST_H;	
  printf("\r\n測試AT啟動\r\n");
	HAL_Delay ( 100 );
	while ( count < 5 )
	{
    printf("\r\n第%d次嘗試連接AT\r\n", count);
		if( cmdAT ( "AT", "OK",NULL) )
    {
      printf("\r\nAT成功啟動\r\n");
      return 1;
    }
		ESP8266_RST_L;
		HAL_Delay(500);
		ESP8266_RST_H;
		HAL_Delay(1000);
		++ count;
	}
  return 0;
}

_Bool ESP8266_DHCP_CUR (void)
{
	return cmdAT( "AT+CWDHCP_CUR=1,1", "OK",NULL);
}

/*
 * 函數名:ESP8266_Net_Mode_Choose
 * 描述  :選擇WF-ESP8266模塊的工作模式
 * 輸入  :enumMode,工作模式
 * 返回  : 1,選擇成功
 *         0,選擇失敗
 * 調用  :被外部調用
 */
_Bool ESP8266_Net_Mode_Choose ( ENUM_Net_ModeTypeDef enumMode )
{
	switch ( enumMode )
	{
		case STA:
			return cmdAT ( "AT+CWMODE=1", "OK",NULL); 
		
	  case AP:
		  return cmdAT ( "AT+CWMODE=2", "OK",NULL); 
		
		case STA_AP:
		  return cmdAT ( "AT+CWMODE=3", "OK",NULL); 
		
	  default:
		  return 0;
  }
	
}

/*
 * 函數名:ESP8266_JoinAP
 * 描述  :WF-ESP8266模塊連接外部WiFi
 * 輸入  :pSSID,WiFi名稱字符串
 *       :pPassWord,WiFi密碼字符串
 * 返回  : 1,連接成功
 *         0,連接失敗
 * 調用  :被外部調用
 */
_Bool ESP8266_JoinAP ( char * pSSID, char * pPassWord )
{
	char cCmd [120];

	sprintf ( cCmd, "AT+CWJAP=\"%s\",\"%s\"", pSSID, pPassWord );
	
	return cmdAT ( cCmd, "OK",NULL);
	
}

/*
 * 函數名:ESP8266_Enable_MultipleId
 * 描述  :WF-ESP8266模塊啟動多連接
 * 輸入  :enumEnUnvarnishTx,配置是否多連接
 * 返回  : 1,配置成功
 *         0,配置失敗
 * 調用  :被外部調用
 */
_Bool ESP8266_Enable_MultipleId ( FunctionalState enumEnUnvarnishTx )
{
	char cStr [20];
	
	sprintf ( cStr, "AT+CIPMUX=%d", ( enumEnUnvarnishTx ? 1 : 0 ) );
	
	return cmdAT ( cStr, "OK",NULL);
	
}

/*
 * 函數名:ESP8266_Link_Server
 * 描述  :WF-ESP8266模塊連接外部服務器
 * 輸入  :enumE,網絡協(xié)議
 *       :ip,服務器IP字符串
 *       :ComNum,服務器端口字符串
 *       :id,模塊連接服務器的ID
 * 返回  : 1,連接成功
 *         0,連接失敗
 * 調用  :被外部調用
 */
_Bool ESP8266_Link_Server ( ENUM_NetPro_TypeDef enumE, char * ip, char * ComNum, ENUM_ID_NO_TypeDef id)
{
	char cStr [100] = { 0 }, cCmd [120];

  switch (  enumE )
  {
		case enumTCP:
		  sprintf ( cStr, "\"%s\",\"%s\",%s", "TCP", ip, ComNum );
		  break;
		
		case enumUDP:
		  sprintf ( cStr, "\"%s\",\"%s\",%s", "UDP", ip, ComNum );
		  break;
		
		default:
			break;
  }

  if ( id < 5 )
    sprintf ( cCmd, "AT+CIPSTART=%d,%s", id, cStr);

  else
	  sprintf ( cCmd, "AT+CIPSTART=%s", cStr );

	return cmdAT ( cCmd, "OK","ALREADY CONNECTED");
	
}

/*
 * 函數名:ESP8266_UnvarnishSend
 * 描述  :配置WF-ESP8266模塊進入透傳發(fā)送
 * 輸入  :無
 * 返回  : 1,配置成功
 *         0,配置失敗
 * 調用  :被外部調用
 */
_Bool ESP8266_UnvarnishSend ( void )
{
	if ( ! cmdAT ( "AT+CIPMODE=1", "OK", NULL ) )
		return 0;
	
	return 
	  cmdAT ( "AT+CIPSEND", "OK", ">" );
	
}

在usart.h配置宏定義和函數聲明:

/* USER CODE BEGIN Private defines */
typedef enum{
	STA,
  AP,
  STA_AP  
} ENUM_Net_ModeTypeDef;

typedef enum{
	 enumTCP,
	 enumUDP,
} ENUM_NetPro_TypeDef;
	

typedef enum{
	Multiple_ID_0 = 0,
	Multiple_ID_1 = 1,
	Multiple_ID_2 = 2,
	Multiple_ID_3 = 3,
	Multiple_ID_4 = 4,
	Single_ID_0 = 5,
} ENUM_ID_NO_TypeDef;
	
/* USER CODE END Private defines */

void MX_USART1_UART_Init(void);
void MX_USART3_UART_Init(void);

/* USER CODE BEGIN Prototypes */
_Bool cmdAT(char *cmdData,char *expReturn1,char *expReturn2);
_Bool testAT( void );
_Bool ESP8266_DHCP_CUR (void);
_Bool ESP8266_Net_Mode_Choose ( ENUM_Net_ModeTypeDef enumMode );
_Bool ESP8266_JoinAP ( char * pSSID, char * pPassWord );
_Bool ESP8266_Enable_MultipleId ( FunctionalState enumEnUnvarnishTx );
_Bool ESP8266_Link_Server ( ENUM_NetPro_TypeDef enumE, char * ip, char * ComNum, ENUM_ID_NO_TypeDef id);
_Bool ESP8266_UnvarnishSend ( void );

/* USER CODE END Prototypes */

編寫初始化函數:

//esp8266_test.h

#ifndef __ESP8266_TEST_H__
#define __ESP8266_TEST_H__

#ifdef __cplusplus
extern "C" {
#endif

#define WIFI_SSID                "nomi"                //要連接的熱點的名稱
#define WIFI_PASSWORD            "fdhgtdhrt"           //要連接的熱點的密鑰

#define SERVER_IP                "192.168.64.74"      //要連接的服務器的 IP
#define SERVER_PORT              "8000"               //要連接的服務器的端口


void initEsp8266(void);

#ifdef __cplusplus
}
#endif

#endif /* __ESP8266_TEST_H__ */
//esp8266_test.c

#include "esp8266_test.h"
#include <stdio.h>
#include "usart.h"

void initEsp8266(void)
{
	printf("\r\n開始測試AT啟動:\r\n");
	if(testAT()==0)
	{
		printf("AT連接不上!");
		return;
	}
	
	printf("\r\n設置DHCP獲?。篭r\n");
	_Bool dhcpreturn=ESP8266_DHCP_CUR();
	printf("testdhcpreturn:%d",dhcpreturn);
	if(ESP8266_DHCP_CUR()==0)
	{
		printf("設置DHCP獲取失敗!\r\n");
	}
	printf("\r\n選擇WF-ESP8266模塊的工作模式為STA:\r\n");
	if(ESP8266_Net_Mode_Choose(STA)==0)
	{
		printf("選擇WF-ESP8266模塊的工作模式失敗!\r\n");
	}
	printf("\r\n連接WiFi:\r\n");
	if(ESP8266_JoinAP (WIFI_SSID,WIFI_PASSWORD)==0)
	{
		printf("WiFi連接不上!\r\n");
		return;
	}
	printf("\r\nESP8266模塊啟動單連接:\r\n");
	if(ESP8266_Enable_MultipleId (DISABLE)==0)
	{
		printf("ESP8266模塊啟動單連接失??!\r\n");
		return;
	}
	
	HAL_Delay(2000);
	printf("\r\n連接外部服務器:\r\n");
	while(ESP8266_Link_Server (enumTCP,SERVER_IP,SERVER_PORT,Single_ID_0)==0)
	{
		printf("服務器連接不上!\r\n");
		HAL_Delay(1000);
	}
	printf("\r\n進入透傳發(fā)送:\r\n");
	if(ESP8266_UnvarnishSend()==0)
	{
		printf("進入透傳發(fā)送失??!\r\n");
		return;
	}
	
	printf( "\r\n配置 ESP8266 完畢\r\n" );
	printf ( "\r\n開始透傳......\r\n" );
  
}

在main.c寫初始化測試語句:

//main.c

	HAL_UARTEx_ReceiveToIdle_IT(&huart1, revData, 100);
	HAL_UARTEx_ReceiveToIdle_IT(&huart3, esp8266RevData, 200);
	HAL_Delay(1000);
	initEsp8266();
	HAL_Delay(100);
	HAL_UART_Transmit(&huart3,(uint8_t *)"wendu",5,10);

網絡助手打開監(jiān)聽模式。

運行程序,在串口助手中看到提示正常:

stm32wifi模塊,STM32驅動,stm32,單片機,嵌入式硬件

網絡助手正常收到消息:

stm32wifi模塊,STM32驅動,stm32,單片機,嵌入式硬件?

?文章來源地址http://www.zghlxwxcb.cn/news/detail-792792.html

到了這里,關于STM32-連接wifi模塊(esp8266)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 基于stm32 ESP8266WiFi模塊的基本通信

    基于stm32 ESP8266WiFi模塊的基本通信

    本篇涉及到的模塊與工具為: 1. ATK-ESP8266wifi模塊 2. USB-UART模塊 3. 串口調試助手 提取鏈接:https://pan.baidu.com/s/17xRlpnjp8j-VvyD2VDxNXw?pwd=ufms 提取碼:ufms 4. 網絡調試助手 提取鏈接:https://pan.baidu.com/s/10spxZmwMGI70USlzkOzdxg?pwd=fmxe 提取碼:fmxe 程序源碼提取連接放置文章底部,需者自提

    2024年02月02日
    瀏覽(29)
  • stm32 的 ESP8266 wifi 模塊 (ESP - 12s) 的使用

    stm32 的 ESP8266 wifi 模塊 (ESP - 12s) 的使用

    1. ESP8266 的器件介紹 2. ESP2866外設? 的引腳? 3. 我所用的的ESP2866 的引腳圖 4. 代碼 編程的串口 5.wifi 的指令 1.?AT? ? ?測試指令 2.?AT+RST? ?重啟模塊 3.?AT+GMR??查看版本信息 4.?AT+RESTORE???恢復出廠設置 5.??AT+UART=115200,8,1,0,0? ?串口設置? 串口號, 數據位, 停止位,? 6.?

    2024年02月02日
    瀏覽(27)
  • STM32+esp8266實現(xiàn)單片機與服務器的WiFi通信

    STM32+esp8266實現(xiàn)單片機與服務器的WiFi通信

    ? ? ? ? ?源碼已上傳至gitee: stm32: 一些stm32模塊使用經驗記錄 - Gitee.com https://gitee.com/lrf1125962926/stm32/tree/esp8266wifi%E9%80%9A%E4%BF%A1/ ????????本實驗采用STM32F1系列+esp8266 01s模塊,采用HAL庫開發(fā)。主控芯片哪個系列和型號都可以,只要有兩個串口(UART或者USART,以下統(tǒng)稱串口)

    2024年02月07日
    瀏覽(96)
  • 猿創(chuàng)征文 | 【STM32】ESP8266 wifi模塊創(chuàng)建阿里云產品

    猿創(chuàng)征文 | 【STM32】ESP8266 wifi模塊創(chuàng)建阿里云產品

    ??博客主頁:@丘比特懲罰陸 ??歡迎關注:點贊收藏?留言? ??系列專欄:嵌入式、web前端、筆記專欄 ?? 加入社區(qū): 灌水樂園 ??人生格言:選對方向,每走一步都是進步! ??歡迎大佬指正,一起學習!一起加油! ?? 希望大家能小手一動,幫忙點個贊! ??資源郵箱

    2023年04月18日
    瀏覽(20)
  • STM32--ESP8266物聯(lián)網WIFI模塊(貝殼物聯(lián))--遠程無線控制點燈

    STM32--ESP8266物聯(lián)網WIFI模塊(貝殼物聯(lián))--遠程無線控制點燈

    本文適用于STM32F103C8T6等MCU,其他MCU可以移植,完整資源見文末鏈接 一、簡介 隨著移動物聯(lián)網的發(fā)展,各場景下對于物聯(lián)控制、數據上傳、遠程控制的訴求也越來越多,基于此樂鑫科技推出了便宜好用性價比極高的wifi物聯(lián)模塊——ESP8266,話不多少我們先來看看這個神奇的模

    2024年02月08日
    瀏覽(25)
  • STM32通過esp8266連接WiFi接入MQTT服務器

    STM32通過esp8266連接WiFi接入MQTT服務器

    上文我們講到如何搭建本地MQTT服務器http://t.csdn.cn/aHNcO,現(xiàn)在介紹如何通過stm32連接MQTT 一.首先我們初始化esp8266這里我們使用的是USART4與其通信代碼如下 二.通過數據間隔時間來判斷是否是一串數據如果間隔時間大于30ms則判定為不是一串數據,接收緩沖器清零。 代碼如下!

    2024年02月07日
    瀏覽(36)
  • STM32f103增加ESP8266模塊,通過Wifi用手機TCP服務端遠程與STM32通信

    STM32f103增加ESP8266模塊,通過Wifi用手機TCP服務端遠程與STM32通信

    提示:esp8266開啟透傳模式,連上路由器Wifi(電腦熱點),接入STM32串口引腳。另外手機TCP服務端是手機IP地址+串口號(大于8000滴) 最近對ESP8266模塊進行小了解,知道只要對8266通過串口發(fā)送AT指令進行配置其工作模式,就能夠通過手機調試APP創(chuàng)建什么TCP/UDP服務端/客戶端和8266進行

    2024年02月16日
    瀏覽(27)
  • STM32玩轉物聯(lián)網實戰(zhàn)篇:2.ESP8266 WIFI模塊TCP通信示例詳解

    STM32玩轉物聯(lián)網實戰(zhàn)篇:2.ESP8266 WIFI模塊TCP通信示例詳解

    開發(fā)板功能區(qū)分布圖 開發(fā)板俯視圖 ????ESP8266 WIFI模塊內置TCP/IP網絡協(xié)議,模塊支持三種網絡模式,AP、STA和AP+STA模式,AP模式:模塊作為WIFI熱點,等待其他設備的連接,進行局域網的通信,STA模式:模塊作為客戶端通過路由器連接外網,和服務器進行通信,AP+STA模式:兩

    2024年02月03日
    瀏覽(16)
  • 【STM32】ESP8266 WiFi模塊實時上報溫濕度及控制LED燈項目筆記

    【STM32】ESP8266 WiFi模塊實時上報溫濕度及控制LED燈項目筆記

    本項目無線通訊模塊使用的是WiFi模塊ESP8266,樂鑫公司推出的高性能、低功耗串口WiFi模塊ESP8266應該是使用最廣泛的一種WIFI模塊之一了,它自身帶有高性能的MCU(Microcontroller Unit),因此它既可以通過串口連接為外部MCU提供 WiFi通信功能,也就是我們本項目所用到的功能;當然

    2024年01月21日
    瀏覽(38)
  • STM32驅動ESP8266連接阿里云(1)----使用AT指令連接阿里云

    STM32驅動ESP8266連接阿里云(1)----使用AT指令連接阿里云

    購買的ESP8266一般沒帶MQTT固件,所以無法通過MQTT指令與云平臺通信,需要燒錄固件。 MQTT固件可以在安信可科技進行下載。 交流qun:6_15061293。 https://docs.espressif.com/projects/esp-at/zh_CN/release-v2.2.0.0_esp8266/index.html 下載器可以使用樂鑫官方的下載器。 https://www.espressif.com.cn/zh-hans/s

    2024年02月03日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包