乐鑫技术交流
直播中

王磊

7年用户 1540经验值
私信 关注
[问答]

ESP-12服务器停止接收来自Mobil App客户端的信息要怎么处理?

我正在使用 ESP-12 作为接收和响应移动应用程序的服务器。它接收并响应最多 4 个查询(有时只有一个,有时是 2-4 个),但随后停止接收。如果我断开连接并重新连接,它将比以前少接收/响应 1 个命令。有人对如何解决这个问题有想法吗?
我基本上是在模拟 WiFi OBD/ELM327 模块并向应用程序(例如 Torque)提供响应。我的代码如下:
#include  
const char *ssid = "ELMSim";
const char *OKresponse = "OK\r";
const char *ELMresponse = "ELM327 v1.5\r";
const char *CMD = ">\r";
WiFiServer服务器(35000);
//调整值的锅
int RPMsensorPin = 0;

int RPMtxValue = 0;
IP 地址 myIP(192, 168, 4, 1);
void setup() {
  Serial.begin(38400);
  延迟(100);
  序列号.println();
  Serial.println("正在配置接入点...");
  WiFi.mode(WIFI_AP_STA);
  WiFi.softAPConfig(myIP, myIP, IPAddress(255, 255, 255, 0)); // 子网 FF FF FF 00
  WiFi.softAP(ssid);
  Serial.println("AP IP地址:");
  Serial.println(我的 IP);
  服务器.开始();
}
void loop() {
  WiFiClient client = server.available();
  如果(客户端){
    延迟(10);
    Serial.println("客户端已连接");
    客户端.println(CMD);
    while(client.connected()) {
      延迟(10);
      while(client.available()){
         String RHRequest = client.readStringUntil('\r');
         Serial.println(RHRequest);
      如果(RHRequest.equals(“AT Z”)){
        延迟(10);
        client.println(ELMresponse);
        Serial.print("ELMSim 发送的响应...");
        Serial.println(ELMresponse);
        延迟(10);
        客户端.println(CMD);
        }
      else if(RHRequest.equals("AT SP 0")) {
        client.println(RHRequest);
        Serial.print("ELMSim 发送的响应...");
        Serial.println(RHRequest);
        延迟(10);
        client.println(OKresponse);
        序列号.print("
        Serial.println(OKresponse);
        延迟(10);
        客户端.println(CMD);
        Serial.print("ELMSim 发送的响应...");
        序列号.println(CMD);
        }
      else if(RHRequest.equals("AT AL")) {
        client.println(RHRequest);
        Serial.print("ELMSim 发送的响应...");
        Serial.println(RHRequest);
        延迟(10);
        client.println(OKresponse);
        Serial.print("ELMSim 发送的响应...");
        Serial.println(OKresponse);
        延迟(10);
        客户端.println(CMD);
        Serial.print("ELMSim 发送的响应...");
        序列号.println(CMD);

      else if(RHRequest.equals("AT E0")) {
        client.println(RHRequest);
        Serial.print("ELMSim 发送的响应...");
        Serial.println(RHRequest);
        延迟(10);
        client.println(OKresponse);
        Serial.print("ELMSim 发送的响应...");
        Serial.println(OKresponse);
        延迟(10);
        客户端.println(CMD);
        Serial.print("ELMSim 发送的响应...");
        序列号.println(CMD);
        }
      else if(RHRequest.equals("AT S0")) {
        client.println(OKresponse);
        Serial.print("ELMSim 发送的响应...");
        Serial.println(OKresponse);

        客户端.println(CMD);
        Serial.print("ELMSim 发送的响应...");
        序列号.println(CMD);
        }
      else if(RHRequest.equals("AT H0")) {
        client.println(OKresponse);
        客户端.println(CMD);
        }
      else if(RHRequest.equals("AT ST FF")) {
        client.println(OKresponse);
        客户端.println(CMD);
        }
      else if(RHRequest.equals("01 00")) {
        client.println("410080000001 \r");
        延迟(100);
        client.println("4100BFFFB993 \r");
        }
      //else if(RHRequest.equals("01 0C")) {
//string rpmread = (a0value,
//rpmsend = concat 41010,rpmread
client.flush();
      }
      }   }

                 
  }

回帖(1)

陶醉了的猫

2024-3-29 15:31:56
问题可能是与您的代码或网络设置有关。以下是一些可能的解决方案:

1. 检查您的代码:请确保您的代码不会阻塞。如果您的代码在等待数据时阻塞,服务器将无法继续接收数据。您可以尝试使用非阻塞代码或将其放在单独的线程中。

2. 检查您的网络设置:请确保您的 ESP-12 和移动应用程序之间的网络连接稳定。如果连接不稳定,您可能会失去数据包或接收/发送错误的数据包。您可以尝试增强您的网络信号或使用更可靠的网络连接。

3. 重启您的设备:如果您的 ESP-12 停止接收数据,您可以尝试重新启动设备。这可能会解决一些网络问题。

4. 调试您的代码:您可以输出调试信息,以便了解您的代码中出现了什么问题。您可以使用 Serial.print() 在串行监视器中输出调试信息。

希望这些解决方案能对您有所帮助。如果问题仍然存在,请尝试进一步调试或咨询专业人员。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分