我正在尝试用ESP32和一些传感器建立一个系统。我使用CoAP库在ESP32上创建了这服务器。我在薄荷上用coap客户机测试了服务器,在铬上安装了铜,在这两种情况下,GET都得到了我预期的结果。在尝试用这调用GET时,会发生这样的情况,即请求到达服务器,但节点位似乎没有收到响应。这是节点位
const req = coap.request('coap://192.168.1.229/sensor/info')
req.on('response', (res) => {
res.pipe(process.stdout)
res.on('end', () => {
process.exit(0)
})
})
req.end()这基本上就是示例,这是GET的ESP32回调。
void callback_coap_info(CoapPacket &packet, IPAddress ip, int port){
Serial.println("Coap request in info");
coap.sendResponse(ip, port, packet.messageid, buffer_id);
}buffer_id是用JSON格式的响应,从client看来,它与json反应类似。
编辑:我被要求提供一个捕获,所以这里有一个wireshark捕获用于我的ESP32的IP。前两行是使用libCOAP (在另一个屏幕中使用的相同内容)创建的请求及其响应,而其他行是通过使用上面发布的coap请求创建的。在我看来,这个请求似乎是由ESP32接收到的,并且回答类似于libCOAP中收到的请求。
发布于 2022-05-26 08:40:20
好的,Achim实际上帮了我很大的忙,让我做包捕获。分析使用js位发送的请求时,可以看到使用的字段令牌,在发回答案时我没有考虑这个问题。我更新了ESP内部的回调,现在代码如下所示
void callback_coap_info(CoapPacket &packet, IPAddress ip, int port){
Serial.println("Coap request in info");
coap.sendResponse(ip, port, packet.messageid, buffer_temp_hum,
strlen(buffer_temp_hum), COAP_CONTENT, COAP_TEXT_PLAIN,
packet.token, packet.tokenlen);
}库有不同版本的sendResponse,在本例中所需的版本是设置了所有可能字段的库,可以在其中指定令牌。现在,这既适用于libCOAP,也适用于提供的js代码。非常感谢您捕获数据包的想法。
https://stackoverflow.com/questions/72383331
复制相似问题