我正在使用NodeMCU板通过WiFi通信笔记本电脑。可以使用以下代码进行基本的通信:
value
但是当我想发送计时器信号时,客户端似乎无法连接到我。
{ '--some-var': XXX }
我的arduino串行监视器,我只能看到以下内容:
40ms_Data A \ r \ n
40ms_Data A \ r \ n
....
那么,有人可以帮助我吗?也许这是永久循环中XXX
减速的问题(如示例1)。但是我不知道要修复它。
根据M.R.的想法,这是我完整的新代码:
void loop (){
WiFiClient client = server.available();
if (client) {
while (client.connected()){
client.println(Data_mem[0]);
delay(2000);
}
client.stop(); // tarminates the connection with the client
}
}
此代码有效。但是服务器发送一,二或树“服务器侦听”后,服务器RST进行TCP连接。如Wireshark所示:Wireshark Capture
从ESP重置TCP的可能原因是什么?
答案 0 :(得分:0)
除了代码中的一些语法错误外:
一个好的解决方案是从client
创建一个静态指针对象,并将其作为参数传递给ms40_Data
函数:
void ms40_Data(WiFiClient *client)
{
Serial.println("40ms_Data A");
if (*client)
{
Serial.println("40ms_Data B");
if (client->connected())
{
Serial.println("40ms_Data C");
//client.println(40ms_Data [0]);
}
else
{
client->stop();
}
}
}
void setup()
{
...
// create a static object from WiFiClient
static WiFiClient client = server.available();
//Initialize Ticker every 40ms
Data_Rec.attach_ms(40, ms40_Data, &client);
}
void loop()
{
}
另一种解决方案是,您可以在代码中设置一个标志,然后调用ms40_Data
函数:
bool start_40ms_Data = false;
void ms40_Data()
{
static WiFiClient client = server.available();
Serial.println("40ms_Data A");
if (client)
{
Serial.println("40ms_Data B");
if (client.connected())
{
Serial.println("40ms_Data C");
//client.println(40ms_Data [0]);
}
else
{
client.stop();
}
}
}
void flag_enable()
{
start_40ms_Data = true;
}
void setup()
{
...
//Initialize Ticker every 40ms
Data_Rec.attach_ms(40, flag_enable);
}
void loop()
{
if (start_40ms_Data)
{
ms40_Data();
start_40ms_Data = false;
}
}
答案 1 :(得分:0)
重点是将其添加到设置功能: WiFi.mode(WIFI_AP); 完整说明:Here 谢谢