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