mesh与服务器或者手机通讯

youcai.zhou
Posts: 3
Joined: Thu Apr 07, 2016 5:47 pm

mesh与服务器或者手机通讯

Postby youcai.zhou » Fri May 13, 2016 11:53 am

HI 肖工:
如果我服务器是http协议,我设备应该怎么设置呢? 我已经把proto设置成M_PROTO_HTTP,
尝试过可以连接,但是数据发送不过去,在中间就被截断了, 我拿TCP去接受数据,发现数据头不是http协议的包头,我该怎么去做才能让http类型的服务器和设备进行通讯么?

ESP_Alen

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就可以发送了。

ESP_Alen

Re: mesh与服务器或者手机通讯

Postby ESP_Alen » Fri May 13, 2016 2:27 pm

Hi, xxx,

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和密码呢?
>>> 而且我这边自己的服务器需要做哪些支持?

youcai.zhou
Posts: 3
Joined: Thu Apr 07, 2016 5:47 pm

Re: mesh与服务器或者手机通讯

Postby youcai.zhou » Mon May 16, 2016 9:40 am

HI 肖工:
这是设置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;
}

youcai.zhou
Posts: 3
Joined: Thu Apr 07, 2016 5:47 pm

Re: mesh与服务器或者手机通讯

Postby youcai.zhou » Mon May 16, 2016 11:05 am

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);

ESP_Alen

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

ESP_Alen

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 13 guests