在物聯網時代,esp8266模塊作為一款價格便宜、功能強大的Wi-Fi模塊,被廣泛應用於智能家居、智能工業、物聯網等領域。而stm32則作為一款強大的32位微控制器也在物聯網領域擁有廣泛應用。在實際應用中,esp8266與stm32的通信非常重要,通過這篇文章將會詳細講解esp8266與stm32通信的實現方法。
一、基礎概念
1.1 esp8266模塊
esp8266模塊是一款由中國樂鑫公司開發的Wi-Fi芯片,它不僅僅作為一款Wi-Fi芯片,還集成了一個32位Tensilica處理器。它提供了完整的TCP/IP協議棧,能夠與其他模塊或者設備進行數據交互。它的安裝非常方便,只需要一個外部晶振和一些常見的低成本被動元件就可以工作。它支持STA/AP/AP+STA三種運行模式,還支持多路鏈接。
1.2 stm32微控制器
stm32是ST公司面向嵌入式應用市場推出的一系列高性能、低功耗微控制器,它基於ARM Cortex-M內核,提供了不同尺寸和性能級別的產品定位。它廣泛應用於工業控制、汽車電子、醫療儀器等領域。它具有豐富的外設、低功耗、高性價比等特點。
二、esp8266與stm32通信協議
2.1 esp8266與stm32串口通信
esp8266與stm32之間的最簡單的通信協議就是串口通信。串口通信是一種常見的通信方式,利用串口可以將數字信號轉換成一定波特率的串行信號進行數據傳輸。在實際應用中發現,這種通信方式的穩定性和可靠性非常高。在進行串口通信時,主要需要注意波特率的選取和數據頭的配置,esp8266和stm32需要設置相同的波特率和數據頭才能成功傳輸數據。
/*STM32串口配置*/
UART_HandleTypeDef huart1;
huart1.Instance = USART1;
huart1.Init.BaudRate = 9600;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
HAL_UART_Init(&huart1);
/*ESP8266串口配置*/
#define Esp8266Usart huart1
#define Esp8266Send(s) HAL_UART_Transmit(&Esp8266Usart, s, strlen(s), 0x8fff);
#define Esp8266Wait(n) HAL_Delay(n)
2.2 esp8266與stm32 SPI通信
SPI通信是一種全雙工、串行傳輸的通信方式,它採用主從模式,主機通過片選信號控制從機的選中和解選中。SPI通信具有傳輸速度快、數據傳輸可靠等特點。
/*stm32SPI配置*/
SPI_HandleTypeDef hspi1;
hspi1.Instance = SPI1;
hspi1.Init.Mode = SPI_MODE_MASTER;
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi1.Init.NSS = SPI_NSS_SOFT;
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi1.Init.CRCPolynomial = 7;
HAL_SPI_Init(&hspi1);
/*ESP8266 SPI配置*/
#define Esp8266Spi hspi1
#define Esp8266CsLow() HAL_GPIO_WritePin(SPI1_CS_GPIO_Port, SPI1_CS_Pin, GPIO_PIN_RESET);
#define Esp8266CsHigh() HAL_GPIO_WritePin(SPI1_CS_GPIO_Port, SPI1_CS_Pin, GPIO_PIN_SET);
三、esp8266與stm32通信實現
3.1 esp8266與stm32通過串口通信實現
在這種方式下,stm32作為主控,利用串口與esp8266進行通信。下面的代碼實現了在stm32上開啟一個wifi熱點,利用esp8266模塊連接,並將接收到的字符串打印出來。
void wifi_init(void)
{
char buf[300];
memset(buf,0,300);
sprintf(buf,"AT+RST\r\n"); //模塊複位
Esp8266Send(buf);
Esp8266Wait(500);
memset(buf,0,300);
sprintf(buf,"AT+CWMODE=2\r\n"); //設置為AP模式
Esp8266Send(buf);
Esp8266Wait(500);
memset(buf,0,300);
sprintf(buf,"AT+CWSAP=\"WIFI\",\"123456789\",5,0\r\n");//設置wifi名稱和密碼,通道和無加密
Esp8266Send(buf);
Esp8266Wait(500);
memset(buf,0,300);
sprintf(buf,"AT+CIPMUX=0\r\n"); //設置為單路鏈接
Esp8266Send(buf);
Esp8266Wait(500);
memset(buf,0,300);
sprintf(buf,"AT+CIPSTART=\"UDP\",\"192.168.4.1\",8080,8080,0\r\n");//設置udp server
Esp8266Send(buf);
Esp8266Wait(500);
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
char buf[u_rxlen];
memset(buf,0,u_rxlen);
memcpy(buf,u_rxbuf,u_rxlen-1);
HAL_UART_Transmit(&huart1,buf,u_rxlen-1,0x8fff);
}
3.2 esp8266與stm32通過SPI通信實現
在這種方式下,esp8266作為主控,利用SPI與stm32進行通信。下面的代碼實現了esp8266從stm32讀取一個位元組的數據,並返回給stm32,在stm32上將讀取到的數據放到LD3和LD4兩個led燈上。
void spi_init(void)
{
uint8_t ack=0;
do{
HAL_GPIO_WritePin(SPI1_CS_GPIO_Port,SPI1_CS_Pin,GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi1,&cmd_01,1,0xffff);
HAL_SPI_Receive(&hspi1,&ack,1,0xffff);
HAL_GPIO_WritePin(SPI1_CS_GPIO_Port,SPI1_CS_Pin,GPIO_PIN_SET);
}while(ack!=0xab);
delay(1000);
}
void LedBlink(void)
{
for(int i=0;i<8;i++)
{
HAL_GPIO_TogglePin(GPIOB,LD3_Pin|LD4_Pin);
HAL_Delay(250);
}
}
void SpiTest(void)
{
uint8_t spi_rx_buf[1];
uint8_t spi_tx_buf[1];
spi_tx_buf[0]=0x5a;
while(1)
{
HAL_GPIO_WritePin(SPI1_CS_GPIO_Port,SPI1_CS_Pin,GPIO_PIN_RESET);
HAL_SPI_TransmitReceive(&hspi1,spi_tx_buf,spi_rx_buf,1,0xffff);
HAL_GPIO_WritePin(SPI1_CS_GPIO_Port,SPI1_CS_Pin,GPIO_PIN_SET);
if(spi_rx_buf[0]==0x5a)
{
LedBlink();
}
HAL_Delay(200);
}
}
四、總結
在實際應用中,esp8266與stm32的通信非常重要,上述文章詳細介紹了esp8666與stm32通信協議、通信實現方法。在使用串口通信時,需要注意波特率和數據頭的選取。在使用SPI通信時,需要注意主從模式選擇和SPI時序的設定。我們可以根據實際應用需求,選擇適合的通信方式,將esp8266與stm32進行有效的通信。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/293235.html