看不懂指令的可以看下面这个表
AT+CWSAP=“SSID”,“PWD”,CHL,ECN | OK |
---|---|
SSID | 该AP名称 |
PWD | 密码 |
CHL | 通道号(1~14) |
ECN | 加密方式(1~4) |
下一步设置多连接模式
AT+CIPMUX=1
开启TCP服务器
AT+CIPSERVER=1,5050//AT+CIPSERVER="1是开启","端口号0~9999"
配置第二块ESP8266
AT+CWMODE_DEF=1//STA模式
其他的配置再下面讲
一代码和连接
代码如下(示例):
ESP8266和stm32的连接方式
ESP8266 | STM32F103 |
---|---|
3v3 | 3v3 |
GND | GND |
EN | 3v3 |
TX | A3 |
RX | A2 |
usart口配置
#include "bsp\_usart2.h"
#include <stdarg.h>
#include "wifi\_config.h"
void USART2\_Config( void )
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
RCC\_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC\_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO\_Init(GPIOA, &GPIO_InitStructure);
/\* Configure USART2 Rx (PA.03) as input floating \*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO\_Init(GPIOA, &GPIO_InitStructure);
/\* USART2 mode config \*/
USART_InitStructure.USART_BaudRate = 115200;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
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(USART2, &USART_InitStructure);
/\* 使能串口2接收中断 \*/
USART\_ITConfig(USART2, USART_IT_RXNE, ENABLE);
/\* 使能串口2总线空闲中断 \*/
USART\_ITConfig(USART2, USART_IT_IDLE, ENABLE);
USART\_Cmd(USART2, ENABLE);
}
/\*
\* 函数名:itoa
\* 描述 :将整形数据转换成字符串
\* 输入 :-radix =10 表示10进制,其他结果为0
\* -value 要转换的整形数
\* -buf 转换后的字符串
\* -radix = 10
\* 输出 :无
\* 返回 :无
\* 调用 :被USART2\_printf()调用
\*/
static char \*itoa( int value, char \*string, int radix )
{
int i, d;
int flag = 0;
char \*ptr = string;
/\* This implementation only works for decimal numbers. \*/
if (radix != 10)
{
\*ptr = 0;
return string;
}
if (!value)
{
\*ptr++ = 0x30;
\*ptr = 0;
return string;
}
/\* if this is a negative value insert the minus sign. \*/
if (value < 0)
{
\*ptr++ = '-';
/\* Make the value positive. \*/
value \*= -1;
}
for (i = 10000; i > 0; i /= 10)
{
d = value / i;
if (d || flag)
{
\*ptr++ = (char)(d + 0x30);
value -= (d \* i);
flag = 1;
}
}
/\* Null terminate the string. \*/
\*ptr = 0;
return string;
} /\* NCL\_Itoa \*/
/\*
\* 函数名:USART2\_printf
\* 描述 :格式化输出,类似于C库中的printf,但这里没有用到C库
\* 输入 :-USARTx 串口通道,这里只用到了串口2,即USART2
\* -Data 要发送到串口的内容的指针
\* -... 其他参数
\* 输出 :无
\* 返回 :无
\* 调用 :外部调用
\* 典型应用USART2\_printf( USART2, "\r\n this is a demo \r\n" );
\* USART2\_printf( USART2, "\r\n %d \r\n", i );
\* USART2\_printf( USART2, "\r\n %s \r\n", j );
\*/
void USART2\_printf( USART_TypeDef\* USARTx, char \*Data, ... )
{
const char \*s;
int d;
char buf[16];
va_list ap;
va\_start(ap, Data);
while ( \*Data != 0) // 判断是否到达字符串结束符
{
if ( \*Data == 0x5c ) //'\'
{
switch ( \*++Data )
{
case 'r': //回车符
USART\_SendData(USARTx, 0x0d);
Data ++;
break;
case 'n': //换行符
USART\_SendData(USARTx, 0x0a);
Data ++;
break;
default:
Data ++;
break;
}
}
else if ( \*Data == '%')
{ //
switch ( \*++Data )
{
case 's': //字符串
s = va\_arg(ap, const char \*);
for ( ; \*s; s++)
{
USART\_SendData(USARTx,\*s);
while( USART\_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET );
}
Data++;
break;
case 'd': //十进制
d = va\_arg(ap, int);
itoa(d, buf, 10);
for (s = buf; \*s; s++)
{
USART\_SendData(USARTx,\*s);
while( USART\_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET );
}
Data++;
break;
default:
Data++;
break;
}
} /\* end of else if \*/
else USART\_SendData(USARTx, \*Data++);
while( USART\_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET );
}
}
2.主函数
代码如下(示例):
#include "stm32f10x.h"
#include "stdio.h"
#include "wifi\_config.h"
#include "wifi\_function.h"
#include <string.h>
#include <stdlib.h>
#include "oled.h"
#include "bmp.h"
#include "bsp\_usart1.h"
#include "bsp\_usart2.h"
#include "bsp\_SysTick.h"
int main(void)
{
char \*DataBuff;
char Effect_DataBuff[50];//缓存空间
u8 count1 = 0, count2 = 0;
SysTick\_Init();
WiFi\_USART2\_INIT();
WiFi\_NVIC\_INIT();
ESP8266\_Enable\_MultipleId(ENABLE);//启用多连接
ESP8266\_StartOrShutServer(1,"5050","300");//开启TCP服务端
OLED\_Init();
OLED\_ColorTurn(0);//0正常显示,1 反色显示
OLED\_DisplayTurn(0);//0正常显示 1 屏幕翻转显示
OLED\_DrawCircle(64,32,32);
OLED\_Refresh();
uint16\_t i=0;
while(1)
{
Delay\_ms(220);
DataBuff = ESP8266\_ReceiveString( DISABLE );
PC\_Usart( "\t\n%s\t\n", DataBuff );
while( DataBuff[count1++] != ':' );
while( DataBuff[count1] != '\0' )
{
Effect_DataBuff[count2++] = DataBuff[count1++];
OLED\_Clear();//下一个数据完全发送完时候把上一个数据在屏幕刷新掉,不然的话长的数据不会完全消失,还是会在屏幕显示
}
Effect_DataBuff[count2] = '\0';
PC\_Usart( "\t\n%s\t\n", Effect_DataBuff );
count1 = 0;
count2 = 0;
OLED\_ShowString(0,0,Effect_DataBuff,16,1);
OLED\_Refresh();
## 最后
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**
**深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。**
**因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/72cd6ed7e037daa2b572bf84e706dd4d.png)
![img](https://img-blog.csdnimg.cn/img_convert/9a27606915c632426ada0733750c2310.jpeg)
![img](https://img-blog.csdnimg.cn/img_convert/43ddbebb7c48cca2fac2148df75f9560.png)
![img](https://img-blog.csdnimg.cn/img_convert/569071cd45995f66cc928559b412b79c.png)
![img](https://img-blog.csdnimg.cn/img_convert/6ed689daa3c7a56e5af61e68abe52ad3.png)
![img](https://img-blog.csdnimg.cn/img_convert/5dc98cd03e54286f970ba28f6832abe3.png)
![](https://img-blog.csdnimg.cn/img_convert/0c361e4825135e2b4dbb729426215df0.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**
[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618654289)
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**!!
5684509356)]
[外链图片转存中...(img-yKanNHwo-1715684509356)]
[外链图片转存中...(img-waor4vEQ-1715684509357)]
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**
[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618654289)
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**!!