mesh与服务器或者手机通讯
-
- Posts: 3
- Joined: Thu Apr 07, 2016 5:47 pm
mesh与服务器或者手机通讯
Postby youcai.zhou » Fri May 13, 2016 11:53 am
如果我服务器是http协议,我设备应该怎么设置呢? 我已经把proto设置成M_PROTO_HTTP,
尝试过可以连接,但是数据发送不过去,在中间就被截断了, 我拿TCP去接受数据,发现数据头不是http协议的包头,我该怎么去做才能让http类型的服务器和设备进行通讯么?
Re: mesh与服务器或者手机通讯
Postby ESP_Alen » Fri May 13, 2016 2:22 pm
youcai.zhou wrote:HI 肖工:
如果我服务器是http协议,我设备应该怎么设置呢? 我已经把proto设置成M_PROTO_HTTP,
尝试过可以连接,但是数据发送不过去,在中间就被截断了, 我拿TCP去接受数据,发现数据头不是http协议的包头,我该怎么去做才能让http类型的服务器和设备进行通讯么?
请把你现在device端HTTP数据的封装贴上来,请参照mesh_json.c
另外,server端收到是mesh格式的包,具体解析请参照demo_server.py
另外,发往server的包的destination是server_ip和server_port的组合,参照mesh_demo.c
按照mesh格式组建好包后,情节调用espconn_mesh_sent就可以发送了。
Re: mesh与服务器或者手机通讯
Postby ESP_Alen » Fri May 13, 2016 2:27 pm
mesh内部所有节点与server的通信,都要经过root转发。
你不用care怎么通信,你只需要按照mesh的格式组建包就可以了,这个包自动会到达server.
Thanks.
Alen Xiao.
在 2016-5-12 14:17, xxx 写道:
> HI xxx:
> 关于网络传输方面,如果我叶子节点需要和服务器通讯,我需要在叶子节点怎么设置,root节点需要做转发操作么?
>
> Hi, xxx,
>
> 1. 关于esp-touch的部分,你需要自己添加到mesh demo中,当然我们自己也会添加,不过目前由于人手有限,暂时没有人做。
> 只要你把AP的信息推给节点了,节点就会自动形成网络了。root节点也会自动形成。
> 2. upd的callback只是用来发现设备的,这个和我们的mobile-APP匹配的。
>
> Thanks.
> Alen Xiao.
>
> 在 2016-5-12 10:10, xxx 写道:
>> hi,肖工:
>> 比如说,我这边有5个模块想组建mesh网络,我可以使用esp_touch向这5个模块推送我的路由器SSID和PASSWD,然后我在使用espcon_mesh_set_router接口,这样5个模块会自动组建mesh多层次网络吗?并且mesh网络自动会选择某一个作为root节点?
>> 我看你的demo里面有个UDP接收回调,并且在接收回调函数中发送了自身SOFTAP模式下的IP信息,这个有什么作用?
>>
>> thinks
>>
>> Hi, xxx,
>>
>> 1. root节点会自动形成,节点的类型会根据节点加入网络的情形自动形成。
>> 2. 关于AP的SSID和PASSWD, 你可以考虑使用我们的esp-touch来向节点推送AP的SSID和PASSWD, 节点拿到AP的信息后,使用espcon_mesh_set_router接口告知mesh。
>>
>> Thanks.
>> Alen Xiao.
>>
>> 在 2016-5-11 16:11, xxx 写道:
>>> 你好:
>>> 我是惠州蓝媒物联的,我之前在乐鑫官方网站上下载了你的demo看了下,我想问请教下,mesh是怎么配置哪个模块是根节点,哪个模块是叶子节点的?而且自动组网,它是怎么获取AP的SSID和密码呢?
>>> 而且我这边自己的服务器需要做哪些支持?
-
- Posts: 3
- Joined: Thu Apr 07, 2016 5:47 pm
Re: mesh与服务器或者手机通讯
Postby youcai.zhou » Mon May 16, 2016 9:40 am
这是设置HTTP发送的代码,HTTP服务器接受不到这个数据
char tst_data[1024];
MESH_PARSER_SPRINTF(tst_data,"POST /py HTTP/1.1\r\nHOST:%s:%d\r\nContent-Type:application/json; charset=utf-8\r\nContent-Length: %d\r\n\r\n" "youcaitest", "192.168.1.95",8010,11);
MESH_DEMO_PRINT("free heap:%u\n", system_get_free_heap_size());
if (!wifi_get_macaddr(STATION_IF, src)) {
MESH_DEMO_PRINT("get sta mac fail\n");
return;
}
MESH_DEMO_MEMCPY(dst, server_ip, sizeof(server_ip));
MESH_DEMO_MEMCPY(dst + sizeof(server_ip), &server_port, sizeof(server_port));
header = (struct mesh_header_format *)espconn_mesh_create_packet(
dst, // destiny address
src, // source address
false, // not p2p packet
true, // piggyback congest request
M_PROTO_HTTP, // packe with JSON format
MESH_DEMO_STRLEN(tst_data), // data length
false, // no option
0, // option len
false, // no frag
0, // frag type, this packet doesn't use frag
false, // more frag
0, // frag index
0); // frag length
if (!header) {
MESH_DEMO_PRINT("create packet fail\n");
return;
}
if (!espconn_mesh_set_usr_data(header, tst_data, MESH_DEMO_STRLEN(tst_data))) {
MESH_DEMO_PRINT("set user data fail\n");
MESH_DEMO_FREE(header);
return;
}
MESH_DEMO_PRINT("tst_data = %s\n",tst_data);
if (espconn_mesh_sent(&ser_conn, (uint8_t *)header, header->len)) {
MESH_DEMO_PRINT("mesh sent fail\n");
MESH_DEMO_FREE(header);
/*
* if fail, we re-connect mesh
*/
espconn_mesh_connect(&ser_conn);
return;
}
-
- Posts: 3
- Joined: Thu Apr 07, 2016 5:47 pm
Re: mesh与服务器或者手机通讯
Postby youcai.zhou » Mon May 16, 2016 11:05 am
目前我使用自己的TCP服务器,可以接收到数据
如果我服务器需要发送数据给设备,我可以直接按照格式把4-10,10-16个字符数据更换,然后发送给设备吗?
还是我必须按照文档所说的,必须使用espconn_mesh_create_packet函数进行组包,然后发送给设备。
我测试了下我的方法:
我直接按格式将4-10,10-16字符数据更换,然后发送给设备,检测设备可以接受到数据,但是接受数据后,服务器和设备的连接就直接断开了
recv(*fd,temp_buf,1024,0);
printf("recv = %s\n",temp_buf+16);
char temp1[1024]={0};
memcpy(temp1,temp_buf,4);
memcpy(temp1+4,temp_buf+10,6);
memcpy(temp1+10,temp_buf+4,6);
memcpy(temp1+16,temp_buf+16,1008);
send(*fd,temp1,1024,0);
Re: mesh与服务器或者手机通讯
Postby ESP_Alen » Tue May 17, 2016 6:07 pm
youcai.zhou wrote:Hi 肖工:
目前我使用自己的TCP服务器,可以接收到数据
如果我服务器需要发送数据给设备,我可以直接按照格式把4-10,10-16个字符数据更换,然后发送给设备吗?
还是我必须按照文档所说的,必须使用espconn_mesh_create_packet函数进行组包,然后发送给设备。
我测试了下我的方法:
我直接按格式将4-10,10-16字符数据更换,然后发送给设备,检测设备可以接受到数据,但是接受数据后,服务器和设备的连接就直接断开了
recv(*fd,temp_buf,1024,0);
printf("recv = %s\n",temp_buf+16);
char temp1[1024]={0};
memcpy(temp1,temp_buf,4);
memcpy(temp1+4,temp_buf+10,6);
memcpy(temp1+10,temp_buf+4,6);
memcpy(temp1+16,temp_buf+16,1008);
send(*fd,temp1,1024,0);
设备端主动断开与Server的连接,只有一种情况就是server发来的包的格式非法,请检查一下server端发出的packet是否遵循mesh packet format
Re: mesh与服务器或者手机通讯
Postby ESP_Alen » Tue May 17, 2016 6:09 pm
youcai.zhou wrote:Hi 肖工:
目前我使用自己的TCP服务器,可以接收到数据
如果我服务器需要发送数据给设备,我可以直接按照格式把4-10,10-16个字符数据更换,然后发送给设备吗?
还是我必须按照文档所说的,必须使用espconn_mesh_create_packet函数进行组包,然后发送给设备。
我测试了下我的方法:
我直接按格式将4-10,10-16字符数据更换,然后发送给设备,检测设备可以接受到数据,但是接受数据后,服务器和设备的连接就直接断开了
recv(*fd,temp_buf,1024,0);
printf("recv = %s\n",temp_buf+16);
char temp1[1024]={0};
memcpy(temp1,temp_buf,4);
memcpy(temp1+4,temp_buf+10,6);
memcpy(temp1+10,temp_buf+4,6);
memcpy(temp1+16,temp_buf+16,1008);
send(*fd,temp1,1024,0);
简单的处理,这样是没有问题的,但是请确认发出的真实数据与到达设备的数据一致。
Who is online
Users browsing this forum: No registered users and 235 guests
Login
Newbies Start Here
Are you new to ESP8266?
Unsure what to do?
Dunno where to start?
Start right here!
Latest SDK
Documentation
Complete listing of the official ESP8266 related documentation release by ESPRESSIF!
Must read here!
- All times are UTC+08:00
- Top
- Delete all board cookies
About Us
Espressif Systems is a fabless semiconductor company providing cutting-edge low power WiFi SoCs and wireless solutions for wireless communications and Internet of Things applications. We are the manufacturer of ESP8266EX.