文章目录

  • ESP-01S-WIFI模块
    • AT指令
    • 用到的AT指令
  • 软件下载
    • 如果是新WIFI设备,例如波特率9600,双模等等需要配置
    • 与单片机通信接线
      • 如何接线
    • 代码(当作客户端接入自己家路由器,单片机通过路由器与电脑通信)
  • 执行结果
  • WIFI当作服务器
    • 代码
  • 结束

ESP-01S-WIFI模块

他与蓝牙模块类似,但比蓝牙模块强大实用。
蓝牙,ESP-01s,Zigbee, NB-Iot等通信模块都是基于AT指令的设计。

ESP-01s出厂波特率正常是115200, 注意:AT指令,控制类都要加回车,数据传输时不加回车

此外我们还需要用到的一个模块。(USB转TTL)用来白盒测试,方便调试

AT指令

AT指令集是从终端设备 (单片机)(Terminal Equipment,TE)或数据终端设备(Data TerminalEquipment,DTE)向终端适配器(Terminal Adapter,TA)或数据电路终端设备(Data CircuitTerminal Equipment,DCE)发送的。

其对所传输的数据包大小有定义:即对于AT指令的发送,除AT两个字符外,最多可以接收1056个字符的长度(包括最后的空字符)。

每个AT命令行中只能包含一条AT指令;对于由终端设备主动向PC端报告的URC指示或者response响应,也要求一行最多有一个,不允许上报的一行中有多条指示或者响应。AT指令以回车作为结尾,响应或上报以回车换行为结尾。

AT指令不需要记住,用到时候查即可,所有AT指令均是英文半角输入,不然报错

用到的AT指令

均可通过手册查到

AT   //上电后发送AT指令测试通信及模块功能是否正常OK  //返回OK则正常
AT+UART=9600,8,1,0,0   //通过一下命令配置成9600波特率,8个数据位,1个停止位,后两位默认0OK
AT+CWMODE=3 //1. 是station(设备)模式 2.是AP(路由)模式 3.是双模OK
AT+CWJAP="TP-LINK_3E30","18650711783" //指令WIFI CONNECTED //结果
WIFI GOT IP //结果
AT+CIFSR //指令       查询当前连接的IP地址
+CIFSR:APIP,"192.168.4.1"                //自己作为路由器的ip
+CIFSR:APMAC,"4e:75:25:0d:ae:2f"     //mac地址
+CIFSR:STAIP,"192.168.0.148"         //自己作为客户的ip
+CIFSR:STAMAC,"4c:75:25:0d:ae:2f"        //mac地址
OK
AT+CIPSTART="TCP","192.168.0.113",8888 //指令,注意双引号逗号都要半角(英文)输入
CONNECT //结果:成功
OK //结果:成功
AT+CIPSEND=4 // 设置即将发送数据的长度 (这里是4个字节)
>CLCA // 看到大于号后,输入消息,CLCA,不要带回车
Response :SEND OK //结果:成功
//注意,这种情况下,每次发送前都要先发送AT+CIPSEND=长度 的指令,再发数据!
AT+CIPMODE=1 //开启透传模式
Response :OK
AT+CIPSEND //带回车
Response: > //这个时候随意发送接收数据咯
//在透传发送数据过程中,若识别到单独的⼀包数据 “+++”,则退出透传发送

软件下载

链接:https://pan.baidu.com/s/1mOY_ZgvDt3JvY1qD1aIvpQ
提取码:o42a
–来自百度网盘超级会员V4的分享

解压密码:Strange_Head

打开即用

如果是新WIFI设备,例如波特率9600,双模等等需要配置

先这样接线配置

打开串口调试助手和网络调试助手
WIFI一开始默认波特率是115200,这个先选115200,如果已插入USB转TTL,则开启串口处于高亮,且可以选择对应串口

网络调试助手,选择如下:

windows用命令提示符cmd,ipconfig指令可以知道自己的ip地址,对应输入即可。
端口号随便,最好是5000以上。这里查找到的后面就是自己服务器的ip地址和端口号
点击连接即可,等待WIFI接入。

在串口调试用AT指令配置(可以尝试直接通信)

  • AT+UART=9600,8,1,0,0//波特率设置9600
  • AT+CWMODE=3 //1. 是station(设备)模式 2.是AP(路由)模式 3.是双模

如果想直接通信继续操作:

  • AT+CWJAP="自己的WIFI名字","自己的WIFI密码" //指令
  • AT+CIPSTART="TCP","服务器IP地址",服务器端口号 //连接服务器,指令,注意双引号逗号都要半角(英文)输入
  • AT+CIPSEND=4 // 设置即将发送数据的长度 (这里是4个字节)
  • 发送数据,发送完毕之后需要重新执行AT+CIPSEND=4,循环下去,如果不想循环可以执行透传命令
  • AT+CIPMODE=1 //开启透传模式
  • AT+CIPSEND //带回车

细心可以发现,每次成功执行返回OK,那么可以利用这个OK,实现单片机与WIFI模块通信

与单片机通信接线

如何接线


只用到4根线,VCC,GND,TX,RX

  • VCC电源,5v,3.3v均可
  • GND电源负极(地)
  • TX发出消息端
  • RX接受消息端

这样接线的好处是方便调试,可以直观的看到WIFI模块收到的消息并反馈到网络调试助手,而WIFI模块发出的消息可以通过串口调试助手看到同样的单片机也有一根下载线连着电脑,也可以监测单片机自身的首发状态
但需要通过串口自己模拟WIFI消息给单片机发信号

不需要信息展示时候,直接把WIFI模块的TX接到单片机的RX即可。

代码(当作客户端接入自己家路由器,单片机通过路由器与电脑通信)

#include <reg51.h>
#include <string.h>sbit led = P3^7;//根据自己的需求自己配置
code char Set_Connete[]  = "AT+CWJAP=\"自己的路由器名字\",\"自己的路由器密码\"\r\n"; //连接路由器的AT指令
code char Set_netServer[]= "AT+CIPSTART=\"TCP(类型)\",\"自己的服务器IP\",自己的服务器端口号\r\n"; //连接服务器char Set_Send0[] = "AT+CIPMODE=1\r\n";      //设置透传
char Set_Send1[]    = "AT+CIPSEND\r\n";         //开始发送char QUIT[]           = "+++";                  //关闭发送,目前没用到char cmd[12];char ok = 0;
char AT_NET = 0;static int i = 0;void delay(unsigned int ms)
{unsigned int i;unsigned int j;for(i=0;i<ms;i++)for(j=0;j<115;j++);
}void Init_Time0()
{SCON = 0x50;      //设置串口工作模式1,且可以接受消息PCON = 0x80;     //开启倍频TMOD = 0x20;     //设置定时器8位重新装填TH1 = 0xFA;           //9600波特率计算TL1 = 0xFA;TR1 = 1;            //启动定时器0EA = 1;                //开启总中断开关ES = 1;               //开启串口中断}//中断处理
void Operate_Serial() interrupt 4
{//发送处理if(TI);//接受处理if(RI){//将RI复位RI = 0;//如果SBUF是以下这几个字符则从零开始if(SBUF == 'O'  || SBUF == 'L' || SBUF == 'M'){i = 0;}  cmd[i++] = SBUF; //以此放入值if(cmd[0] == 'O' && cmd[1] == 'K'){      //根据例子每次执行成功会返回OK,对OK进行检测ok = 1;memset(cmd,'\0',12);}if(cmd[0] == 'L'){           //亮灯}if(cmd[0] == 'M'){         //灭灯led = 1;}if(i == 12) i = 0;         //防止溢出归零}
}//字节发送
void Send_Byte(char dat)
{SBUF = dat;while(!TI);TI = 0;
}//字符串发送
void SendString(char *dat)
{while(*dat != '\0'){Send_Byte(*dat);dat++;}}//入网操作
void Connet_Net()
{char count = 0;delay(2000);SendString(Set_Connete);//等待入网,灯的状态为闪烁while(!ok){count++;led = 0;delay(500);led = 1;delay(500);if(count >= 10){SendString(Set_Connete);count = 0;}}//每次过后ok的值为1,所以要进行复位ok = 0;//连接服务器SendString(Set_netServer);while(!ok);ok = 0;//开启透传SendString(Set_Send0);while(!ok);ok = 0;//开始发送SendString(Set_Send1);while(!ok);ok = 0;led = 0;
}void main()
{//初始化,设置波特率9600Init_Time0();//入网Connet_Net();while(1){//每秒发送Strange_Head hello!!!,心跳包,在网络调试助手可以看到SendString("Strange_Head hello!!!\r\n");delay(1000);}
}

执行结果

通过单片机发送AT指令实现通信

WIFI当作服务器

自己电脑连接WIFI模块,并用网络调试助手,连接对应IP,端口
需要设置参数

//1 配置成服务器
AT+CWMODE=2
Response :OK
//2 使能多链接
AT+CIPMUX=1
Response :OK
//3 建立TCPServer
AT+CIPSERVER=1 // default port = 333
Response :OK
//4 发送数据
AT+CIPSEND=0,4 // 发送4个字节在连接0通道上
abcd //输入数据,不带回车
Response :SEND OK
//• 接收数据
+IPD, 0, n: xxxxxxxxxx //+IPD是固定字符串 0是通道,n是数据长度,xxx是数据
//断开连接
AT+CIPCLOSE=0
Response :0, CLOSED OK

代码

//ESP-01s工作在路由模式,课程查询路由器IP地址192.168.4.1,使用的服务器默认端口号333
#include <reg51.h>
#include <string.h>sbit led = P3^7;//根据自己的需求自己配置
//1 工作在路由模式
char LYMO[] = "AT+CWMODE=2\r\n";
//2 使能多链接
char DLJ[] = "AT+CIPMUX=1\r\n";
//3 建立TCPServer
char JLFW[] = "AT+CIPSERVER=1\r\n"; // default port = 333
//发送数据
char FSSJ[] = "AT+CIPSEND=0,20\r\n";char cmd[12];char ok = 0;
char AT_NET = 0;static int i = 0;void delay(unsigned int ms)
{unsigned int i;unsigned int j;for(i=0;i<ms;i++)for(j=0;j<115;j++);
}void Init_Time0()
{SCON = 0x50;      //设置串口工作模式1,且可以接受消息PCON = 0x80;     //开启倍频TMOD = 0x20;     //设置定时器8位重新装填TH1 = 0xFA;           //9600波特率计算TL1 = 0xFA;TR1 = 1;            //启动定时器0EA = 1;                //开启总中断开关ES = 1;               //开启串口中断}//中断处理
void Operate_Serial() interrupt 4
{//发送处理if(TI);//接受处理if(RI){//将RI复位RI = 0;//如果SBUF是以下这几个字符则从零开始if(SBUF == 'O'  || SBUF == 'L' || SBUF == 'M'){i = 0;}  cmd[i++] = SBUF; //以此放入值if(cmd[0] == 'O' && cmd[1] == 'K'){      //根据例子每次执行成功会返回OK,对OK进行检测ok = 1;memset(cmd,'\0',12);}if(cmd[0] == 'L'){           //亮灯}if(cmd[0] == 'M'){         //灭灯led = 1;}if(i == 12) i = 0;         //防止溢出归零}
}//字节发送
void Send_Byte(char dat)
{SBUF = dat;while(!TI);TI = 0;
}//字符串发送
void SendString(char *dat)
{while(*dat != '\0'){Send_Byte(*dat);dat++;}}void Connet_Net()
{char count = 0;delay(2000);sendString(LYMO);while(!OK);OK = 0;sendString(DLJ);while(!OK);OK = 0;sendString(JLFW);while(!OK);OK = 0;
}void main()
{//初始化,设置波特率9600Init_Time0();//入网Connet_Net();while(1){sendString(FSSJ);delay(1000);//每秒发送Strange_Head hello!!!,心跳包,在网络调试助手可以看到SendString("Strange_Head hello!!!\r\n");delay(1000);}
}

结束

如果对你有帮助,点赞支持一下把。
转载联系作者

基于51单片机的WIFI模块的简单通信相关推荐

  1. 天问51单片机结合WIFI模块上传温度数据到TCP服务器

    目 录 一.前言 二.项目准备 三.设计思路 四.项目主要代码 五.项目成果 一.前言: 天问51系统单片机作为增强型51单片机,它比传统的51单片机性能提升很多,而公司开发的天问BLOCK软件编程也 ...

  2. 基于51单片机的wifi智能led灯的毕业设计

    基于51单片机的wifi智能led灯的毕业设计 摘要 系统基于STC89C52RC单片机设计,拥有自动与手动两种模式,自动模式下可以过热释红外传感器检测是否有人,采用光敏电阻构成的电路检测环境光的强度 ...

  3. 天问51单片机结合WIFI模块上传温度数据到巴法云平台

    目 录 一.前言 二.项目准备 三.设计思路 四.项目主要代码 五.项目成果 六.项目不足 一.前言: 继前一个项目<天问51单片机结合WIFI模块上传温度数据到TCP服务器>,本次项目是 ...

  4. Android Studio设计APP实现与51单片机通过WIFI模块(ESP8266-01S)通讯控制LED灯亮灭的设计源码【详解】

    目录 一.前言 二.效果展示 1.APP界面展示 2.C51硬件展示 三.Android Studio APP源代码 1.AndroidManifest.xml 1.请求联网: 2.开放明文传输: 2 ...

  5. 51单片机通过WIFI模块ESP8266控制LED灯

    完整源码下载地址:https://download.csdn.net/download/tongxin082/21440621 一.系统方案 手机APP通过ESP8266 WIFI模块与51单片机通信 ...

  6. 基于51单片机esp8266 WIFI大棚温湿度光照带co2 LCD12864显示设计

    摘  要 随着社会经济的不断发展,现代农业生产离不开环境控制.本文在对国内外大棚智能控制进行深入分析的基础上,针对大棚智能化控制存在的诸多因子,将智能传感器监测和单片机控制相结合,提出了基于单片机的温 ...

  7. 基于51单片机的WiFi的温湿度智能开关设计

    一.硬件方案 wifi智能开关电路主要由单片机电路.温湿度采集电路.液晶显示电路.继电器电路.wifi模块电路组成.本设计采用STC89C51单片机完成整个系统的控制流程.手机端软件设置操作界面登陆账 ...

  8. 基于STM32单片机与wifi模块串口结合进行PC端或手机端无线通信(附项目资料包)

    项目所需材料: stm32f103系列最小系统开发板一块. WiFi模块. 具有WiFi功能的手机及PC机. 达普电池一包(或者学生电源一台).. 1k电阻4个,杜邦线若干. 一.硬件环境搭建 1.1 ...

  9. 基于51单片机驱动MPU6050模块(LCD1602显示)

    @TOC 一.简介 MPU-6050集成了3轴MEMS陀螺仪,3轴MEMS加速度计,以及一个可扩展的数字运动处理器DMP,可用IIC接口连接一个第三方的数字传感器.MPU-6050对陀螺仪和加速度计分 ...

最新文章

  1. mysql 中文搜索插件_支持中文的MySQL 5.1+ 全文检索分词插件
  2. 上如何刻字_校园石阶上被人刻了1700多个字?!这次网友却说好
  3. busybox arm-linux-gcc 4.4.4库的路径,BUSYBOX编译错误及解决方法总结
  4. nio的优势_BIO、NIO、AIO 介绍和适用场景分析
  5. ARM处理器基本指令大全
  6. Using Custom Assemblies with Reports
  7. [PWA] Check Online Status by using the NavigatorOnLine API
  8. js中的instanceof运算符
  9. 微信通讯录java实现的,小程序组件之仿微信通讯录的实现代码
  10. 繁凡的ACM模板(满注释模板)
  11. ucdavis计算机科学专业,加州大学戴维斯分校有哪些专业处于世界顶尖水平?
  12. 《雍正皇帝》文化专有词泰译研究(选题缘由)
  13. 早起看CMU15213课程第二天
  14. QT QColor颜色选择器并获取rgb值
  15. 干货| 小游戏赛道变现指南
  16. 在GIS中用ggmap地理空间数据分析
  17. 最新开源微信小程序一键开发平台源码 支持15大功能模块+完整前后端+搭建教程
  18. CGBTN2108_DAY02复习
  19. 与java类似的电脑程序语言_2018十大最热门编程语言排行榜出炉,Java竟不是第一!...
  20. 进程未知端口占用通用解决方法,Socket Error 10013解决办法,实测有效

热门文章

  1. 夺命雷公狗—玩转SEO---65---黑阔手法秒杀dede提升权重
  2. 如何判断是手机端还是PC端?
  3. 在项目中使用 Discuz!NT的上传头像功能
  4. vue3 组件篇 tag
  5. IDEA下的Java编程
  6. android指纹开发套件,指纹芯片_指纹传感器_瑞典FPC指纹开发套件_开发包
  7. Windows如何找到相应的COM组件
  8. RHCSA——第八天
  9. IIS安装和使用URL重写工具-URL Rewrite
  10. 电子废弃物俗称“电子垃圾”,回收咋处理