Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C ESP8266-UART的缓冲区存储容量_C_Esp8266_Uart_Nodemcu - Fatal编程技术网

C ESP8266-UART的缓冲区存储容量

C ESP8266-UART的缓冲区存储容量,c,esp8266,uart,nodemcu,C,Esp8266,Uart,Nodemcu,我在将字符串的值从UART传输到缓冲区时遇到问题。我使用ESP8266从STM32设备接收串行字符串。我总共有600个字符串,还有从STM32设备传输的CSV文件。我对NodeMCU端的每一行都使用了适当的过滤。。。我不知道为什么在300字符串之后,传输到缓冲区的值会发生变化,UART上读取的字符串也会在传输300/305字符串之后发生变化。如果密码有错误,请告诉我 int i,j,k,l=0; int httpCode=0; String fields[24] = {""

我在将字符串的值从UART传输到缓冲区时遇到问题。我使用ESP8266从STM32设备接收串行字符串。我总共有600个字符串,还有从STM32设备传输的CSV文件。我对NodeMCU端的每一行都使用了适当的过滤。。。我不知道为什么在300字符串之后,传输到缓冲区的值会发生变化,UART上读取的字符串也会在传输300/305字符串之后发生变化。如果密码有错误,请告诉我

int i,j,k,l=0;
int httpCode=0;

String fields[24] = {"","month","year","hours","minutes","seconds","rimin","riavg","rimax","yimin","yiavg","yimax","bimin","biavg","bimax","nimin","niavg","nimax","eimin","eiavg","eimax","simin","siavg","simax"};
String element = "API_key=123&mac=0fa&day=";
String postApi1[300];
String postApi2[300];
String str= "";
String str_tx = "";

char char_array[128];
char* token; 
char* rest = char_array;

WiFiClient client;

HTTPClient http;



void setup()
{
  Serial.begin(230400);
  s.begin(9600);
  pinMode(13, INPUT);
  pinMode(15, OUTPUT);
}

void loop() 
{
 if (s.available() >0)
 {
  for(j=0;j<300;j++)
  {
   i=0;
   str = s.readStringUntil('\n');
   Serial.println(str);   
   Serial.println("j");
   postApi1[j]= str;
   Serial.println(postApi1[j]);
   str = "";
  }
  for(k=0;k<300;k++)
  {
   i=0;
   str = s.readStringUntil('\n');
   Serial.println(str);   
   Serial.println("k");
   postApi2[k]= str;
   Serial.println(postApi2[k]);
   str = "";
  }
  
 }

}
inti,j,k,l=0;
int-httpCode=0;
字符串字段[24]={“,”月“,”年“,”小时“,”分“,”秒“,”rimin“,”riavg“,”rimax“,”yimin“,”yiavg“,”yimax“,”bimin“,”biavg“,”bimax“,”nimin“,”niavg“,”nimax“,”eimin“,”eiavg“,”eimax“,”simin“;
String element=“API_key=123&mac=0fa&day=”;
字符串postApi1[300];
字符串postApi2[300];
字符串str=“”;
字符串str_tx=“”;
字符数组[128];
字符*令牌;
char*rest=char\u数组;
无线客户端;
HTTPClient-http;
无效设置()
{
序列号开始(230400);
s、 开始(9600);
pinMode(13,输入);
pinMode(15,输出);
}
void循环()
{
如果(s.可用()>0)
{

对于(j=0;j我认为readStringUtil函数等待终止符字符。是否在第300个字符之后发送“\n”?另外,请尝试在read函数中避免Serial.println,因为print函数非常慢,您可能会错过一些字符。我还将避免两个for循环,而是声明一个变量,计算接收的字节数根据这一点,将“str”保存为“postApi1”或“postApi2”。
还有,“i”变量的用途是什么?

嘿@Andrej我试过你的建议,但效果如下

#include <Arduino.h>

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <SoftwareSerial.h>
#include <ESP8266HTTPClient.h>

#include <WiFiClient.h>

#include <stdio.h>

#include <string.h>

using namespace std;

ESP8266WiFiMulti WiFiMulti;

SoftwareSerial s(13,15); //RX TX
double buff[24]; //Initialized variable to store recieved data
double val;

char c;

int i,j,k,l=0;
int httpCode=0;

String fields[24] = {"","month","year","hours","minutes","seconds","rimin","riavg","rimax","yimin","yiavg","yimax","bimin","biavg","bimax","nimin","niavg","nimax","eimin","eiavg","eimax","simin","siavg","simax"};
String element = "API_key=123&mac=0fa&day=";
String postApi[616];
String str= "";
String str_tx = "";

char char_array[128];
char* token; 
char* rest = char_array;

WiFiClient client;

HTTPClient http;



void setup()
{
  Serial.begin(230400);
  s.begin(9600);
  pinMode(13, INPUT);
  pinMode(15, OUTPUT);
  //Serial.setDebugOutput(true);
  //ESP.wdtDisable();
 
  //Serial.begin(115200);
  // Serial.setDebugOutput(true);

  Serial.println();
  Serial.println();
  Serial.println();

  for (uint8_t t = 4; t > 0; t--) {
    Serial.printf("[SETUP] WAIT %d...\n", t);
    Serial.flush();
    delay(1000);
  }

  WiFi.mode(WIFI_STA);
  WiFiMulti.addAP("ECLP", "p@@$w0rD");

  if ((WiFiMulti.run() == WL_CONNECTED))
  {
    Serial.print("WIFI connected");
  }
}

void loop() 
{
 if (s.available() >0)
 {
  for(j=0;j<616;j++)
  {
   i++;
   str = s.readStringUntil('\n');
   //Serial.println(str);   
   //Serial.println(j);
   postApi[j]= str;
   //Serial.println(postApi[j]);
   str = "";
  }
  
 }
 if(i == 616)
 {
  i=0;
  for(k=0;k<616;k++)
  {
    Serial.println(k);
    Serial.print(" : ");
    Serial.print(postApi[k]);
  }
 }
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
ESP8266WiFiMulti WiFiMulti;
串行软件(13,15);//RX-TX
double buff[24];//初始化变量以存储接收到的数据
双val;
字符c;
int i,j,k,l=0;
int-httpCode=0;
字符串字段[24]={“,”月“,”年“,”小时“,”分“,”秒“,”rimin“,”riavg“,”rimax“,”yimin“,”yiavg“,”yimax“,”bimin“,”biavg“,”bimax“,”nimin“,”niavg“,”nimax“,”eimin“,”eiavg“,”eimax“,”simin“;
String element=“API_key=123&mac=0fa&day=”;
字符串postApi[616];
字符串str=“”;
字符串str_tx=“”;
字符数组[128];
字符*令牌;
char*rest=char\u数组;
无线客户端;
HTTPClient-http;
无效设置()
{
序列号开始(230400);
s、 开始(9600);
pinMode(13,输入);
pinMode(15,输出);
//Serial.setDebugOutput(true);
//尤其是wdtDisable();
//序列号开始(115200);
//Serial.setDebugOutput(true);
Serial.println();
Serial.println();
Serial.println();
对于(uint8_t=4;t>0;t--){
Serial.printf(“[设置]等待%d..\n”,t);
Serial.flush();
延迟(1000);
}
WiFi.模式(WiFi_STA);
WiFiMulti.addAP(“ECLP”,“p@@@w0rD”);
如果((WiFiMulti.run()==WL_已连接))
{
串行打印(“WIFI连接”);
}
}
void循环()
{
如果(s.可用()>0)
{

对于(j=0;j请将足够多的链接样本直接放在您的帖子中,以说明您想要传达的内容,不要将其留在链接中。大多数人都不会费心/想点击链接。此代码是否使用
cs50
?我问这个问题是因为
String
C type
,但是
cs50中有一个typedefe> 您使用的是什么流量控制?串行要求发送方和接收方的流量控制匹配您似乎在使用Arduino库(您应该指出这一点),您还应该提供有关设备的信息(esp8266不能单独工作,设备配置很重要)。此外,您还应该提供一些示例输入数据(您的输入字符串)是的,我使用arduino编译器编写代码,我的输入字符串是CSV文件中的一行,如串行输出监视器所示。我使用的设备是Nodemcui,它是我之前使用的变量,但忘记了注释它。我没有任何问题,无法将所有读取的字符串存储到单个postApi缓冲区中,但它在300秒后给出相同的输出铃声不是字符。“\n”在每次读取字符串后都会发送。感谢您的回复。我将尝试用编辑过的代码进行回复,并将串行输出转发给您。请不要在问题中添加内容作为答案。这不是StackOverflow的工作方式。请阅读“!谢谢@thebusybee指出这一点,我将在下次发布我的查询时处理这一问题。