您的位置:首页 > 理论基础 > 计算机网络

手机连接设备的蓝牙向其发送子服务器局域网IP信息,从而esp8266与该服务器建立tcp连接

2017-12-21 12:37 483 查看
连线图

可以通过arduino做一些的应用,重点在代码部分

装逼分割线

————————————————————————————————————————————————————————————————

————————————————————————————————————————————————————————————————

直接上代码

代码有一小部分是参照网上的大神们的代码,写了这几天的代码,最让我头痛的是如何让来自手机的WiFi名字和WiFi密码生效,其实很简单,只需在AT指令最后加上\r\n,这是esp8266对AT指令的识别标志,注意必须按照标准格式,不然指令无效。还有一点就是代码的AT指令发送必须要有时间间隔,让esp8266去处理AT指令,不然会显示设备忙。

我做这个实验时用到了sscom和NetAsist这两个软件,一个是串口监视软件,一个用来建立模拟服务器让esp8266去连接详细的介绍,给个大神的说法(网址):

                                                                            https://www.cnblogs.com/zzb-Dream-90Time/p/6674286.html

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX,Esp8266为软串口

String copy="";

String WiFiName="";bool status1=true;//未赋值时是true

String WiFiPasswd="";bool status2=true;

String Ip="";bool status3=true;

String Port="";bool status4=true;

void setup()

{

Serial.begin(38400);//硬串口波特率(arduino上的rx和tx)

while (!Serial) {

; //看端口是否准备好

}

Serial.println("BT is ready!");

mySerial.begin(38400);// 软串口的波特率

mySerial.println("Esp8266 is ready!");

mySerial.print("AT+CWMODE=1\r\n");//Esp8266进入STA模式,可连接热点和服务器

delay(10);//从手机蓝牙依次输入WiFiName,WiFiPasswd,服务器Ip,服务器Port

}

void ConnectWiFi();

void SingleConnect();

void CreateTCP();

void SerialNet();

void loop() 



if (mySerial.available()){//返回模块(esp8266)状态信息

Serial.write(mySerial.read());

}

while (Serial.available()>0){//if(avaiable()) 只要有到达一个数据就会发送,一个串不行,会形成多次循环

  copy+=char(Serial.read());

  delay(2);//为了更好的接收数据,避免错误

  }

if(copy.length()>0){

if(status1){ //给所需的数据赋值完成后调用CreateTCP()函数建立TCP连接

    WiFiName=copy;

    status1=false;

    copy="";   

  }

  else {

    if(status2){

      WiFiPasswd=copy;

      status2=false;

      copy="";

      ConnectWiFi();

      }

      else{

        if(status3){

          Ip=copy;

          status3=false;

          copy="";

          SingleConnect();

          } 

          else{

            if(status4){

            Port=copy;

            status4=false;

            copy="";            

            CreateTCP(); 

            delay(1000);

            SerialNet();           

            }

            }//end else3       

        }//end else2

  }//end else1

  }//end copy.length()

    delay(10);//延迟一下从而缓解一下模块压力

}

void ConnectWiFi(){

//连接到WiFi

mySerial.print("AT+CWJAP=\"");

mySerial.print(WiFiName);

mySerial.print("\",\"");

mySerial.print(WiFiPasswd);

mySerial.print("\"\r\n");

delay(10); 

  }

void SingleConnect(){

//设置单链接模式及透传模式

mySerial.print("AT+CIPMUX=0\r\n");

delay(10);

mySerial.print("AT+CIPMODE=1\r\n");

delay(10); 

  }

void CreateTCP(){

//连接服务器

mySerial.print("AT+CIPSTART=\"TCP\",\"");

mySerial.print(Ip);

mySerial.print("\",");

mySerial.print(Port);

mySerial.print("\r\n");

delay(10);

  }

void SerialNet(){

//进入透传模式

mySerial.print("AT+CIPSEND\r\n");

delay(10);     
    }

开始的时候,毫无头绪,但是我抓住了一点,就是建立tcp连接,从这一点切入,很快整个框架就展开了。

最后,我得出的结论是对于软硬件的结合一定要有耐心,期间我好几次都不想做了,不过坚持下来就不觉得难了。

                                                           

作者:
        油鹿
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  arduino 蓝牙 手机 tcp wi-fi
相关文章推荐