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

连线图


可以通过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连接,从这一点切入,很快整个框架就展开了。

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


                                                           

作者:

        油鹿







猜你喜欢

转载自blog.csdn.net/changer_WE/article/details/78862438
今日推荐