【问题标题】:arduino+Esp8266 + apk (TCP server-client)arduino+Esp8266 + apk (TCP server-client)
【发布时间】:2015-12-08 02:33:48
【问题描述】:

有人知道我如何与 esp8266 和 apk(tcp 服务器tcp 客户端)进行正确的通信

问题来了:

我发送了值,而 esp8266 有时读得不好;

arduino bauidio:115200 esp8266 音频:115200

apk: 发送类似 5;del;45 (speed,state,servo_position) 的 msg 这是我的汽车代码(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
}

【问题讨论】:

  • 可能是波特率问题。芯片可以提供波特率,但由于它们的时钟频率而具有一些错误率。尝试使用备用较低波特率。

标签: arduino esp8266


【解决方案1】:

不要编写自己的 AT 命令,而是使用库并使用虚拟串行。

WeeESP8266 是一个不错的库。请参阅我的post,了解如何将所有内容放在一起。

【讨论】:

  • 嗨,我尝试在 arduino uno 中使用该库,但没有找到像 getLocalIP 或 getVersion 之类的 gertter 方法...有时另一个函数给我错误,我需要重新启动 arduino。
猜你喜欢
  • 1970-01-01
  • 2016-08-26
  • 2014-02-28
  • 2015-12-13
  • 1970-01-01
  • 2020-10-28
  • 2019-07-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多