首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于CoAP和节点客户端的ESP32服务器

基于CoAP和节点客户端的ESP32服务器
EN

Stack Overflow用户
提问于 2022-05-25 19:42:06
回答 1查看 232关注 0票数 0

我正在尝试用ESP32和一些传感器建立一个系统。我使用CoAP库在ESP32上创建了服务器。我在薄荷上用coap客户机测试了服务器,在铬上安装了铜,在这两种情况下,GET都得到了我预期的结果。在尝试用调用GET时,会发生这样的情况,即请求到达服务器,但节点位似乎没有收到响应。这是节点位

代码语言:javascript
复制
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回调。

代码语言:javascript
复制
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中收到的请求。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-26 08:40:20

好的,Achim实际上帮了我很大的忙,让我做包捕获。分析使用js位发送的请求时,可以看到使用的字段令牌,在发回答案时我没有考虑这个问题。我更新了ESP内部的回调,现在代码如下所示

代码语言:javascript
复制
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代码。非常感谢您捕获数据包的想法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72383331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档