单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 11512|回复: 43
打印 上一主题 下一主题
收起左侧

ESP8266模块与单片机的通信程序(硬件与软件详解)

  [复制链接]
跳转到指定楼层
楼主
fkup 发表于 2017-12-27 16:44 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
  初次接触ESP8266模块,说实话还是费了很大的劲,从硬件部分到软件部分,一个一个的问题对于我这个新手来说,确实有些吃力。不过还好,在51hei电子论坛有很多这方面的资料,也有很多很友好的人,感谢他们给予的帮助。
  虽然我是一个菜鸟,但我还是希望和大家分享一下。时间比较仓促,代码也有很多不成熟的地方,希望能对初次接触这个模块的人有一些帮助。
  1,硬件:USB转TTL是必需的,ESP8266模块,一般模块出厂就已经烧好了固件,拿到就可以直接发AT指令,AT指令的手册网上很多,可以自行百度。
  硬件连接  TXD-RXD, RXD-TXD; 交叉连接,有的模块需要自己拉高一个引脚的电平,如图所示,电源最好是3.3V,模块发热很严重,不要长时间接电。
  2 ,软件:在执行代码之前,模块要先设定好什么模式,用串口助手发送AT指令设定。我的是AP模式,模块设定为server端,然后生成一个WiFi,名字随   意,这个时候(当然得知道模块的IP地址),可以用电脑上的网络助手,尝试连接模块,电脑必须连接ESP8266模块产生的WiFi才可以;这几步之后,模块就可以连接已经下载好的单片机了,在上面设定好之后,模块断电重启后,在设定的模式不会变,WiFi不会变,后面的指令就需要通过单片机发送了。到这儿基本就可以实现简单的通讯了,程序工程已附上。

时间仓促,我也是这几天才学的,分享只是为了更多的分享,不足的地方希望谅解,目前准备做433M。有愿意指导的或是技术交流的可以加我qq1946706342

单片机源程序如下:
  1. #include <reg52.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int

  6. sbit D1 = P2^0;
  7. sbit D2 = P2^1;
  8. sbit D3 = P2^2;
  9. sbit D4 = P2^3;
  10. sbit D5 = P2^4;
  11. sbit D6 = P2^5;
  12. sbit D7 = P2^6;
  13. sbit D8 = P2^7;

  14. uchar Receive;
  15. uchar Recive_table[15];
  16. uchar flag = 1;
  17. uchar flag1 = 1;
  18. uchar flag2 = 0;
  19. uchar num = 0;
  20. uint i=0;
  21. void ms_delay(uint n)        
  22. {
  23.         uint j,m;
  24.         for( m =n; m>0; m--)
  25.         for(j=110; j>0; j--);
  26. }
  27. void us_delay(uchar n)
  28. {
  29.         while(n--);
  30. }

  31. void Usart_init()
  32. {
  33.         SCON = 0x50;        //设置串行口工作在方式一,且启动串行口接收(REN=1)
  34.         TMOD = 0x20;        //设置计数器1工作在方式二,即自动重装计数值(8位)
  35.         PCON=0X80;
  36.         TH1 = 0xf3;                //设置波特率为4800
  37.         TL1 = 0xf3;
  38.         
  39.         EA = 1;       //开总中断
  40.         TR1 = 1;                         //启动计数器
  41. }

  42. void sent_AT(uchar *at_comd)
  43. {
  44.         ES = 0;
  45.         while(*at_comd != '\0')  //字符串结束标志
  46.         {
  47.                 TI = 0;
  48.                 SBUF = *at_comd;
  49.                 while(!TI);
  50.                 TI = 0;
  51.                 us_delay(5);
  52.                 at_comd++;
  53.         }
  54.         us_delay(5);
  55.         SBUF = '\r';
  56.         while(!TI);
  57.         TI = 0;
  58.         us_delay(5);
  59.         SBUF = '\n';
  60.         while(!TI);
  61.         TI = 0;
  62. }
  63. void main()
  64. {

  65.                 uchar Recivedat;
  66.         //        uchar Rec;
  67.         
  68.                 Usart_init();
  69.                 ms_delay(5000);
  70.                 ES = 0;
  71.                 while(flag == 1){
  72.                         sent_AT("AT+CIPMUX=1");//最方便的是直接printf("AT+CIPMUX=1\r\n");我想弄清楚发送原理,所以绕了一个弯
  73.                                 flag1 = 1;
  74.                                 while(flag1 == 1)//检测模块是否返回OK
  75.                                 {
  76.                                         if(RI)
  77.                                         {
  78.                                                 RI = 0;
  79.                                                 Recivedat = SBUF;
  80.                                                 if(Recivedat == 'K')
  81.                                                 {
  82.                                                         flag = 0;
  83.                                                         flag1 = 0;
  84.                                                 }
  85.                                         }
  86.                                         num++;
  87.                                         if(num == 1000)
  88.                                         {
  89.                                                 num = 0;
  90.                                                 flag1 = 0;
  91.                                         }
  92.                                 }
  93.                         }
  94.                 flag = 1;
  95.                 flag1 = 1;
  96.                 num = 0;
  97.           D1 = 0;
  98.                         
  99.                 while(flag == 1){
  100.                                 sent_AT("AT+CIPSERVER=1,8080");
  101.                                 flag1 = 1;
  102.                                 while(flag1 == 1)
  103.                                 {
  104.                                         if(RI)
  105.                                         {
  106.                                                 RI = 0;
  107.                                                 Recivedat = SBUF;
  108.                                                 if(Recivedat == 'K')
  109.                                                 {
  110.                                                         flag = 0;
  111.                                                         flag1 = 0;
  112.                                                 }
  113.                                         }
  114.                                         num++;
  115.                                         if(num == 1000)
  116.                                         {
  117.                                                 num = 0;
  118.                                                 flag1 = 0;
  119.                                         }
  120.                                 }
  121.                         }
  122.                 flag = 1;
  123.                 flag1 = 1;
  124.                 num = 0;
  125.                 D2 = 0;                        
  126. //                RI=0;

  127.         ES = 1;        //开串口中断,接收完数据,进行处理
  128.         while(1);//挂住不让代码死掉
  129. }

  130. void Usat()interrupt 4//串口中断里面接收从client端发过来的信息
  131. {
  132.                 if(RI==1)
  133.                 {
  134.                         RI=0;
  135.                         Recive_table[i] = SBUF;
  136.                         if(Recive_table[0]=='+')
  137.                         {
  138.                                 D3=0;
  139.                                 i++;
  140.                         }else{
  141.                                 D4=0;
  142.                                 i=0;
  143.                         }
  144.                         if(i>=10)  //这个参数很重要,因为i++
  145.                         {        
  146. ……………………

  147. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
wifi_51_3.rar (31.37 KB, 下载次数: 435)


评分

参与人数 2黑币 +105 收起 理由
aiaiaia + 5 很给力!
admin + 100 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏20 转播转播 分享分享1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ntlclxyc 发表于 2018-2-11 16:53 | 只看该作者
好定西,值得参考
回复

使用道具 举报

板凳
妒不 发表于 2018-4-19 15:15 | 只看该作者
谢谢分享
回复

使用道具 举报

地板
惯性想象me 发表于 2018-4-27 11:05 | 只看该作者
那个RST引脚和IO-O引脚是不是不用接?
回复

使用道具 举报

5#
戚嘉丶 发表于 2018-4-27 14:52 | 只看该作者
感谢分享
回复

使用道具 举报

6#
76711031 发表于 2018-4-30 13:22 | 只看该作者
谢谢分享
回复

使用道具 举报

7#
余大哥 发表于 2018-6-14 17:41 来自手机 | 只看该作者
谢谢分享
回复

使用道具 举报

8#
perfect123 发表于 2018-6-30 15:13 | 只看该作者
你写了半天代码,也没说清楚到底实现了什么功能,硬件连接实物图也没有照片
回复

使用道具 举报

9#
aj8714523 发表于 2018-7-8 22:58 | 只看该作者
perfect123 发表于 2018-6-30 15:13
你写了半天代码,也没说清楚到底实现了什么功能,硬件连接实物图也没有照片

你真看代码了吗?实现的功能就是用单片机对ESP8266进行设置。
回复

使用道具 举报

10#
jhyeqf 发表于 2018-7-10 21:28 | 只看该作者
感谢楼主分享
回复

使用道具 举报

11#
stinfo 发表于 2018-7-21 10:36 | 只看该作者
楼主你好,请问下你单片机发送指令时候,不用带\r\n吗?

另外有个问题想请教,我用C51单片机开发板,把C51的TXD,RXD和ESP2866RXD,TXD连接后,用串口助手链接到开发板的COM口,都是直接联入ESP2866里面,C51不响应我发送的指令,但是ESP2866会响应,请问您有没有遇到这个情况?
回复

使用道具 举报

12#
qwthh 发表于 2018-7-26 09:55 | 只看该作者
电路图能不能看看呢
回复

使用道具 举报

13#
特儿小跟班 发表于 2018-7-30 17:46 | 只看该作者
谢谢分享
回复

使用道具 举报

14#
fuzhoudaxuelin 发表于 2018-8-7 20:52 | 只看该作者
不错的
回复

使用道具 举报

15#
yrb1993 发表于 2018-8-8 09:26 | 只看该作者
stinfo 发表于 2018-7-21 10:36
楼主你好,请问下你单片机发送指令时候,不用带\r\n吗?

另外有个问题想请教,我用C51单片机开发板,把C ...

如果发的指令后面不带\r\n,ESP8266就不会有回复
回复

使用道具 举报

16#
lyMarvin 发表于 2018-8-9 07:08 | 只看该作者
在此基础上,是否可以通过ESP8266读取某网站的天气信息?
一直没有找到用51单片机获得天气信心的资料
回复

使用道具 举报

17#
lizengjie 发表于 2018-8-9 08:10 | 只看该作者
好东西,学习一下
回复

使用道具 举报

18#
中分男神 发表于 2018-9-4 19:12 | 只看该作者
惯性想象me 发表于 2018-4-27 11:05
那个RST引脚和IO-O引脚是不是不用接?

我也想知道诶,请问一下你找到答案了吗?
回复

使用道具 举报

19#
无效楼层,该帖已经被删除
20#
leviiii 发表于 2018-9-7 21:34 | 只看该作者
很给力!
回复

使用道具 举报

21#
无效楼层,该帖已经被删除
22#
leviiii 发表于 2018-9-7 22:39 | 只看该作者
好东西
回复

使用道具 举报

23#
yleer3407 发表于 2018-10-4 13:31 | 只看该作者
点赞!!!!!!!!!!!!!!!!
回复

使用道具 举报

24#
无效楼层,该帖已经被删除
25#
Duo2048 发表于 2018-10-5 16:35 | 只看该作者
看看啊看
回复

使用道具 举报

26#
dcein 发表于 2018-10-27 19:26
扣了黑币为啥下载不了,等1-2分钟,已经等了10分钟还不能下载

27#
zjj1998 发表于 2018-10-31 01:51 | 只看该作者
感谢楼主分享!
回复

使用道具 举报

28#
单片机1234567 发表于 2018-10-31 09:21 来自手机 | 只看该作者
谢谢分享,这个可以用吗
回复

使用道具 举报

29#
gogokl 发表于 2018-11-12 09:41 | 只看该作者
谢谢分享
回复

使用道具 举报

30#
qq23230233 发表于 2018-11-12 17:32 | 只看该作者
lyMarvin 发表于 2018-8-9 07:08
在此基础上,是否可以通过ESP8266读取某网站的天气信息?
一直没有找到用51单片机获得天气信心的资料

和你做同一样东西,至于天气情况我能通过Python爬取天气网站信息获得,那么如何通过8266+c51----电脑之间连接数据我就不懂了
回复

使用道具 举报

31#
zhao321 发表于 2018-11-14 11:22 | 只看该作者
很好,很清楚
回复

使用道具 举报

32#
zdxshr 发表于 2018-12-1 19:43 | 只看该作者
硬件连接那部分学习到了,谢谢
回复

使用道具 举报

33#
qxm666 发表于 2019-3-12 15:29 | 只看该作者
还没试过
回复

使用道具 举报

34#
811787454 发表于 2019-3-14 03:24 | 只看该作者
谢谢分享!
回复

使用道具 举报

35#
ZICHENGYINGJIAN 发表于 2019-3-14 11:13 | 只看该作者
谢谢楼主分享!
回复

使用道具 举报

36#
无效楼层,该帖已经被删除
37#
canyi 发表于 2019-3-16 23:35
你的附件下了打不开

38#
zcy5621194 发表于 2019-3-21 12:55 | 只看该作者
我顶楼主,我想问个问题,就是esp8266如何发送数据给51单片机
回复

使用道具 举报

39#
fanxiaoer 发表于 2019-3-22 15:06 | 只看该作者
太感谢您的帮助了
回复

使用道具 举报

40#
JC111111 发表于 2019-3-23 16:04 | 只看该作者
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51Hei单片机16群 联系QQ:125739409;技术交流QQ群7344883

Powered by 单片机教程网

快速回复 返回顶部 返回列表