2015-12-08 79 views
0

有人知道我可以做一個正確的交際與esp8266和APK(TCP服務器< - > TCP客戶端)的Arduino + Esp8266 + APK(TCP服務器 - 客戶端)

這裏的問題是: enter image description here

我發送的值和esp8266不會很好地讀取它;

的Arduino bauidio:115200 esp8266 baudio:115200

APK:發送味精像5;德爾; 45(速度,狀態,servo_position) 這是我的車的代碼(TCP服務器):

#include <SoftwareSerial.h> 
#include <Servo.h> 

#define M_ATRAS 4 
#define M_ADELANTE 5 
#define M_VELOCIDAD 6 

Servo servo; // Crea un Objeto servo 
SoftwareSerial ESP8266(3,2); //1)RX-> Azul, 2)TX->Amarillo 

String mar; 
int vel; 
int rot; 

void setup() 
{ 
    Serial.begin(9600); 
    ESP8266.begin(115200); 
    Serial.println("Iniciando..."); 

    comandoESP("AT+RST"); // reset module 
    comandoESP("AT+CWMODE=3"); // configure as access point 
    //comandoESP("AT+CWSAP=\"ESP\",\"1234567890\",3,3"); //SSID,PASSWORD,CHANNEL,PASSWORD-ENCRYPATION(0=NO PASSWORD)            //0 is encryption type like 0 = Open, 2 =WPA_PSK, 3 = WPA2_PSK, 4 = WPA_WPA2_PSK 
    comandoESP("AT+CWJAP=\"tfh\",\"fggrtfdfgdtg\""); 
    comandoESP("AT+CIPMUX=1"); // configure for multiple connections 
    comandoESP("AT+CIPSERVER=1,400"); // turn on server on port x 

    Serial.println("Servidor TCP ON..."); 

    pinMode(M_VELOCIDAD, OUTPUT); 
    pinMode(M_ATRAS,OUTPUT); 
    pinMode(M_ADELANTE,OUTPUT); 
    velocidad(0); 
    servo.attach(7); // Selecionamos el pinde control para el servo Rango: 0<->155 
    Serial.println("Posicion delservo: "+String(servo.read())); 
} 

void loop() 
{ 
    if(ESP8266.available()) 
    { 
    if(ESP8266.findUntil("+IPD,",".")) 
    { 
     vel=ESP8266.readStringUntil(';').toInt(); 
     mar=ESP8266.readStringUntil(';'); 
     rot=ESP8266.readStringUntil(';').toInt(); 
     velocidad(vel); 
     marcha(mar); 
     rotacion(rot); 
     Serial.println(String(vel)+"-"+mar+"-"+String(rot)); 
    }   
    } 
} 

void marcha(String tipo){ 
    if(tipo == "del") 
    { 
    //Serial.println("Adelante?"); 
    digitalWrite(M_ATRAS,LOW); 
    digitalWrite(M_ADELANTE,HIGH); 
    } 
    else if(tipo == "tra") 
    { 
    //Serial.println("Atras?"); 
    digitalWrite(M_ATRAS,HIGH); 
    digitalWrite(M_ADELANTE,LOW); 
    } 
} 
void velocidad(int v){ 
    //Serial.println("Velocidad: "+String(v)); 
    analogWrite(M_VELOCIDAD, v); 
} 

void rotacion(int r){ 
    int rot =map(r,-10, 10, 125, 0); //mapeamos los valores que puede tener el acelerometro a los valores que puede tener el servo 
    //Serial.println("Acelerometro: "+String(r)+" Servo: "+String(rot)); 
    servo.write(rot); 
} 
void comandoESP(String cmd) 
{ 
    ESP8266.println(cmd); 

    if(ESP8266.available()) 
    Serial.println(ESP8266.readStringUntil(14)); 

    delay(1000*3); //3seg 
} 
+0

可能是波特率問題。芯片可以提供波特率,但由於其時鐘頻率而具有一些錯誤率。嘗試使用替代性較低的波特。 –

回答

0

不用編寫自己的AT命令,而是使用庫並使用虛擬串行。

WeeESP8266是一個不錯的圖書館。請參閱我的post關於如何整合在一起。

+0

嗨,我嘗試在arduino uno中使用該庫,但沒有發現gertter方法getLocalIP,或getVersion,...和someime另一個功能給我錯誤,我需要重新啓動arduino。 – gonmaster

+0

解決了,如果我改成19200 baudios arduino和esp8266它工作完美! – gonmaster