//ÍøÂçÉ豸Çý¶¯
#include "esp8266.h"
//Ó²¼þÇý¶¯
#include "delay.h"
#include "oled.h"
#include "led.h"
//C¿â
#include <string.h>
#include <stdio.h>
unsigned char esp8266_buf[buf_len];
unsigned char data_buf[buf_len];
unsigned short esp8266_cnt = 0;
unsigned short esp8266_cntPre = 0;
extern char Flagout;
//==========================================================
// º¯ÊýÃû³Æ£º ESP8266_Clear
//
// º¯Êý¹¦ÄÜ£º Çå¿Õ»º´æ
//
// Èë¿Ú²ÎÊý£º ÎÞ
//
// ·µ»Ø²ÎÊý£º ÎÞ
//
// ˵Ã÷£º
//==========================================================
void ESP8266_Clear(void)
{
memset(esp8266_buf, 0, sizeof(esp8266_buf));
esp8266_cnt = 0;
}
//==========================================================
// º¯ÊýÃû³Æ£º ESP8266_Init
//
// º¯Êý¹¦ÄÜ£º ³õʼ»¯ESP8266
//
// Èë¿Ú²ÎÊý£º ÎÞ
//
// ·µ»Ø²ÎÊý£º ÎÞ
//
// ˵Ã÷£º
//=========================================================
void ESP8266_Init(unsigned int bound)
{
#if Bamfa_USART1
//GPIO¶Ë¿ÚÉèÖÃ
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); //ʹÄÜUSART1£¬GPIOAʱÖÓ
//USART1_TX GPIOA.9
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //¸´ÓÃÍÆÍìÊä³ö
GPIO_Init(GPIOA, &GPIO_InitStructure);//³õʼ»¯GPIOA.9
//USART1_RX GPIOA.10³õʼ»¯
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//¸¡¿ÕÊäÈë
GPIO_Init(GPIOA, &GPIO_InitStructure);//³õʼ»¯GPIOA.10
//Usart1 NVIC ÅäÖÃ
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//ÇÀÕ¼ÓÅÏȼ¶3
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //×ÓÓÅÏȼ¶3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQͨµÀʹÄÜ
NVIC_Init(&NVIC_InitStructure); //¸ù¾ÝÖ¸¶¨µÄ²ÎÊý³õʼ»¯VIC¼Ä´æÆ÷
//USART ³õʼ»¯ÉèÖÃ
USART_InitStructure.USART_BaudRate = bound;//´®¿Ú²¨ÌØÂÊ
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×Ö³¤Îª8λÊý¾Ý¸ñʽ
USART_InitStructure.USART_StopBits = USART_StopBits_1;//Ò»¸öֹͣλ
USART_InitStructure.USART_Parity = USART_Parity_No;//ÎÞÆæÅ¼Ð£Ñéλ
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//ÎÞÓ²¼þÊý¾ÝÁ÷¿ØÖÆ
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //ÊÕ·¢Ä£Ê½
USART_Init(USART1, &USART_InitStructure); //³õʼ»¯´®¿Ú1
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//¿ªÆô´®¿Ú½ÓÊÜÖжÏ
USART_Cmd(USART1, ENABLE); //ʹÄÜ´®¿Ú1
#elif Bamfa_USART2
GPIO_InitTypeDef gpio_initstruct;
USART_InitTypeDef usart_initstruct;
NVIC_InitTypeDef nvic_initstruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
//PA2 TXD
gpio_initstruct.GPIO_Mode = GPIO_Mode_AF_PP;
gpio_initstruct.GPIO_Pin = GPIO_Pin_2;
gpio_initstruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &gpio_initstruct);
//PA3 RXD
gpio_initstruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
gpio_initstruct.GPIO_Pin = GPIO_Pin_3;
gpio_initstruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &gpio_initstruct);
usart_initstruct.USART_BaudRate = bound;
usart_initstruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //ÎÞÓ²¼þÁ÷¿Ø
usart_initstruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //½ÓÊպͷ¢ËÍ
usart_initstruct.USART_Parity = USART_Parity_No; //ÎÞУÑé
usart_initstruct.USART_StopBits = USART_StopBits_1; //1λֹͣλ
usart_initstruct.USART_WordLength = USART_WordLength_8b; //8λÊý¾Ýλ
USART_Init(USART2, &usart_initstruct);
USART_Cmd(USART2, ENABLE); //ʹÄÜ´®¿Ú
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); //ʹÄܽÓÊÕÖжÏ
nvic_initstruct.NVIC_IRQChannel = USART2_IRQn;
nvic_initstruct.NVIC_IRQChannelCmd = ENABLE;
nvic_initstruct.NVIC_IRQChannelPreemptionPriority = 1;
nvic_initstruct.NVIC_IRQChannelSubPriority = 0;
NVIC_Init(&nvic_initstruct);
#elif Bamfa_USART3
NVIC_InitTypeDef NVIC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // GPIOBʱÖÓ
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);
USART_DeInit(USART3); //¸´Î»´®?
//USART2_TX PB10
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PB10
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //¸´ÓÃÍÆÍìÊä³ö
GPIO_Init(GPIOB, &GPIO_InitStructure); //³õʼ»¯PB10
//USART3_RX PB11
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//¸¡¿ÕÊäÈë
GPIO_Init(GPIOB, &GPIO_InitStructure); //³õʼ»¯PB11
USART_InitStructure.USART_BaudRate = bound;//Ò»°ãÉèÖÃΪ9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×Ö³¤Îª8λÊý¾Ý¸ñʽ
USART_InitStructure.USART_StopBits = USART_StopBits_1;//Ò»¸öֹͣλ
USART_InitStructure.USART_Parity = USART_Parity_No;//ÎÞÆæÅ¼Ð£Ñéλ
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//ÎÞÓ²¼þÊý¾ÝÁ÷¿ØÖÆ
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //ÊÕ·¢Ä£Ê½
USART_Init(USART3, &USART_InitStructure); //³õʼ»¯´®¿Ú 3
USART_Cmd(USART3, ENABLE); //ʹÄÜ´®¿Ú
//ʹÄܽÓÊÕÖжÏ
USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//¿ªÆôÖжÏ
NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ;//ÇÀÕ¼ÓÅÏȼ¶2
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //×ÓÓÅÏȼ¶0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQͨµÀʹÄÜ
NVIC_Init(&NVIC_InitStructure); //¸ù¾ÝÖ¸¶¨µÄ²ÎÊý³õʼ»¯VIC¼Ä´æÆ÷
#endif
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(ESP01S_RST_RCC_CLK, ENABLE); //ʹÄÜA¶Ë¿ÚʱÖÓ
GPIO_InitStructure.GPIO_Pin = ESP01S_RST_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //ÍÆÍìÊä³ö
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//ËÙ¶È50MHz
GPIO_Init(ESP01S_RST_PROT, &GPIO_InitStructure); //³õʼ»¯GPIOA
GPIO_ResetBits(ESP01S_RST_PROT,ESP01S_RST_PIN);//esp8266µÍµçƽ¸´Î»
delay_ms(200);
GPIO_SetBits(ESP01S_RST_PROT,ESP01S_RST_PIN);
ESP8266_Clear();
OLED_ShowCHinese(0, 3,15);//Õý
OLED_ShowCHinese(18,3,16);//ÔÚ
OLED_ShowCHinese(36,3,17);//Á¬
OLED_ShowCHinese(54,3,18);//½Ó
OLED_ShowString (72,3,"WIFI",16);
OLED_ShowString (108,3,"..",16);
OLED_ShowCHinese(0, 6, 19);//½ø
OLED_ShowCHinese(18,6, 20);//¶È
OLED_ShowCHinese(36,6,21);//£º
// printf("1. AT\r\n");
OLED_ShowString(44,6,"10%",16);
while(ESP8266_SendCmd("AT\r\n","OK")&&Flagout)
delay_ms(100);
// printf("2. CWMODE\r\n");
OLED_ShowString(44,6,"20%",16);
while(ESP8266_SendCmd("AT+CWMODE=3\r\n", "OK")&&Flagout)
delay_ms(100);
// printf( "3. Á¬½Ó·ÓÉÆ÷¡£\r\n");
OLED_ShowString(44,6,"30%",16);
while(ESP8266_SendCmd(ESP8266_WIFI_INFO, "OK")&&Flagout)
delay_ms(100);
// printf("4. ¿ªÆô͸Ã÷´«Êäģʽ¡£\r\n");
OLED_ShowString(44,6,"30%",16);
while(ESP8266_SendCmd("AT+CIPMODE=1\r\n", "OK")&&Flagout)
delay_ms(100);
// printf( "5. Á¬½Ó°Í·¨ÔÆ¡£\r\n");
OLED_ShowString(44,6,"50%",16);
while(ESP8266_SendCmd(ESP8266_ONENET_INFO, "CONNECT")&&Flagout)
delay_ms(100);
// printf( "6. ½øÈë͸´«Ä£Ê½£¬ÏÂÃæ·¢µÄ¶¼»áÎÞÌõ¼þ´«Êä¡£\r\n");
OLED_ShowString(44,6,"80%",16);
while(ESP8266_SendCmd("AT+CIPSEND\r\n", "OK")&&Flagout)
delay_ms(100);
// printf( "7.¶©ÔÄÖ÷Ìâ¡£\r\n");
OLED_ShowString(44,6,"90%",16);
while(ESP8266_SendCmd(ESP8266_TOPIC, "cmd=1&res=1")&&Flagout)
delay_ms(100);
Flagout=3;
// printf("8. ESP8266 ³õʼ»¯Íê³É£¡\r\n");
OLED_ShowString(44,6,"100%",16);
Flagout=0;
delay_ms(2000);
ESP8266_Clear();
OLED_Clear(0);
}
//==========================================================
// º¯ÊýÃû³Æ£º ESP8266_WaitRecive
//
// º¯Êý¹¦ÄÜ£º µÈ´ý½ÓÊÕÍê³É
//
// Èë¿Ú²ÎÊý£º ÎÞ
//
// ·µ»Ø²ÎÊý£º REV_OK-½ÓÊÕÍê³É REV_WAIT-½ÓÊÕ³¬Ê±Î´Íê³É
//
// ˵Ã÷£º Ñ»·µ÷Óüì²âÊÇ·ñ½ÓÊÕÍê³É
//==========================================================
_Bool ESP8266_WaitRecive(void)
{
if(esp8266_cnt == 0) //Èç¹û½ÓÊÕ¼ÆÊýΪ0 Ôò˵Ã÷ûÓд¦ÓÚ½ÓÊÕÊý¾ÝÖУ¬ËùÒÔÖ±½ÓÌø³ö£¬½áÊøº¯Êý
return REV_WAIT;
if(esp8266_cnt == esp8266_cntPre) //Èç¹ûÉÏÒ»´ÎµÄÖµºÍÕâ´ÎÏàͬ£¬Ôò˵Ã÷½ÓÊÕÍê±Ï
{
esp8266_cnt = 0; //Çå0½ÓÊÕ¼ÆÊý
return REV_OK; //·µ»Ø½ÓÊÕÍê³É±êÖ¾
}
esp8266_cntPre = esp8266_cnt; //ÖÃΪÏàͬ
return REV_WAIT; //·µ»Ø½ÓÊÕδÍê³É±êÖ¾
}
/************************************************************
* º¯ÊýÃû³Æ£º Usart_SendString
*
* º¯Êý¹¦ÄÜ£º ´®¿ÚÊý¾Ý·¢ËÍ
*
* Èë¿Ú²ÎÊý£º USARTx£º´®¿Ú×é
* str£ºÒª·¢Ë͵ÄÊý¾Ý
* len£ºÊý¾Ý³¤¶È
*
* ·µ»Ø²ÎÊý£º ÎÞ
*
* ˵Ã÷£º
************************************************************
*/
void Usart_SendString(USART_TypeDef *USARTx, unsigned char *str, unsigned short len)
{
unsigned short count = 0;
for(; count < len; count++)
{
USART_SendData(USARTx, *str++); //·¢ËÍÊý¾Ý
while(USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET); //µÈ´ý·¢ËÍÍê³É
}
}
//==========================================================
// º¯ÊýÃû³Æ£º ESP8266_SendCmd
//
// º¯Êý¹¦ÄÜ£º ·¢ËÍÃüÁî
//
// Èë¿Ú²ÎÊý£º cmd£ºÃüÁî
// res£ºÐèÒª¼ì²éµÄ·µ»ØÖ¸Áî
//
// ·µ»Ø²ÎÊý£º 0-³É¹¦ 1-ʧ°Ü
//
// ˵Ã÷£º
//==========================================================
_Bool ESP8266_SendCmd(char *cmd, char *res)
{
unsigned char timeOut = 200;
Usart_SendString(Bamfa_USART, (unsigned char *)cmd, strlen((const char *)cmd));
while(timeOut--)
{
if(ESP8266_WaitRecive() == REV_OK) //Èç¹ûÊÕµ½Êý¾Ý
{
if(strstr((const char *)esp8266_buf, res) != NULL) //Èç¹û¼ìË÷µ½¹Ø¼ü´Ê
{
ESP8266_Clear(); //Çå¿Õ»º´æ
return 0;
}
}
delay_ms(10);
}
return 1;
}
//==========================================================
// º¯ÊýÃû³Æ£º ESP8266_SendData
//
// º¯Êý¹¦ÄÜ£º ·¢ËÍÊý¾Ý
//
// Èë¿Ú²ÎÊý£º data£ºÊý¾Ý
// len£º³¤¶È
//
// ·µ»Ø²ÎÊý£º ÎÞ
//
// ˵Ã÷£º
//==========================================================
void ESP8266_SendData(unsigned char *data)
{
ESP8266_Clear(); //Çå¿Õ½ÓÊÕ»º´æ
Usart_SendString(Bamfa_USART, (unsigned char *)data, strlen((const char *)data)); //·¢ËÍÉ豸Á¬½ÓÇëÇóÊý¾Ý
}
//==========================================================
// º¯ÊýÃû³Æ£º USART2_IRQHandler
//
// º¯Êý¹¦ÄÜ£º ´®¿Ú2ÊÕ·¢ÖжÏ
//
// Èë¿Ú²ÎÊý£º ÎÞ
//
// ·µ»Ø²ÎÊý£º ÎÞ
//
// ˵Ã÷£º
//==========================================================
#if Bamfa_USART1
void USART1_IRQHandler(void)
{
if(USART_GetITStatus(Bamfa_USART, USART_IT_RXNE) != RESET) //½ÓÊÕÖжÏ
{
if(esp8266_cnt >= sizeof(esp8266_buf)) esp8266_cnt = 0; //·ÀÖ¹´®¿Ú±»Ë¢±¬
esp8266_buf[esp8266_cnt++] = USART_ReceiveData(Bamfa_USART);
}
USART_ClearFlag(Bamfa_USART, USART_FLAG_RXNE);
}
#elif Bamfa_USART2
void USART2_IRQHandler(void)
{
if(USART_GetITStatus(Bamfa_USART, USART_IT_RXNE) != RESET) //½ÓÊÕÖжÏ
{
if(esp8266_cnt >= sizeof(esp8266_buf)) esp8266_cnt = 0; //·ÀÖ¹´®¿Ú±»Ë¢±¬
esp8266_buf[esp8266_cnt++] = USART_ReceiveData(Bamfa_USART);
}
USART_ClearFlag(Bamfa_USART, USART_FLAG_RXNE);
}
#elif Bamfa_USART3
void USART3_IRQHandler(void)
{
if(USART_GetITStatus(Bamfa_USART, USART_IT_RXNE) != RESET) //½ÓÊÕÖжÏ
{
if(esp8266_cnt >= sizeof(esp8266_buf)) esp8266_cnt = 0; //·ÀÖ¹´®¿Ú±»Ë¢±¬
esp8266_buf[esp8266_cnt++] = USART_ReceiveData(Bamfa_USART);
}
USART_ClearFlag(Bamfa_USART, USART_FLAG_RXNE);
}
#endif 根据以上代码帮我画一个流程框图
最新发布