连线图
可以通过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连接,从这一点切入,很快整个框架就展开了。
最后,我得出的结论是对于软硬件的结合一定要有耐心,期间我好几次都不想做了,不过坚持下来就不觉得难了。
作者:
油鹿