http://www.cnblogs.com/yangfengwu/p/8759294.html

源码链接:https://pan.baidu.com/s/1wT8KAOIzvkOXXNpkDI7E8g
提取码:1q9y

自己写好了51采集DHT11的程序,在这个的基础上一点一点的写,对了,自己的这一系列的文章不是讲很基础很基础的内容,这一系列更注重于应用,如果要学基础的请等待自己的51单片机开发板的基础教程...

第一步做的是配置好51单片机的指令

咱们在单片机一起动的时候,先控制8266的复位引脚为低电平 让模块复位,等待3S后判断串口接收的数据有没有ready,

有的话就执行下一步,没有的话再让模块复位,一直这样循环.

然后发送AT+CIPMUX=1 启动多连接,等待1S判断是不是接收到OK,没有接收到再发一次,如果超过三次,重新开始,接收到执行下一步

然后发送AT+CIPSERVER=1,1001 启动TCP服务器,等待1S判断是不是接收到OK,没有接收到再发一次,如果超过三次,重新开始,接收到执行下一步

启动服务器成功以后就进入while(1) 循环,

接收到数据  0xaa,0x55,0x01,0x01  则发送自己的温湿度数据   0xaa,0x55,温度(16进制表示),湿度(16进制表示)

假设 接收到 0xaa,0x55,0x01,0x01   温度10度,湿度50%       0xaa,0x55,,0x01,0x0a,0x32

这一节不加任何的校验位,后期再加

接收到数据  0xaa,0x55,0x02,0x00   控制小灯熄灭

接收到数据  0xaa,0x55,0x02,0xff     控制小灯点亮

APP端也不做任何的回复判断什么的,力求做的简单易懂

先做单片机端,数据回复先用串口助手模拟.....

先打好底

   

设置控制8266复位的引脚为P1_0;

#ifndef ESP8266_H_
#define ESP8266_H_ #ifndef ESP8266_C_
#define ESP8266_C_ extern
#else
#define ESP8266_C_
#endif sbit ESPRst = P1^; #endif

咱们呢直接在主函数里面写,

void main()
{
InitUART();
InitTimer0(); start: /*下面的都是一样的模子,注释就写一个*/
Cnt = ;
while()
{
printf("8266RST\r\n");//这个不是什么指令,我先用串口调试助手模拟看一下发了这条信息,然后我回它
P0_0 = ;//这个灯作为指示灯,发送个指令就亮,
ESP_Rst();//复位8266
DelayMs();//等待3S
if(UsartFlage == )//串口接收到数据
{
    UsartFlage = ;
if(strstr(UsartReceive, "ready"))//有没有ready
{
P0_0 = ;//接收到正确的回复就灭
DelayMs();
break;
}
  }
Cnt ++;
if(Cnt>=)//超过三次重新开始
{
goto start;
}
} Cnt = ;
while()
{
printf("AT+CIPMUX=1\r\n");//启动多连接
P0_0 = ;
DelayMs();
if(UsartFlage == )
{
UsartFlage = ;
if(strstr(UsartReceive, "OK"))
{
P0_0 = ;
DelayMs();
break;
}
}
Cnt ++;
if(Cnt>=)
{
goto start;
}
} Cnt = ;
while()
{
printf("AT+CIPSERVER=1,1001\r\n");//创建服务器
P0_0 = ;
DelayMs();
if(UsartFlage == )
{
UsartFlage = ;
if(strstr(UsartReceive, "OK"))
{
P0_0 = ;
DelayMs();
break;
}
}
Cnt ++;
if(Cnt>=)
{
goto start;
}
} /*让小灯闪一闪,算是说明正确执行了把*/
P0_0 = ;
DelayMs();
P0_0 = ;
DelayMs();
P0_0 = ;
DelayMs();
P0_0 = ;
DelayMs();
P0_0 = ;

   

算啦全复制粘贴过来

#define MAIN_C_
#include "include.h" /**
* 介绍: 主函数
* 说明: 每间隔1S发送一次温湿度数据
* 说明: 返回串口接收到的数据,发送方式为中断发送
* 说明: None
* 说明: None
* 支持: QQ946029359 --群 607064330
* 淘宝: https://shop411638453.taobao.com/
* 作者: 小五
**/ unsigned char Cnt = ;
unsigned char ConnectID = ;
unsigned char i=;
void main()
{
InitUART();
InitTimer0(); start: /*下面的都是一样的模子,注释就写一个*/
Cnt = ;
while()
{
printf("8266RST\r\n");//这个不是什么指令,我先用串口调试助手模拟
P0_0 = ;//这个灯作为指示灯,发送个指令就亮,
ESP_Rst();//复位8266
DelayMs();//等待3S
if(UsartFlage == )//串口接收到数据
{
    UsartFlage = ;
if(strstr(UsartReceive, "ready"))//有没有ready
{
P0_0 = ;//接收到正确的回复就灭
DelayMs();
break;
}
  }
Cnt ++;
if(Cnt>=)//超过三次重新开始
{
  goto start;
  }
} Cnt = ;
while()
{
printf("AT+CIPMUX=1\r\n");//启动多连接
P0_0 = ;
DelayMs();
if(UsartFlage == )
{
     UsartFlage = ;
if(strstr(UsartReceive, "OK"))
{
P0_0 = ;
DelayMs();
break;
}
  }
Cnt ++;
if(Cnt>=)
{
  goto start;
  }
} Cnt = ;
while()
{
printf("AT+CIPSERVER=1,1001\r\n");//创建服务器
P0_0 = ;
DelayMs();
if(UsartFlage == )
{
    UsartFlage = ;
if(strstr(UsartReceive, "OK"))
{
P0_0 = ;
DelayMs();
break;
}
}
Cnt ++;
if(Cnt>=)
{
  goto start;
  }
} /*让小灯闪一闪,算是说明正确执行了把*/
P0_0 = ;
DelayMs();
P0_0 = ;
DelayMs();
P0_0 = ;
DelayMs();
P0_0 = ;
DelayMs();
P0_0 = ; while()
{
  DHT11_Receive(); DelayMs(); printf("data;T=%d,H=%d\r\n",(int)DHT11Data[],(int)DHT11Data[]); // if(UsartFlage == 1)//返回接收的数据
// {
// UsartFlage = 0;
//
// for(i=0;i<10;i++)//找到开始的数据位置,有的固件数据前头有换行,有的没有
// {
// if(UsartReceive[i]=='+' && UsartReceive[i+1]=='I'&& UsartReceive[i+2]=='P')//判断数据的头
// {
// ConnectID = UsartReceive[i+5];//得到是几号连接的
// if(ConnectID>=0x30 && ConnectID<=0x34)//得到的ID号有没有越界
// {
// for(i=6;i<15;i++)//找到 : 在哪里,才知道真实数据在哪里
// {
// if(UsartReceive[i] == ':')
// {
// if(UsartReceive[i+1]==0xaa && UsartReceive[i+2]==0x55)
// {
// switch(UsartReceive[i+3])
// {
// case 0x01: break;//发送温湿度数据
// case 0x02: if(UsartReceive[i+4] == 0x00)
// {
// P0_0 = 0;
// }
// else if(UsartReceive[i+4] == 0xff)
// {
// P0_0 = 1;
// }
// break;//发送温湿度数据
//
// default:break;
// }
// break;//结束for(i=6;i<15)
// }
// }
// }
//
// break;//结束for(i=0;i<10;i++)
// }
// }
// } //} }
}

把现在的程序下进去,然后测试

现在说一下接收数据

修改一下主while(1)循环函数

    while()
{
  DHT11_Receive(); // DelayMs(1000);
//
// printf("data;T=%d,H=%d\r\n",(int)DHT11Data[0],(int)DHT11Data[2]); if(UsartFlage == )//返回接收的数据
{
   UsartFlage = 0;for(i=;i<;i++)//找到开始的数据位置,有的固件数据前头有换行,有的没有
{
if(UsartReceive[i]=='+' && UsartReceive[i+]=='I'&& UsartReceive[i+]=='P')//判断数据的头
{
ConnectID = UsartReceive[i+];//得到是几号连接的
if(ConnectID>=0x30 && ConnectID<=0x34)//得到的ID号有没有越界
{
for(i=;i<;i++)//找到 : 在哪里,才知道真实数据在哪里
{
if(UsartReceive[i] == ':')
{
if(UsartReceive[i+]==0xaa && UsartReceive[i+]==0x55)
{
switch(UsartReceive[i+])
{
case 0x01: break;//发送温湿度数据
case 0x02: if(UsartReceive[i+] == 0x00)
{
P0_0 = ;
}
else if(UsartReceive[i+] == 0xff)
{
P0_0 = ;
}
break;//发送温湿度数据 default:break;
}
break;//结束for(i=6;i<15)
}
}
} break;//结束for(i=0;i<10;i++)
}
}
   } } }

wifi接受到数据发给单片机的格式

  

但是呢有的固件,是没有前面的换行的

所以我的程序

接着呢我要知道我的数据在哪里,

把现在的程序下载到单片机里面

别忘了

电脑和单片机串口通信

单片机和WIFI模块通信

电脑和WIFI模块通信

然后把跳线帽跳到中间,让单片机和WIFI模块进行通信

把WIFI模块的RST引脚接到单片机的P1_0

复位一下单片机,也可以不用

手机连接无线

这篇先写到这里,先让大家消化消化,其实AT指令看似简单,,其实很麻烦

下一篇连接

http://www.cnblogs.com/yangfengwu/p/8780182.html

5-51单片机ESP8266学习-AT指令(8266TCP服务器--用手机TCP调试助手发信息给单片机控制小灯的亮灭)的更多相关文章

  1. 6-51单片机ESP8266学习-AT指令(8266TCP服务器--做自己的AndroidTCP客户端发信息给单片机控制小灯的亮灭)

    http://www.cnblogs.com/yangfengwu/p/8776712.html 先把源码和资料链接放到这里 链接: https://pan.baidu.com/s/1jpHZjW_7 ...

  2. 7-51单片机ESP8266学习-AT指令(8266TCP服务器,编写自己的C#TCP客户端发信息给单片机控制小灯的亮灭)

    http://www.cnblogs.com/yangfengwu/p/8780182.html 自己都是现做现写,如果想知道最终实现的功能,请看最后 先把源码和资料链接放到这里 链接: https: ...

  3. 8-51单片机ESP8266学习-AT指令(单片机采集温湿度数据通过8266发送给C#TCP客户端显示)

    http://www.cnblogs.com/yangfengwu/p/8785516.html 先写单片机端的程序 先把源码和资料链接放到这里 链接: https://pan.baidu.com/s ...

  4. 10-51单片机ESP8266学习-AT指令(ESP8266连接路由器,建立TCP服务器,分别和C#TCP客户端和AndroidTCP客户端通信+花生壳远程通信)

    http://www.cnblogs.com/yangfengwu/p/8871464.html 先把源码和资料链接放到这里 源码链接:https://pan.baidu.com/s/1wT8KAOI ...

  5. 1-51单片机ESP8266学习-AT指令(开发板介绍)

    51单片机+ESP8266开发教程(AT指令篇) 开发板资源分布: 开发板部分原理图: 1--通信下载 2--51单片机 3--ESP8266(WIFI模块) 4--DHT11(温湿度传感器) 5-- ...

  6. 9-51单片机ESP8266学习-AT指令(单片机采集温湿度数据通过8266发送给AndroidTCP客户端显示)

    http://www.cnblogs.com/yangfengwu/p/8798512.html 补充:今天答应了一个朋友写一下如果单片机发过的是字符串应该怎么解析,答应了今天写,哦哦哦是明天了,闲话 ...

  7. 11-51单片机ESP8266学习-AT指令(ESP8266作为TCP客户端,连接TCP服务器,用串口调试助手和手机TCP调试助手测试)

    写完题目刚想起来一件事情,如果手机作为客户端(不连接路由器的情况下),手机连接模块的无线会分配一个IP地址,,,这个IP地址事先我也不知道....我先看看AT指令里面有没有一个指令可以打印一下连接自己 ...

  8. 2-51单片机ESP8266学习-AT指令(开发板51单片机自动冷启动下载原理)

    前言:了解就行,不必深究 上一篇链接 http://www.cnblogs.com/yangfengwu/p/8720148.html 源码链接:https://pan.baidu.com/s/1wT ...

  9. 12,13,14节-51单片机ESP8266学习-AT指令(暂停更新)需要整理

    从这一节开始,以视频加源码的形式,后期视频和程序将放在链接中 资料链接 链接: https://pan.baidu.com/s/1jpHZjW_7pQKNfN9G4B6ZjA     密码:nhn3  ...

随机推荐

  1. vue实现倒计时的插件 时间戳 刷新 跳转 都不影响

    工作当中需要开发一个倒计时插件,于是开始网上先拿来主义,发现好多倒计时的插件,刷新都会变成从头再来,于是自己用vue2.0写了一个插件,测试已经通过,直接上代码 如下是组件代码: <templa ...

  2. 设计模式(20)--State(状态模式)--行为型

    作者QQ:1095737364    QQ群:123300273     欢迎加入! 1.模式定义: 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式 ...

  3. HTML(5)基础

    1.html常用标签 <pre>...</pre>:标识预定义文本 <a>是anchor的缩写,<a>标签定义锚点和超链接,<a>常与hre ...

  4. php递归获取无限分类菜单

    从数据库获取所有菜单信息,需要根据id,pid字段获取主菜单及其子菜单,以及子菜单下的子菜单,可以通过函数递归来实现. <?php class Menu { public $menu = arr ...

  5. jQuery星级评论表单美化代码

    最近正在做php第二阶段的项目,由于我们小组做的是游戏评论网站,所以需要用到评分评论的页面,这里我做了个星级评论表单 1.首先,我们需要引入一个jQuery文件,代码如下: /*! * jQuery ...

  6. froala富文本编辑器与golang、beego,脱离ueditor苦海

    一直用百度的ueditor,可是阿里云这种"wo chuo"的云上部署的beego做的服务,总是出现ueditor.all.min.js语法错误,清理浏览器缓存后又会好起来.本地调 ...

  7. C语言中数据类型的本质

    数据类型可以理解为固定内存大小的别名.比如int类型,就是表示占用4字节的内存. 1 数据类型的大小 用sizeof操作符获得数据类型的大小. 比如 int a[5];   sizeof(a)就可以得 ...

  8. 【three.js练习程序】创建地球贴图

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  9. python之lambda函数/表达式

    lambda函数也叫匿名函数,允许快速定义单行函数.通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数. 格式 lambda argument_list: express ...

  10. 【SPL标准库专题(8)】 Datastructures:SplFixedArray

    SplFixedArray主要是处理数组相关的主要功能,与普通php array不同的是,它是固定长度的,且以数字为键名的数组,优势就是比普通的数组处理更快. 类摘要 SplFixedArray im ...