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

简介: http://www.cnblogs.com/yangfengwu/p/8759294.html  如不做任何说明默认最头上的链接为上一篇链接,末尾的链接为下一篇链接  先把源码和资料链接放到这里   链接:https://pan.

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_
#endif

sbit 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://www.cnblogs.com/yangfengwu/p/8780182.html

目录
相关文章
|
13天前
|
消息中间件 安全 Unix
SSH配置多台服务器之间的免密登陆以及登陆别名
SSH配置多台服务器之间的免密登陆以及登陆别名
25 1
|
28天前
|
弹性计算
2024年阿里云服务器不同实例规格与配置实时优惠价格整理与分享
2024年阿里云服务器的优惠价格新鲜出炉,有特惠云服务器也有普通优惠价格,本文为大家整理汇总了2024年阿里云服务器的优惠价格,包含特惠云服务器和其他配置云服务器的优惠价格。以便大家了解自己想购买的云服务器选择不同实例规格和带宽情况下的价格,仅供参考。
2024年阿里云服务器不同实例规格与配置实时优惠价格整理与分享
|
2天前
|
API 开发者
免费邮箱API发送邮件测试调试的方法和步骤
本文介绍了使用免费邮箱API如aoksend、Mailgun、SMTP2GO发送邮件的测试调试步骤:选择合适的API,获取访问密钥,配置邮件参数,编写测试代码,调试和测试,查看发送日志,以及优化改进邮件发送功能,确保其稳定运行。
|
11天前
|
存储 弹性计算 安全
阿里云服务器2核2G、2核4G配置最新租用收费标准及活动价格参考
2核2G、2核4G配置是很多个人和企业建站以及部署中小型的web应用等场景时首选的云服务器配置,这些配置的租用价格也是用户非常关心的问题,本文为大家整理汇总了2024年阿里云服务器2核2G、2核4G配置不同实例规格及地域之间的收费标准,同时整理了这些配置最新活动价格,以供大家参考和选择。
阿里云服务器2核2G、2核4G配置最新租用收费标准及活动价格参考
|
13天前
|
域名解析 网络协议 应用服务中间件
阿里云服务器配置免费https服务
阿里云服务器配置免费https服务
|
16天前
|
安全 关系型数据库 MySQL
国产麒麟服务器等保二级 配置规范(一)
国产麒麟服务器等保二级 配置规范(一)
33 0
|
16天前
|
数据采集
robots.txt配置 减小服务器压力
robots.txt配置 减小服务器压力
13 0
|
27天前
|
网络协议 Linux 网络安全
Linux服务器DNS服务器配置实现bind的正向解释和反向解释
Linux服务器DNS服务器配置实现bind的正向解释和反向解释
17 0
|
29天前
|
弹性计算 网络安全 虚拟化
ECS数据问题之升级配置预防数据丢失如何解决
ECS(Elastic Compute Service,弹性计算服务)是云计算服务提供商提供的一种基础云服务,允许用户在云端获取和配置虚拟服务器。以下是ECS服务使用中的一些常见问题及其解答的合集:
|
29天前
|
弹性计算 Kubernetes 安全
ECS选型推荐配置
在构建Kubernetes集群时,应避免使用过多小规格ECS,因它们可能带来网络限制、容量不足和资源碎片化问题。采用大规格ECS能提升网络性能,优化镜像拉取效率。选择Master节点时,要考虑集群规模,生产环境建议选择较高规格。Worker节点推荐使用CPU≥4核、内存≥8GiB的ECS,根据集群总核数和容错率来决定节点数量。当规模达1000核,可选用裸金属神龙服务器,它提供超强网络、零计算抖动和安全性能,适合大促等需快速扩展的场景。
26 1

热门文章

最新文章