在 ESP32 模块中从 ESP32 向 Android 发送数据(通过 SPI 协议获取)时,如何解决数据不匹配问题?

问题描述 投票:0回答:0

首先,我通过 SPI 协议获取数据,然后将这些数据发送到 android。但问题是向 android 发送数据需要一些时间(毫秒),然后通过 SPI 获取的数据在数组索引中不匹配。

/*********************************************************************************/
#include <ESP32SPISlave.h>
#include <WiFi.h>

ESP32SPISlave slave;

#define StatusLED 27
const char* ssid     = "YOUR_ID";
const char* password = "YOUR_PASSWORD";

WiFiServer server(80);

IPAddress local_IP(192,168,3,14);
IPAddress gateway(192,168,3,5);
IPAddress subnet(255,255,255,0);

static constexpr uint32_t BUFFER_SIZE {10};
uint8_t spi_slave_tx_buf[BUFFER_SIZE];
uint8_t spi_slave_rx_buf[BUFFER_SIZE];
uint8_t spi_slave_rx_Localbuf[BUFFER_SIZE];
uint32_t Client_buf[4];
bool WIFI_Flag;

byte count = 0;

void setup() {
    Serial.begin(115200);
    delay(2000);

    // LED init
    pinMode(StatusLED, OUTPUT);

    // HSPI = CS: 15, CLK: 14, MOSI: 13, MISO: 12 -> default
    // VSPI = CS: 5, CLK: 18, MOSI: 23, MISO: 19
    slave.setDataMode(SPI_MODE0);
    slave.begin();

    // clear buffers
    memset(spi_slave_tx_buf, 0, BUFFER_SIZE);
    memset(spi_slave_rx_buf, 0, BUFFER_SIZE);

    // We start by connecting to a WiFi network

  Serial.print("Setting AP (Access Point)…");
  Serial.println(WiFi.softAPConfig(local_IP,gateway,subnet)?"Ready" : "Failed!");

  //*server = start_webserver();
  Serial.print("Starting Access Point)…");
  Serial.println( WiFi.softAP(ssid, password)?"Ready" : "Failed!");
  
  Serial.print("AP IP address: ");
  Serial.println(WiFi.softAPIP());
  server.begin();

}

void loop() {
    // Switch OFF LED
    // Switch ON LED
    digitalWrite(StatusLED, HIGH);  // turn the LED on (HIGH is the voltage level)
    
    
    if (slave.remained() == 0) {
        slave.queue(spi_slave_rx_buf, spi_slave_tx_buf, BUFFER_SIZE);
    }  

    // if transaction has completed from master,
    // available() returns size of results of transaction,
    // and buffer is automatically updated

    if (slave.available()) {

        // Switch ON LED
        digitalWrite(StatusLED, LOW);  // turn the LED off (LOW is the voltage level)  
        

        if(count != 0)
        {
          switch(count)
                {
                  case 1: {Client_buf[0]   =  spi_slave_rx_buf[0]; break;}
                  case 2: {Client_buf[0]  |=  spi_slave_rx_buf[0] << 8; break;}
                  case 3: {Client_buf[1]   =  spi_slave_rx_buf[0]; break;}
                  case 4: {Client_buf[1]  |=  spi_slave_rx_buf[0] << 8; break;}
                  case 5: {Client_buf[2]   =  spi_slave_rx_buf[0]; break;}
                  case 6: {Client_buf[2]  |=  spi_slave_rx_buf[0]<<8;  break;}
                  case 7: {Client_buf[3]   =  spi_slave_rx_buf[0]; break;}
                  case 8: {Client_buf[3]  |=  spi_slave_rx_buf[0]<<8; WIFI_Flag = 1; break;}
                }
        }
       count++;
        
        slave.pop();
    }

        if(WIFI_Flag)
        {
          WiFiClient client = server.available();     
          
          client.println("HTTP/1.1 200 OK");
          client.println("Content-type:text/html");
          client.println("");
                   
            client.print(Client_buf[0]); 
            client.print(","); 
            client.print(Client_buf[1]); 
            client.print(","); 
            client.print(Client_buf[2]); 
            client.print(","); 
            client.print(Client_buf[3]); 
          WIFI_Flag = 0;
          count = 0;
        }        
}
/*********************************************************************************/

我试图修复数组索引中的数据不匹配,但我无法解决这个问题。那么,你能帮我解决这个问题吗

c++ wifi esp32 spi
© www.soinside.com 2019 - 2024. All rights reserved.