问题: ESP8266 AsyncWebServer 仅当我将其实例化为全局时才有效,但当我在类中实例化它时则无效。
这是两个完整的草图,它们都会产生错误
方法 1:在没有构造函数的情况下尝试此方法来初始化:
#include <ESPAsyncWebServer.h>
// AsyncWebServer server(80); // works when I instantiate it here
class foo {
AsyncWebServer server(80); // fails if instead I instantiate it here
int dummy{0};
};
void setup() {}
void loop() {}
Run Code Online (Sandbox Code Playgroud)
错误信息1
sketch_jun06d:6:25: error: expected identifier before numeric constant
AsyncWebServer server(80); // this does not work
^
sketch_jun06d:6:25: error: expected ',' or '...' before numeric constant
Run Code Online (Sandbox Code Playgroud)
方法2 在构造函数中初始化
class foo{
public:
AsyncWebServer server;
foo() {
server(80);
};
};
Run Code Online (Sandbox Code Playgroud)
错误信息2 …
我对使用 ESP8266 很陌生,我尝试上传这个简单的脚本
void setup() {
pinMode(D4, OUTPUT);
}
void loop() {
digitalWrite(D4, HIGH);
delay(1000);
digitalWrite(D4, LOW);
delay(1000);
}
Run Code Online (Sandbox Code Playgroud)
到节点 mcu(ESP8266) 但我不断收到此错误esptool.py v3.0 A fatal esptool.py error occurred: Cannot configure port, something went wrong. Original message: PermissionError(13, 'A device attached to the system is not functioning.', None, 31)Serial port COM4
任何人回答这个问题,一步一步解释它,并记住我对 esp8266 的知识为零。我已经尝试安装驱动程序,但仍然出现相同的错误。
我带了一个esp8266-12,它工作在115200波特率.我有时将它连接到arduino uno以便为某些项目工作.如果我以9600波特率将esp8266与arduino连接起来会很容易.AT版本是0.25.我用谷歌搜索并看到AT命令集文档,它有一个设置波特率的命令.它就像
AT+ UART_DEF=<baudrate>,<databits>,<stopbits>,<parity>,<flow control>
Run Code Online (Sandbox Code Playgroud)
但问题是我不知道这些参数是什么以及如何设置参数,以便使用arduino以9600波特率工作.
我正在研究ESP8266,我正在尝试用Lua编程.我尝试创建TCP服务器,但是当我在下面编写示例代码时,我将错误消息名称"只允许一个tcp服务器".我创建了一个服务器而且我无法关闭.
我该如何解决?
print("ESP8266 mode is: " .. wifi.getmode());
cfg = {};
-- Set the SSID of the module in AP mode and access password
cfg.ssid = "SSID";
cfg.pwd = "password";
if ssid and password then
print("ESP8266 SSID is: " .. cfg.ssid .. " and PASSWORD is: " ..
cfg.password)
end;
-- Now you should see an SSID wireless router named ESP_STATION when you scan for available WIFI networks
-- Lets connect to the module from a computer of mobile device. …Run Code Online (Sandbox Code Playgroud) 我有一个nodejs/expressjs后端服务,我希望使用端点注册我的设备.我必须使用一些json编码数据向我的服务器发送POST请求.我这样做很麻烦.我可以成功发送GET请求,并从服务器获得响应,但是当我尝试发送POST请求时,我得不到任何响应.我是这样做的:
//Make a post request
void postRequest(const char* url, const char* host, String data){
if(client.connect(host, PORT)){
client.print(String("POST ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
//"Connection: close\r\n" +
"Content-Type: application/json\r\n" +
"Content-Length: " + data.length() + "\r\n" +
data + "\n");
//Delay
delay(10);
// Read all the lines of the reply from server and print them to Serial
CONSOLE.println("Response: \n");
while(client.available()){
String line = client.readStringUntil('\r');
CONSOLE.print(line);
}
}else{
CONSOLE.println("Connection to backend failed.");
return;
} …Run Code Online (Sandbox Code Playgroud) 我正在一个项目中使用arduino uno和ESP8266ex作为其wifi模块。电线的连接:
Arduino 5V-> 3.3V调节器-> ESP:CH_PD(带有10k电阻)和VCC Arduino GND-> 3.3V调节器-> ESP:GND和RST(通过按钮和电阻连接复位)Arduino RX- -> ESP TX Arduino TX->分压器(2k 1k电阻)-> ESP RX 5uF电容器->电压调节器,可防止ESP自行复位。
现在,让我解释一下我遇到的问题。我有两个代码在使用ESP8266作为arduino uno的wifi模块。在我的第一个程序中,我手动发送了命令:
#define ard_rx_esp_tx 2
#define ard_tx_esp_rx 3
#include <SoftwareSerial.h>
SoftwareSerial ESPserial(ard_rx_esp_tx, ard_tx_esp_rx); // RX | TX
void setup()
{
int i = 0;
Serial.begin(9600); // communication with the host computer
while (!Serial);
// Start the software serial for communication with the ESP8266
ESPserial.begin(9600);
Serial.println("");
Serial.println(F("Remember to to set Both NL & CR in the serial monitor."));
Serial.println(F("Ready"));
Serial.println(F(""));
Serial.println(F("start")); …Run Code Online (Sandbox Code Playgroud) 我有一个ESP8266,我正在Arduino中进行编程。我需要发出POST请求。我尝试了这段代码:
#include <ESP8266HTTPClient.h>
#include <ESP8266WiFi.h>
void setup() {
Serial.begin(115200); //Serial connection
WiFi.begin("ssid", "wifi_password"); //WiFi connection
while (WiFi.status() != WL_CONNECTED) { //Wait for the WiFI connection completion
delay(500);
Serial.println("Waiting for connection");
}
}
void loop() {
if(WiFi.status()== WL_CONNECTED){ //Check WiFi connection status
HTTPClient http; //Declare object of class HTTPClient
http.begin("server_name"); //Specify request destination
http.header("POST / HTTP/1.1");
http.header("Host: server_name");
http.header("Accept: */*");
http.header("Content-Type: application/x-www-form-urlencoded");
int httpCode = http.POST("Message from ESP8266"); //Send the request
String payload = http.getString();
Serial.println(httpCode); //Print HTTP return code
Serial.println(payload); …Run Code Online (Sandbox Code Playgroud) 我绝望了!我希望我的ESP8266从TCP客户端接收一个字符串,执行相应的函数并给出TCP响应.但不幸的是,响应字符串以某种奇怪的方式被破坏:假设我输入了一个'未知命令',前11个字节通过串行接口正确打印(其余是转储),客户端收到的前11个字节是转储,但其余的都是正确的(见下面脚本中的评论).但是当我输入'dim'命令时,结果是正确的(但返回字符串也比"error:unknown command"短).目前我完全不知道如何解决这个问题,即使我已经尝试了很多.
#include <WiFiClient.h>
#include <ESP8266WiFi.h>
#include <Wire.h>
#include <string.h>
struct parsed_query{
String command;
String arguments;
};
struct parsed_query parser(void){
// this function receives and parses a query
struct parsed_query result;
result.command="entered command";
result.arguments="entered arguments"
return result
}
char* str2char(String as_string){
int i_0=0;
while(as_string[i_0]!='\0'){i_0++;}
char as_char[i_0+1];
as_char[i_0]='\0';
for(int i=0;i<i_0;i++){
as_char[i]=as_string[i];
}
return as_char;
}
String executor(String command,String arguments){
String response;
if(command=="dim"){
response="dimming";
}
else if(command=="on"){
response="switching ON";
}
else{
response="error: unknown command";
}
return response;
}
void setup(){
// initialize …Run Code Online (Sandbox Code Playgroud) 所以我正在尝试为一个项目争取使用ESPAsyncWebServer,并且由于所述项目的大小,我将我的代码重构为一堆不同的库。这是客户端服务器处理部分的一部分。
我已经确定如何有效地将 *request 传递给单独的函数,以便清理我的代码。IE 在我的库中的 .cpp 文件
server->on("/heap", HTTP_GET, [this](AsyncWebServerRequest *request) { handleHeap(request); });
Run Code Online (Sandbox Code Playgroud)
哪个火:
void CServer::handleHeap(AsyncWebServerRequest *request) { request->send(200, "text/plain", String(ESP.getFreeHeap())); }
Run Code Online (Sandbox Code Playgroud)
我遇到问题的地方是试图将我的“处理器”函数传递给模板响应。
String CServer::processor(const String &var)
{
if (var == "locationLat")
return String(gps.location.lat());
return String();
}
void CServer::handleGPS(AsyncWebServerRequest *request)
{
request->send(SPIFFS, "/gps.htm", String(), processor);
}
Run Code Online (Sandbox Code Playgroud)
错误:没有匹配的函数调用 'AsyncWebServerRequest::send(fs::FS&, const char [9], String, )
尝试在 Lambda 中传递 processor() 也不会编译,因为没有传入参数。
错误:没有匹配的函数调用 '
CServer::processor()'request->send(SPIFFS, "/gps.htm", String(), [this] { processor(); });
^ lib\CServer\CServer.cpp:128:66:注意:
候选是:lib\CServer\CServer.cpp:108:8:注意:字符串
CServer::processor(const String&)
sooo,我如何按照此处的指南中的说明处理将所需的处理器函数传递到我的响应参数中 …
有人可以帮助我了解如何在使用 ESP8266-HTTP-IR-Blaster 库的项目中使用 RAW IR 数据吗?
我根据https://github.com/mdhiggins/ESP8266-HTTP-IR-Blaster创建了一个带有 IR 发送器和接收器的 NodeMCU 板
只要我使用捕获的代码,一切正常,例如: http://NodeMCU-IP/msg?code=E0E040BF:SAMSUNG:32 这是电源按钮的代码 (E0E040BF)
当我在家庭自动化系统中使用它时,如果我有一个专用的开和关序列,这对我来说非常有益,我在这里找到:http : //www.remotecentral.com/cgi-bin/mboard/rc -discrete/thread.cgi?5780,但无法通过 RAW 数据转换、修改或发送它。
使用Node-red,尝试了很多方法,也给原来的项目实现了一个MQTT客户端,但是我试了还是不接受这些代码。不发送。
也尝试作为 JSON,没有帮助。
[
{
"type":"raw",
"data":"[0000, 006D, 0000, 0022, 00AC, 00AC, 0015, 0040, 0015, 0040, 0015, 0040, 0015, 0015, 0015, 0015, 0015, 0015, 0015, 0015, 0015, 0015, 0015, 0040, 0015, 0040, 0015, 0040, 0015, 0015, 0015, 0015, 0015, 0015, 0015, 0015, 0015, 0015, 0015, 0015, 0015, 0015, 0015, 0015, 0015, 0040, 0015, 0040, 0015, …Run Code Online (Sandbox Code Playgroud) esp8266 ×10
arduino ×6
c++ ×2
nodemcu ×2
arduino-ide ×1
arduino-uno ×1
at-command ×1
c ×1
connect ×1
global ×1
http ×1
http-post ×1
lua ×1
post ×1
refactoring ×1
request ×1
string ×1
tcpserver ×1
webserver ×1