Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.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
无法使用esp32从Arduino中的ReactJS网页读取数据_Reactjs_Arduino_Esp8266_Esp32 - Fatal编程技术网

无法使用esp32从Arduino中的ReactJS网页读取数据

无法使用esp32从Arduino中的ReactJS网页读取数据,reactjs,arduino,esp8266,esp32,Reactjs,Arduino,Esp8266,Esp32,我正在创建一个由输入字段'ssid'和'Submit'按钮组成的ReactJS应用程序。我想在按submit时将此输入字段数据发送到esp32。我通过这样做接收数据,但它每秒钟都会跳过一个字符,即如果我写下“React”并按下submit按钮,Arduino串行输出将显示“ec??” React代码(index.js): import React,{Component}来自'React'; 从“react dom”导入react dom; 类arduinoApp扩展组件{ 建造师(道具){ 超级

我正在创建一个由输入字段'ssid''Submit'按钮组成的ReactJS应用程序。我想在按submit时将此输入字段数据发送到esp32。我通过这样做接收数据,但它每秒钟都会跳过一个字符,即如果我写下“React”并按下submit按钮,Arduino串行输出将显示“ec??”

React代码(index.js):

import React,{Component}来自'React';
从“react dom”导入react dom;
类arduinoApp扩展组件{
建造师(道具){
超级(道具);
this.state={ssid:'',密码:'};
}
setSsid(状态){
this.setState({ssid:state!=''})
}
componentDidMount(){
获取('/inputText')
.then(response=>response.text())
.then(state=>this.setSsid(state));
}
提交(){
fetch('/inputText',{method'PUT',body:document.getElementById('ssid').value})
.then(response=>response.text())
}
render(){
返回(
提交
);
}
}
ReactDOM.render(,document.getElementById('root'));
Arduino代码:

#include <WiFi.h>
#include "aWOT.h"
#include "StaticFiles.h"

char currentLine;
const char* ssid     = "SSID";
const char* password = "PASSWORD";

WiFiServer server(80);
Application app;


void readSsid(Request &req, Response &res) {
  res.print(currentLine);
}

void updateSsid(Request &req, Response &res) {
  while(req.available())
          {
             currentLine+=req.read();
             Serial.write(req.read());
          }
  Serial.println(currentLine);
  return readSsid(req, res);
}

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

  WiFi.softAP(ssid, password);
  IPAddress IP = WiFi.softAPIP();

  Serial.println(IP);

  app.get("/inputText", &readSsid);
  app.put("/inputText", &updateSsid);

  app.route(staticFiles());
  server.begin();
}

void loop() {
  WiFiClient client = server.available();

  if (client.connected()) {
    app.process(&client);
  }
}
#包括
#包括“aWOT.h”
#包括“StaticFiles.h”
字符电流线;
const char*ssid=“ssid”;
const char*password=“password”;
WiFiServer服务器(80);
应用程序;
无效readSsid(请求和请求、响应和回复){
res.print(当前行);
}
无效更新ID(请求和请求、响应和回复){
while(请求可用()
{
currentLine+=req.read();
串行写入(请求读取());
}
Serial.println(currentLine);
返回readSsid(req,res);
}
无效设置(){
序列号开始(115200);
WiFi.softAP(ssid,密码);
IP地址IP=WiFi.softAPIP();
序列号println(IP);
app.get(“/inputText”、&readSsid);
app.put(“/inputText”、&updatesId);
app.route(staticFiles());
server.begin();
}
void循环(){
WiFiClient=server.available();
if(client.connected()){
应用程序流程(和客户端);
}
}
在传输或读取网页中的数据时,我做错了什么


谢谢你的帮助!提前感谢。

问题出在Arduino代码上。在updateSID上,while循环将读取两次(第一次读取的数据在过程中丢失,第二次被捕获)

这里有一个快速解决方案

void updateSsid(Request &req, Response &res) {
    while(req.available())
    {
         currentLine+=req.read();
         //Serial.write(req.read()); // or remove the above line...
    }
    Serial.println(currentLine);  // if removing currentLine, don't forget here
    return readSsid(req, res);
}
或:


我没有跳过第二个字符。你能详细说明这个问题吗?它只在实际输入的偶数索引上打印字符。你能举一个例子吗?比如,如果我在ssid输入框中键入“Kainat”,值是“ant”=>实际输入的偶数索引是p。我已经提到了上面的例子。在“Kainat”的情况下,它会打印“ant?”。在UI代码中,我看到该组件是不受控制的,但很奇怪,您是否尝试过@Menilik发布的解决方案
void updateSsid(Request &req, Response &res) {
    while(req.available())
    {
         currentLine+=req.read();
         //Serial.write(req.read()); // or remove the above line...
    }
    Serial.println(currentLine);  // if removing currentLine, don't forget here
    return readSsid(req, res);
}
void updateSsid(Request &req, Response &res) {
    while(req.available())
    {
        //currentLine+=req.read();
        Serial.write(req.read());
    }
    // Serial.println(currentLine);
    return readSsid(req, res);
}