博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
7-51单片机ESP8266学习-AT指令(测试TCP服务器--51单片机程序配置8266,用手机TCP调试助手发信息给单片机控制小灯的亮灭)...
阅读量:6446 次
发布时间:2019-06-23

本文共 9195 字,大约阅读时间需要 30 分钟。

 如不做任何说明默认最头上的链接为上一篇链接,末尾的链接为下一篇链接

 

 

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

 

 

 

链接: 密码: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();//复位8266        DelayMs(3000);//等待3S        if(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();//复位8266        DelayMs(3000);//等待3S        if(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://zivwo.baihongyu.com/

你可能感兴趣的文章
每天学一点Scala之 Currying函数
查看>>
Duplicate standby database from active database
查看>>
**tomcat简介之web.xml详解
查看>>
find命令之xargs
查看>>
Linux LVM逻辑卷详解
查看>>
supervisor 进程管理工具
查看>>
oracle11g dataguard物理备库搭建(关闭主库cp数据文件到备库)
查看>>
用jQuery向div中添加Html文本内容
查看>>
配置Tomcat监听80端口、配置Tomcat虚拟主机、Tomcat日志
查看>>
cell smart file creation等待事件
查看>>
buffer和cache的区别
查看>>
探索字符截取命令之---awk命令
查看>>
iostat
查看>>
php binary path: the path to your php binary file (may require a php recompile to get this file)
查看>>
虚拟化是人类新生产方式的载体
查看>>
C语言读写文件
查看>>
Set VM RDM disk to Round Bobin and set IOPS path to 1
查看>>
Ext.query选择器的一些用法
查看>>
CentOS 6.7 FTP安装配置之vsftp
查看>>
基于nginx+keepalived架构实现的完整过程
查看>>