android客服端+eps8266+单片机+路由器之远程控制系统

用android客服端+eps8266+单片机+路由器做了一个远程控制的系统,因为自己是在实验室里,所以把实验室的门,灯做成了远程控制的。

控制距离有多远------只能说很远很远,只要你手机能上网的地方,不对应该是只要能打电话的地方,不对应该是只要是移动网(我用的是移动的卡)覆盖的地方,

这篇只说明怎么样才能实现远程通信(在路由器上怎样设置,wifi模块eps8266怎样设置),最后会贴上单片机,android的源码

请事先参考我的前几篇文章

 

实现远程最好用这两种

最新的学习文章

http://www.cnblogs.com/yangfengwu/category/1187355.html   (持续更新中)

 

http://www.cnblogs.com/yangfengwu/category/1099910.html    (不确定更新)

 

android之WIFI小车编程详述

android 之TCP客户端编程

ESP8266使用详解

 

有人的设置方法介绍

http://www.usr.cn/Faq/146.html

http://www.usr.cn/Faq/148.html

 

另外

ESP8266使用详解中介绍过它的连接路由器的模式,让它连接上路由器后需要做一些设置

 

 

我做的手机tcp客服端

 

关于上面的远程 与 近程连接

远程连接:

当手机是2G,3G,4G上网的时候,或者,连接了wifi模块所连接的路由器的时候,或者所连接的路由器桥接了wifi模块所连接的路由器。

远程连接服务器ip是路由器的公网ip

 

对于通信端口号是设置wifi模块所监听的端口号(它通信的端口号)

unsigned char code CIPSERVER[]="AT+CIPSERVER=1,10000\r\n";//开启服务器模式,端口号10000

 近程连接:

因为我设置了wifi模块AP 兼 Station 模式,所以模块会发出无线信号,我连接它的wifi信号也能完成通信,只不过连接它的wifi信号后,要连接的ip地址为192.168.4.1

好了附上单片机程序,本来我设置了返回数据,但是因为我的灯和门并没有加检测所以后来就去掉了

#define _MAIN_C_
#include "include.h"
sbit L1 = P1^0;
sbit L2 = P1^1;
sbit L3 = P1^2;
sbit L4 = P1^3;
sbit kaiguan = P1^4;
sbit led1 = P1^5;
sbit led2 = P1^6;
//AP
unsigned char code CWMODE2[]="AT+CWMODE=2\r\n";     //设置模块的工作的模式为AP模式

//多连接ap+station模式
unsigned char code CWMODE3[]="AT+CWMODE=3\r\n";     //设置模块的工作的模式为ap+station模式
unsigned char code CWJAP[]="AT+CWJAP=\"TP-LINK_9750\",\"56565888\"\r\n";//设置连接的路由器

unsigned char code RST[]="AT+RST\r\n";                     //重启模块使AT+CWMODE模式生效
unsigned char code CIPMUX[]="AT+CIPMUX=1\r\n";            //启动多连接
unsigned char code CIPSERVER[]="AT+CIPSERVER=1,10000\r\n";//开启服务器模式,端口号10000
//微秒延时
/*
void us_delay(unsigned char t) 
{  
    while(t--); 
} */
//ms秒延时
void Delay_ms(unsigned long ms)
{
    unsigned char i, j,k;
    for(k=0;k<ms;k++)
    {
        _nop_();
        _nop_();
        i = 22;
        j = 128;
        do
        {
            while (--j);
        } while (--i);
    }
}
void delay1s(void)   //误差 -0.00000000024us
{
    unsigned char a,b,c;
    for(c=95;c>0;c--)
        for(b=26;b>0;b--)
            for(a=185;a>0;a--);
}
//ESP8266设置
void ESP8266_Set(unsigned char *puf)
{
    while(*puf!='\0')
    {
        Send_Uart(*puf);
        puf++;
    }
}

//多连接AP模式
void ManyConnect_AP()
{
    P1=0xff;
    //模式ap
    while(1)
    {
        ESP8266_Set(CWMODE2);//返回ok
        delay1s();
        if(Usart_AT_flage ==1)
        {
            if(strstr(Usart_Receive, "OK") )
            {
                Usart_AT_flage = 0;
                L1 = 0;
                break;
            }                
        }
  }
    //复位
    ESP8266_Set(RST);//返回一大溜,不用判断返回
    delay1s();
    delay1s();
    //多连接
    while(1)
    {
        ESP8266_Set(CIPMUX);//返回ok
        delay1s();
        if(Usart_AT_flage ==1)
        {
            if(strstr(Usart_Receive, "OK") )
            {
                Usart_AT_flage = 0;
                L2 = 0;
                break;
            }                
        }
  }
    //启动TCP服务
    while(1)
    {
        ESP8266_Set(CIPSERVER);//返回ok,多了也返回ok
        delay1s();
        if(Usart_AT_flage ==1)
        {
            if(strstr(Usart_Receive, "OK") )
            {
                Usart_AT_flage = 0;
                L3 = 0;
                break;
            }                
        }
  }
}

//多连接AP+Station 模式
void ManyConnect_ap_Station()
{
    P1=0xff;
    //模式3
    while(1)
    {
        ESP8266_Set(CWMODE3);//返回ok
        delay1s();
        if(Usart_AT_flage ==1)//接收完成
        {
            if(strstr(Usart_Receive, "OK") )
            {
                Usart_AT_flage = 0;
                L1 = 0;
                break;
            }                
        }
  }
    //连接路由
    while(1)
    {
        //复位
        ESP8266_Set(RST);//返回一大溜,不用判断返回
        delay1s();
        delay1s();
        delay1s();
        delay1s();
        ESP8266_Set(CWJAP);//返回ok
        delay1s();
        delay1s();
        delay1s();
        delay1s();
        delay1s();
        delay1s();
        delay1s();
        delay1s();
        delay1s();
        delay1s();
        delay1s();
        delay1s();
        delay1s();
        delay1s();
        if(Usart_AT_flage ==1)
        {
            if(strstr(Usart_Receive, "OK") )
            {
                Usart_AT_flage = 0;
                L2 = 0;
                break;
            }    
        }
  }
    //多连接
    while(1)
    {
        ESP8266_Set(CIPMUX);//返回ok
        delay1s();
        if(Usart_AT_flage ==1)
        {
            if(strstr(Usart_Receive, "OK") )
            {
                Usart_AT_flage = 0;
                L3 = 0;
                break;
            }                
        }
  }
    //启动TCP服务
    while(1)
    {
        ESP8266_Set(CIPSERVER);//返回ok,多了也返回ok
        delay1s();
        if(Usart_AT_flage ==1)
        {
            if(strstr(Usart_Receive, "OK") )
            {
                Usart_AT_flage = 0;
                L4 = 0;
                break;
            }                
        }
  }
}

void delay1s500ms(void)   //误差 -0.000000000341us
{
    unsigned char a,b,c;
    for(c=123;c>0;c--)
        for(b=212;b>0;b--)
            for(a=25;a>0;a--);
}

void main()
{
    int i;
    InitUART();
    while(1)
    {
        //ManyConnect_AP();//多连接AP模式
        ManyConnect_ap_Station();//多连接AP+station模式
        while(1)
        {
            //由于消息的开头是+IP  故做此判断,00000000000000000号
            if((Usart_Receive[0]=='+')&&(Usart_Receive[1]=='I')&&(Usart_Receive[2]=='P'))
            {
                if((Usart_Receive[3]=='D')&&(Usart_Receive[5]=='0')&&(Usart_Receive[6]==','))
                {
                    if(Usart_Receive[9]=='1')
                    {
                        kaiguan = 0;
                        delay1s500ms();
                        kaiguan = 1;
                        delay1s();
                        for(i = 0 ; i<20; i++)
                        {
                            Usart_Receive[i]=' ';
                        }
                        
                        //ESP8266_Set("AT+CIPSEND=0,1\r\n");
                        //delay1s();
                        //ESP8266_Set("1");//向服务器发送数据
                        
                        //delay1s();
                        //ESP8266_Set("AT+CIPSEND=0,1\r\n");
                        //delay1s();
                        //ESP8266_Set("1");//向服务器发送数据
                    }
                    if(Usart_Receive[9]=='2')
                    {
                        kaiguan = 0;
                        delay1s500ms();
                        kaiguan = 1;
                        delay1s();
                        for(i = 0 ; i<20; i++)
                        {
                            Usart_Receive[i]=' ';
                        }
                        //ESP8266_Set("AT+CIPSEND=0,1\r\n");
                        //delay1s();
                        //ESP8266_Set("2");//向服务器发送数据
                        
                        //delay1s();
                        //ESP8266_Set("AT+CIPSEND=0,1\r\n");
                        //delay1s();
                        //ESP8266_Set("2");//向服务器发送数据
                    }
                    if(Usart_Receive[9]=='3')
                    {
                        led1 = 0;
                        delay1s();
                        delay1s();
                        //ESP8266_Set("AT+CIPSEND=0,1\r\n");
                        //delay1s();
                        //ESP8266_Set("3");//向服务器发送数据
                        
                        //ESP8266_Set("AT+CIPSEND=0,1\r\n");
                        //delay1s();
                        //ESP8266_Set("3");//向服务器发送数据
                    }
                    if(Usart_Receive[9]=='4')
                    {
                        led1 = 1;
                        delay1s();
                        delay1s();
                        /*
                        ESP8266_Set("AT+CIPSEND=0,1\r\n");
                        delay1s();
                        ESP8266_Set("4");//向服务器发送数据
                        
                        ESP8266_Set("AT+CIPSEND=0,1\r\n");
                        delay1s();
                        ESP8266_Set("4");//向服务器发送数据*/
                    }
                    if(Usart_Receive[9]=='5')
                    {
                        led2 = 0;
                        delay1s();
                        delay1s();
                        /*
                        ESP8266_Set("AT+CIPSEND=0,1\r\n");
                        delay1s();
                        ESP8266_Set("5");//向服务器发送数据
                        
                        ESP8266_Set("AT+CIPSEND=0,1\r\n");
                        delay1s();
                        ESP8266_Set("5");//向服务器发送数据/*/
                    }
                    if(Usart_Receive[9]=='6')
                    {
                        led2 = 1;
                        delay1s();
                        delay1s();
                        /*
                        ESP8266_Set("AT+CIPSEND=0,1\r\n");
                        delay1s();
                        ESP8266_Set("6");//向服务器发送数据
                        
                        ESP8266_Set("AT+CIPSEND=0,1\r\n");
                        delay1s();
                        ESP8266_Set("6");//向服务器发送数据*/
                    }
                }
            }
                //由于消息的开头是+IP  故做此判断,111111111111111111111号
            if((Usart_Receive[0]=='+')&&(Usart_Receive[1]=='I')&&(Usart_Receive[2]=='P'))
            {
                if((Usart_Receive[3]=='D')&&(Usart_Receive[5]=='1')&&(Usart_Receive[6]==','))
                {
                    if(Usart_Receive[9]=='1')
                    {
                        kaiguan = 0;
                        delay1s500ms();
                        kaiguan = 1;
                        delay1s();
                        for(i = 0 ; i<20; i++)
                        {
                            Usart_Receive[i]=' ';
                        }
                    }
                    if(Usart_Receive[9]=='2')
                    {
                        kaiguan = 0;
                        delay1s500ms();
                        kaiguan = 1;
                        delay1s();
                        for(i = 0 ; i<20; i++)
                        {
                            Usart_Receive[i]=' ';
                        }
                        
                    }
                    if(Usart_Receive[9]=='3')
                    {
                        led1 = 0;
                        
                        delay1s();delay1s();
                    }
                    if(Usart_Receive[9]=='4')
                    {
                        led1 = 1;
                        
                        delay1s();delay1s();
                    }
                    if(Usart_Receive[9]=='5')
                    {
                        led2 = 0;
                        
                        delay1s();delay1s();
                    }
                    if(Usart_Receive[9]=='6')
                    {
                        led2 = 1;
                        
                        delay1s();delay1s();
                    }
                }
            }
                //由于消息的开头是+IP  故做此判断,222222222222222号
            if((Usart_Receive[0]=='+')&&(Usart_Receive[1]=='I')&&(Usart_Receive[2]=='P'))
            {
                if((Usart_Receive[3]=='D')&&(Usart_Receive[5]=='2')&&(Usart_Receive[6]==','))
                {
                    if(Usart_Receive[9]=='1')
                    {
                        kaiguan = 0;
                        delay1s500ms();
                        kaiguan = 1;
                        delay1s();
                        for(i = 0 ; i<20; i++)
                        {
                            Usart_Receive[i]=' ';
                        }
                    }
                    if(Usart_Receive[9]=='2')
                    {
                        kaiguan = 0;
                        delay1s500ms();
                        kaiguan = 1;
                        delay1s();
                        for(i = 0 ; i<20; i++)
                        {
                            Usart_Receive[i]=' ';
                        }
                    }
                    if(Usart_Receive[9]=='3')
                    {
                        led1 = 0;
                        
                        delay1s();delay1s();
                    }
                    if(Usart_Receive[9]=='4')
                    {
                        led1 = 1;
                        
                        delay1s();delay1s();
                    }
                    if(Usart_Receive[9]=='5')
                    {
                        led2 = 0;
                        
                        delay1s();delay1s();
                    }
                    if(Usart_Receive[9]=='6')
                    {
                        led2 = 1;
                        
                        delay1s();delay1s();
                    }
                }
            }
                //由于消息的开头是+IP  故做此判断,00000000000000000号
            if((Usart_Receive[0]=='+')&&(Usart_Receive[1]=='I')&&(Usart_Receive[2]=='P'))
            {
                if((Usart_Receive[3]=='D')&&(Usart_Receive[5]=='3')&&(Usart_Receive[6]==','))
                {
                    if(Usart_Receive[9]=='1')
                    {
                        kaiguan = 0;
                        delay1s500ms();
                        kaiguan = 1;
                    delay1s();
                        for(i = 0 ; i<20; i++)
                        {
                            Usart_Receive[i]=' ';
                        }
                    }
                    if(Usart_Receive[9]=='2')
                    {
                        kaiguan = 0;
                        delay1s500ms();
                        kaiguan = 1;
                        delay1s();
                        for(i = 0 ; i<20; i++)
                        {
                            Usart_Receive[i]=' ';
                        }
                    }
                    if(Usart_Receive[9]=='3')
                    {
                        led1 = 0;
                        
                        delay1s();delay1s();
                    }
                    if(Usart_Receive[9]=='4')
                    {
                        led1 = 1;
                        
                        delay1s();delay1s();
                    }
                    if(Usart_Receive[9]=='5')
                    {
                        led2 = 0;
                        
                        delay1s();delay1s();
                    }
                    if(Usart_Receive[9]=='6')
                    {
                        led2 = 1;
                        
                        delay1s();delay1s();
                    }
                }
            }
                //由于消息的开头是+IP  故做此判断,444444444444444444号
            if((Usart_Receive[0]=='+')&&(Usart_Receive[1]=='I')&&(Usart_Receive[2]=='P'))
            {
                if((Usart_Receive[3]=='D')&&(Usart_Receive[5]=='0')&&(Usart_Receive[6]==','))
                {
                    if(Usart_Receive[9]=='1')
                    {
                        kaiguan = 0;
                        delay1s500ms();
                        kaiguan = 1;
                        delay1s();
                        for(i = 0 ; i<20; i++)
                        {
                            Usart_Receive[i]=' ';
                        }
                    }
                    if(Usart_Receive[9]=='2')
                    {
                        kaiguan = 0;
                        delay1s500ms();
                        kaiguan = 1;
                        delay1s();
                        for(i = 0 ; i<20; i++)
                        {
                            Usart_Receive[i]=' ';
                        }
                    }
                    if(Usart_Receive[9]=='3')
                    {
                        led1 = 0;
                        
                        delay1s();delay1s();
                    }
                    if(Usart_Receive[9]=='4')
                    {
                        led1 = 1;
                        
                    delay1s();delay1s();
                    }
                    if(Usart_Receive[9]=='5')
                    {
                        led2 = 0;
                        
                        delay1s();delay1s();
                    }
                    if(Usart_Receive[9]=='6')
                    {
                        led2 = 1;
                        
                        delay1s();delay1s();
                    }
                }
            }
            
        }
    }
}

#define _USART_C_
#include "include.h"
unsigned char Usart_Receive[20]={0};
unsigned char Usart_Cnt=0;
bit Usart_AT_flage;
bit flage;
bit Command_Flag;

void InitUART(void)
{
    TMOD = 0x20;
    SCON = 0x50;
    TH1 = 0xFD;
    TL1 = TH1;
    PCON = 0x00;
    EA = 1;
    ES = 1;
    TR1 = 1;
}

void Send_Uart(unsigned char value) 
{
    ES=0;  //关闭串口中断  
    TI=0;   //清发送完毕中断请求标志位   
    SBUF=value; //发送  
    while(TI==0); //等待发送完毕   
    TI=0;   //清发送完毕中断请求标志位   
    ES=1;  //允许串口中断  
}

void UARTInterrupt(void) interrupt 4
{
    if(RI)
    {
        RI=0;
        Usart_Receive[Usart_Cnt]=SBUF;//接收串口数据
        Usart_Cnt++;//
        //返回数据以回车结尾,有回车,而且数据个数大于2,说明接收到了数据
        if(Usart_Receive[Usart_Cnt-2]=='\r' && Usart_Receive[Usart_Cnt-1]=='\n' && Usart_Cnt >= 2)
        {
            Usart_Cnt = 0;//接收数据计数清零
            Usart_AT_flage = 1;//数据接收成功标志位
        }
        else if(Usart_Cnt > 20)//
        {
            Usart_Cnt = 0;
        }    
    }
}

 

 

#ifndef __USART_H_
#define __USART_H_


#ifndef _USART_C_
#define _USART_ex_ extern
#else
#define _USART_ex_
#endif

_USART_ex_ unsigned char Usart_Receive[20];
_USART_ex_ unsigned char Usart_Cnt;
_USART_ex_ bit Usart_AT_flage;
_USART_ex_ bit Command_Flag;
_USART_ex_ unsigned char UsartData;
_USART_ex_ void InitUART(void);//串口初始化
_USART_ex_ void Send_Uart(unsigned char value); 
#endif

#include <REGX52.H>
#include "USART.h"
#include <string.h>
#include <intrins.h>

完了,,,,,,,

android代码

 

package com.laboratory_control.yang;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;


import android.R.integer;
import android.R.string;
import android.app.Activity;
import