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



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

连线图(这个esp8266图不对凑合着看)

 

实际的esp8266引脚图:

 

接线:UTXD —-11号引脚

URXD——10号引脚

CH_PD 和 VCC ——– 3.3v(太高电压会烧)

GND——-GND

 

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

 

需要做的设置就是,用AT指令把hc-05设置为从模式,并且把波特率调成与esp8266相同(我的esp8266默认是115200)

一下是hc05相关指令:

AT+NAME=Bluetooth-Slave 蓝牙名称为Bluetooth-Slave

AT+ROLE=0 蓝牙模式为从模式          AT+ROLE=1 蓝牙模式为主模式

AT+CMODE=0 蓝牙连接模式为任意地址连接模式

AT+PSWD=1234 蓝牙配对密码为1234

AT+UART=9600,0,0 蓝牙通信串口波特率为9600,停止位1位,无校验位

AT+RMAAD 清空配对列表

 

 

 

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


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

 

直接上代码

 

代码有一小部分是参照网上的大神们的代码,写了这几天的代码,最让我头痛的是如何让来自手机的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(115200);//硬串口波特率(arduino上的rx和tx)
while (!Serial) {
; //看端口是否准备好
}
Serial.println(“BT is ready!”);
mySerial.begin(115200);// 软串口的波特率
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连接,从这一点切入,很快整个框架就展开了。

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

 

作者:

油鹿

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

后来又做了一遍这个小功能发现自己竟然不能很快的复制出来,所以又重新完善了这个博客,希望对大家有所帮助!
———————
作者:changer_WE
来源:CSDN
原文:https://blog.csdn.net/changer_WE/article/details/78862438
版权声明:本文为博主原创文章,转载请附上博文链接!