http://www.cnblogs.com/yangfengwu/p/8759294.html  如不做任何说明默认最头上的链接为上一篇链接,末尾的链接为下一篇链接

先把源码和资料链接放到这里

链接:https://pan.baidu.com/s/10MxI8-Q33-M_R2WEHqEi1A 密码:j1sz

自己写好了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_
#endifsbit ESPRst = P1^0;#endif

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

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

   

算啦全复制粘贴过来

#define MAIN_C_
#include "include.h"/**
* 介绍:  主函数
* 说明:  每间隔1S发送一次温湿度数据
* 说明:  返回串口接收到的数据,发送方式为中断发送
* 说明:  None
* 说明:  None
* 支持:  QQ946029359 --群 607064330
* 淘宝:  https://shop411638453.taobao.com/
* 作者:  小五
**/unsigned char Cnt = 0;
unsigned char ConnectID = 0;
unsigned char i=0;
void main()
{InitUART(115200);InitTimer0();start:/*下面的都是一样的模子,注释就写一个*/Cnt = 0;while(1){printf("8266RST\r\n");//这个不是什么指令,我先用串口调试助手模拟P0_0 = 1;//这个灯作为指示灯,发送个指令就亮,ESP_Rst();//复位8266DelayMs(3000);//等待3Sif(UsartFlage == 1)//串口接收到数据{UsartFlage = 0;if(strstr(UsartReceive, "ready"))//有没有ready{P0_0 = 0;//接收到正确的回复就灭DelayMs(500);break;}}Cnt ++;if(Cnt>=3)//超过三次重新开始{goto start;}}Cnt = 0;while(1){printf("AT+CIPMUX=1\r\n");//启动多连接P0_0 = 1;DelayMs(1000);if(UsartFlage == 1){UsartFlage = 0;if(strstr(UsartReceive, "OK")){P0_0 = 0;DelayMs(500);break;}}Cnt ++;if(Cnt>=3){goto start;}}Cnt = 0;while(1){printf("AT+CIPSERVER=1,1001\r\n");//创建服务器P0_0 = 1;DelayMs(1000);if(UsartFlage == 1){UsartFlage = 0;if(strstr(UsartReceive, "OK")){P0_0 = 0;DelayMs(500);break;}}Cnt ++;if(Cnt>=3){goto start;}}/*让小灯闪一闪,算是说明正确执行了把*/P0_0 = 0;DelayMs(200);P0_0 = 1;DelayMs(200);P0_0 = 0;DelayMs(200);P0_0 = 1;DelayMs(200);P0_0 = 0;while(1){DHT11_Receive(); DelayMs(1000);printf("data;T=%d,H=%d\r\n",(int)DHT11Data[0],(int)DHT11Data[2]);//         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(1){DHT11_Receive(); //         DelayMs(1000);
//
//         printf("data;T=%d,H=%d\r\n",(int)DHT11Data[0],(int)DHT11Data[2]);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++)}}}}}

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

  

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

所以我的程序

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

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

别忘了

电脑和单片机串口通信

单片机和WIFI模块通信

电脑和WIFI模块通信

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

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

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

手机连接无线

这篇先写到这里,先让大家消化消化

下一篇连接

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

7-51单片机ESP8266学习-AT指令(测试TCP服务器--51单片机程序配置8266,用手机TCP调试助手发信息给单片机控制小灯的亮灭)相关推荐

  1. 9-51单片机ESP8266学习-AT指令(测试TCP服务器--51单片机程序配置8266,C#TCP客户端发信息给单片机控制小灯的亮灭)...

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

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

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

  3. 1.2、通过WiFi模块连接手机控制小灯的亮灭(AT指令)

    #include<reg52.h> typedef unsigned char u8; typedef unsigned int u16; sbit LED = P0^1;u8 dat; ...

  4. 单片机基础:开关控制LED灯的亮灭

    (一) 单片机的初级运用.通过两个开关来控制LED灯的亮灭.首先要使用Proteus来绘制电路原理图.图中的LED灯为共阴接法.如图: (二)当单片机P3口做输入时,首要让其端口输出1.如图中的P3^ ...

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

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

  6. 3-51单片机ESP8266学习-AT指令(学会刷固件)

    前言:体验一下刷固件(给单片机更新程序) 上一篇链接  http://www.cnblogs.com/yangfengwu/p/8757036.html 源码链接:https://pan.baidu. ...

  7. esp8266与51单片机通信(看完不会你打我)用手机控制led灯的亮灭

    第一步:所需材料: 我录制了关于此课程的视频,在b站,大家可以前往b站观看视频bandicam 2022-05-16 11-45-49-495_哔哩哔哩_bilibili 既然你刷到我这篇学习总结了 ...

  8. 【补作业】msp430单片机(一)控制LED灯的亮灭

    硬件描述 两个LED灯: P1.0接LED1(红),P4.7接LED2(绿). IO口输出高电平时,LED亮 IO口输出低电平时,LED灭 点亮红灯 (ccs中的c语言代码,用430进行调试) P1口 ...

  9. 51单片机主函数实现P1口120ms间隔从P1.7口向右循环进行流水灯每次只能亮一个,进入外部中断是进行120ms的延时灯的亮灭各一次

    51单片机主函数实现P1口120ms间隔从P1.7口向右循环进行流水灯每次只能亮一个,进入外部中断是进行120ms的延时灯的亮灭各一次 #include <reg51.h> #includ ...

最新文章

  1. Python使用matplotlib函数subplot可视化多个不同颜色的折线图、为多个子图添加总标题(main title)
  2. http从发出请求到接收响应的旅行
  3. js等待当前线程内ajax完成,理解javascript定时器中的单线程
  4. 对数据可视化的理解_使数据可视化更容易理解
  5. java ajax 导入excel_Ajax asp.net 导入Excel
  6. linux如何得到本机地址,Linux下如何得到本机所有IP地址及MAC地址
  7. ccd视觉定位教程_CCD视觉检测机有哪些作用?
  8. 【kafka】Kafka中的动态配置源码分析
  9. LeetCode(944)——删列造序(JavaScript)
  10. html重复div绘制,[DIV+CSS]绘制2重交叉表_html/css_WEB-ITnose
  11. 飞机游戏跟踪导弹的算法[C#源码]
  12. 骑士CMS文件包含+getshell漏洞复现(python自动化验证扫描漏洞)
  13. 蚂蚁森林 离线爬虫自动收能量,养小鸡,等各种操作
  14. UE4 更改工程文件名字的方法
  15. java版怎么上hypixel,来场速建吧!Hypixel入驻《我的世界》中国版
  16. python绘制布林带
  17. 东田纳西州立大学计算机排名,东田纳西州立大学如何
  18. ffmpeg硬件解码器的使用
  19. 三星复仇计划开始:苹果一出LTE设备就要起诉它!
  20. Smartbi如何解决传统报表工具制作的问题

热门文章

  1. 06 Jewels and Stones
  2. 获客成本是什么 如何降低获客成本
  3. 图像分类白盒对抗攻击技术总结
  4. [翻译]Popfly系列课程2 - 起程–Popfly Mashup创作工具:即将成为你身边的影院
  5. js中push方法小结
  6. 96-MySQL高级
  7. carsim中质心加速度_carsim输入、输出常用变量
  8. SimpleDateFormat日期格式化顺延,setLenient关闭顺延
  9. 高性能游戏服务器架构设计,一种高性能大型多人在线角色扮演游戏服务器架构设计.doc...
  10. 第四届-模拟智能灌溉系统