esp8266与51单片机通信(看完不会你打我)用手机控制led灯的亮灭
第一步:所需材料:
我录制了关于此课程的视频,在b站,大家可以前往b站观看视频bandicam 2022-05-16 11-45-49-495_哔哩哔哩_bilibili
既然你刷到我这篇学习总结了
那说明你必然有
1、51单片机(多数然应该是开发板,我用的是普中A7)————最好还有最小开发系统板
2、esp8266-01S
3、USB转TTL模块:这个模块并不是一定得有,你有开发板那就说明可以打开串口给单片机烧录程序了,但是有了也挺好,可以了解到这个模块接线的快乐,还可能遇到因为电压不足无法正常运行esp8266的问题,不踩坑就没办法进步,反正我是踩过了(无语)
4、杜邦线若干
5、数据线——进行数据传送,两根最好,但是要有开发板的电源线也是一样的,一根数据线一根电源线或数据线
附图一张👇
第二步:PC端通过USB转TTl配置esp8266——AT指令
1、先说USB转TTL与esp8266的接法
USB转TTL模块 | esp8266 |
RXD | TX |
TXD | RX |
GND | GND |
3.3V | 3.3V |
VCC | EV |
说明:
1.TXD发送引脚、RXD接收引脚,发送对接收,所以USB转TTL与esp8266的RXD、TXD交叉相接。
2.3.3V相接后可能无法启动esp8266,这是因为USB转TTL的3.3V引脚并没有真的达到3.3V,不要慌直接将esp8266的3.3V引脚接入USB转TTL的5V引脚,如果esp8266突然就发热并且烫的无法触摸,立马拔掉,如果说温度你的触感还能接受,那就没问题,毕竟牛X的esp8266没那么脆弱。
3.esp8266的EV引脚有些可能会标注成CH_PD,不要怕功能一样的,接线方式也是一样的
附图一张👇
既然连接好了就说说怎么用吧
连接好之后插入电脑的USB接口,然后打开XCOM(串口助手)串口助手网络上有好多种,说这个好用那个好用的,我只相信官方,去安信可科技官网下载串口助手,好不好用是否适合你不清楚,但是我知道他是官方的!!!官方的!!!
下载好之后直接可以打开,串口会自动刷新已连接的串口号,但是可能你电脑连接了多个,那你打开自己的计算机管理器->设备管理器->端口查看就行,一般情况下直接刷新了串口点击选择即可,我的端口是COM4,波特率115200就可以,因为esp8266出场固件波特率就是115200,而后打开串口,如下图👇
而后直接点击发送就行,然后巴拉巴拉的返回一些数据最后返回ready!就说明你已经连接成功了,很恭喜恭喜!如果不返回数据,仔细检查你线路连接,如果都连接正确,还是不返回数据,把线拔了在连一次,还是无法发送,把EV引脚拔了,还是不行,去安信可科技官网重新刷一遍你的固件。要注意的是:在使用多个软件使用串口时需关闭其他软件串口,因为一个串口只能被一个软件打开。如果串口打不开可能是电脑缺少CH340驱动。
安信可科技官网里面这些基础的资料都有自己慢慢探索~~~
现在进行用电脑对esp8266进行At指令配置(我只讲我用的AT指令,至于每条AT指令什么意思自己多去看看AT指令集,网上很多自己查吧)
1——首先发送 AT+CWMODE=3 既然是WiFi模块 他就既可以作为客户端连接别人的热点,也可以做服务端让别人连接它的热点 。
AT+CWMODE=1 | 1 Station 模式 |
AT+CWMODE=2 | 2 AP 模式 |
AT+CWMODE=3 | 3 AP 兼 Station 模式 |
AP模式:提供无线网络接入服务,允许其他无线设备连接其网络,类似无线路由器。
Station模式:本身不提供无线接入服务,可以连接AP,类似无线终端设备。
先跟着我的步骤走,连接成功了在一步一步尝试别的模式
2——其次发送 AT+CWSAP="ESP8266","12345678",11,3(里面的参数可以自行修改)
该指令的说明如下图👇
3——因为单片机的波特率最高就9600,所以为了后面单片机和esp8266正常通信,还要发送一条指令修改esp8266的波特率 AT+CIOBAUD=9600,8,1,0,0 返回ok后 记得将串口先断开然后把串口助手的波特率也进行修改 9600
4——最后一步 发送AT+RST 重启esp8266就完事了 然后你就可以把USB转TTL的线全部拆了 突然感觉轻松好多吧哈哈哈
第三步:单片机与esp8266通信
网上有好多示例点灯的,他们的侧重点好像都是在程序上,程序自然很重要,但是程序要与实际的开发板电路原理图相匹配才可以,要不然你程序写的无论多么规范,都完成不了你所需要实现的内容。
也是因为查阅好多资料都在讲程序怎么样怎么样,导致我一直觉得是我程序的问题,也是废了好大的劲才完成最最最基本的点灯实验。下面就开始讲我遇到的坑吧。
为了写这篇文章,我自己编写了一个最最最简单的点灯程序(别人的程序都是判断这个判断哪个 一共七八个灯一起亮,太麻烦了 对我这样的小白来说就像天书一样)
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit led1=P1^1;
sbit led2=P1^2;
sbit led3=P1^3;
uchar Recive_table[15];
uint i;
void delay_ms(uint ms)
{
uchar i,j;
for(i=ms;i>0;i--)
for(j=120;j>0;j--);
}
void delay_us(uchar us)
{
while(us--);
}
void Usart_Init()//初始化51单片机
{
SCON = 0x50;//串行口中断方式一,且启动串行口接受(REN=1)
TMOD = 0x20;//计数器1工作方式2,自动重装载
TH1 = 0xfd;//设置波特率与esp8266达成一致
TL1 = TH1;
PCON = 0;//波特率不加倍
TR1 = 1;//启动计数器
EA = 1;//开总中断
}
void SENT_At(uchar *At_Comd)//指针指向At指令
{
ES = 0;//关闭串口中断
while(*At_Comd!='