Pages: 1 [2]   Go Down
Author Topic: [Problemão] Comunicação entre vários arduinos (com Xbee) sem erros - Roteamento  (Read 4590 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wagner,

Dá uma olhada nisso: Parou de encavalar as informações. Mas não tenho request/ack.

Todos os end devices estão no modo API e meu coordenador no modo AT. Recebo dessa forma e acho que consigo trabalhar no Visual C#.

Mas não estou muito satisfeito. O que você sugere de melhoria?

Olha só:

T,I,B são variáveis do Kit1
D,E,F são variáveis do Kit2
A,B,C são variáveis do Kit3

Todos estão com o mesmo programa (leitura de tensão, corrente e bateria) e não mudei o tag time (50ms).

Apenas mudei as variáveis e fiz questão de tirar e colocar a bateria várias vezes para verificar se há encavalamento, o que podemos perceber que não ocorre. Porém a quantidade de variáveis de um kit para outro difere, costuma ter 2 agarrados, ou separados, mas enfim, recebemos de todos e de certa forma corretamente, o que ao meu ponto de vista funcionaria.

Outra coisa, existe uma forma de ordenar os dados recebidos? (sem ser aquela história que estamos querendo fazer do request/ack)?

O coordenador ficará mesmo em modo AT, não haverá problema?

Todos os programas do Arduino estão endereçados ao nó coordenador (13A200 406CBCC5). Se quiséssemos colocar um router no meio, conforme escopo desenhado do projeto, iria funcionar do mesmo jeito? E se tirássemos o router, a rede iria automaticamente se ajustar (meio óbvio que não).... Existe algum algoritmo pronto para isso? Uma rotina automática?

Observe uma coisa, pode ser do programa - veja que não é cíclico (no caso abaixo deixei apenas 1 kit funcionando):

[A:0000][B:0045][C:0603][B:0045][C:0603][A:0000][B:0045][C:0603][A:0000][B:0044][C:0603][B:0009][A:0000][B:0045][C:0603][A:0000][B:0045][C:0603][B:0045][C:0603][A:0000][B:0045][C:0603][A:0000][A:0000][B:0045][C:0603][A:0000][B:0015][C:0603][A:0000][B:0045][C:0603]

Segue abaixo o histórico dos 3 kits funcionando, conforme variáveis descritas acima. Observe que não há qualquer encavalamento, porém vem tudo bagunçado (no que diz respeito aos kits):

[I:0003][B:0657][A:0000][B:0010][C:0603][B:0046][C:0600][T:0026][I:0003][B:0657][A:0000][E:0000][E:0046][F:0615][I:0003][B:0657][E:0000][E:0009][F:0615][E:0000][A:0000][B:0045][A:0000][B:0045][B:0046][C:0600][E:0000][E:0046][F:0615][T:0026][I:0003][B:0657][A:0000][B:0046][C:0603][I:0003][B:0657][E:0000][E:0046][F:0615][A:0000][B:0009][C:0603][B:0046][A:0000][B:0045][C:0603][E:0000][E:0046][F:0612][I:0003][B:0657][E:0000][E:0009][F:0615][A:0000][B:0045][C:0603][I:0003][B:0657][E:0000][E:0046][F:0615][B:0045][C:0603][T:0026][I:0003][B:0657][E:0000][E:0046][F:0615][E:0046][F:0612][A:0000][B:0045][C:0603][T:0026][I:0003][B:0657][B:0045][A:0000][B:0046][C:0603][E:0000][E:0046][F:0615][A:0000][B:0009][C:0603][T:0026][I:0003][B:0654][E:0046][E:0000][E:0009][F:0615][T:0026][I:0003][B:0657][E:0000][E:0047][F:0612][A:0000][B:0046][C:0603][T:0026][I:0003][B:0657][B:0044][C:0603][E:0000][E:0046][F:0615][I:0003][T:0026][I:0003][B:0657][E:0000][E:0046][F:0615][E:0000][A:0000][B:0045][C:0603][E:0000][E:0009][F:0615][T:0026][I:0003][B:0657][B:0046][C:0600][E:0000][E:0047][F:0615][T:0026][I:0003][B:0654][I:0003][T:0026][I:0003][B:0654][B:0009][C:0603][E:0000][E:0046][F:0612][A:0000][B:0045][C:0603][E:0000][E:0046][F:0612][T:0026][I:0003][B:0657][E:0000][E:0046][F:0615][I:0003][B:0044][C:0603][B:0654][E:0000][E:0009][F:0615][T:0026][I:0003][B:0657][B:0045][C:0603]
Logged

Forum Moderator
São Paulo/SP/Brazil
Offline Offline
Sr. Member
*****
Karma: 2
Posts: 305
Brazilian Arduino Team
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

O que você sugere de melhoria?
não sei, isto cabe a você testar e ver o que é melhor no seu projeto.

Outra coisa, existe uma forma de ordenar os dados recebidos? (sem ser aquela história que estamos querendo fazer do request/ack)?
Não tem. XBee é FIFO(first-in, first-out).

O coordenador ficará mesmo em modo AT, não haverá problema?
Não sei, como eu disse eu nunca utilizei XBee desta maneira.

Todos os programas do Arduino estão endereçados ao nó coordenador (13A200 406CBCC5). Se quiséssemos colocar um router no meio, conforme escopo desenhado do projeto, iria funcionar do mesmo jeito? E se tirássemos o router, a rede iria automaticamente se ajustar (meio óbvio que não).... Existe algum algoritmo pronto para isso? Uma rotina automática?
Eu ACHO que os XBee's se ajustam automaticamente sim. Se você configurar um como router e os end devices descobrem que a qualidade de sinal do router é melhor eles começam a utiliza-lo. Se você desligar ele, os end-devices vão demorar um tempinho mas vão começar a ir direto para o coordenador. Recomendo a você ler o datasheet do seu XBee lá com certeza fala como funciona isto.

Observe uma coisa, pode ser do programa - veja que não é cíclico (no caso abaixo deixei apenas 1 kit funcionando).
Matemática simples. 50ms é MUITO rápido. Você está mandando 25 bytes de cada arduino por ciclo que tem um delay de 50 milisegundos. 25bytes são 200 bits(vamos chamar isto de "pacote"). Se você estiver usando 9600bps de baud rate, você conseguiria enviar/receber apenas 48 "pacotes" por segundo(9600bps/200 bits). E você está enviando 20(1 segundo = 1000ms, 1000ms / 50ms = 20) apenas de um kit. Ou seja são 60 pacotes por segundo dos 3 kits. O que está acontecendo é um buffer overflow nos XBee's. Já te expliquei o que acontece quando o buffer enche em outro post nesta thread. É exatamente o comportamento que você está tendo no "receptor".
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grande Grande... Obrigado pelas respostas.

Coloquei meu coordenador como API e aquilo que estava vindo aparentemente legal começou a vir assim agora:

Dentro dos colchetes continua legal, mas esse lixo fora, não faço a mínima idéia do que seja... Tem algum palpite?


C~.......@n..."A[F:0606]?~.......@n....A[C:0576]?~.......@n..|.A[T:0026].~.......@n..|.A[I:0003].~.......@n..|.A[B:0636].~.......@n....A[A:0000]S~.......@n....A[A:0000]S~.......@n....A[B:0042]L~.......@n....A[C:0576]?~.......@n....A[B:0043]K~.......@n..."A[E:0000]L~.......@n..."A[E:0045]C~.......@n....A[C:0576]?~.......@n..."A[F:0606]?~.......@n..|.A[T:0026].~.......@n..|.A[I:0003].~.......@n..|.A[B:0636].~.......@n..."A[E:0044]D~.......@n..."A[F:0606]?~.......@n..."A[E:0000]L~.......@n..|.A[T:0026].~.......@n..|.A[I:0003].~.......@n..|.A[B:0636].~.......@n..."A[E:0000]L~.......@n..."A[E:0045]C~.......@n..."A[F:0606]?~.......@n....A[A:0000]S~.......@n....A[B:0043]K~.......@n....A[C:0576]?~.......@n....A[B:0043]K~.......@n....A[A:0000]S~.......@n....A[B:0043]K~.......@n..|.A[I:0003].~.......@n....A[C:0576]?~.......@n..|.A[B:0636].~.......@n..."A[E:0000]L~.......@n..."A[E:0009]C~.......@n..."A[F:0606]?~.......@n..|.A[I:0003].~.......@n..|.A[B:0636].~.......@n..."A[E:0000]L~.......@n..."A[E:0046]B~.......@n..."A[F:0606]?~.......@n....A[A:0000]S~.......@n....A[B:0042]L~.......@n....A[C:0576]?~.......@n..|.A[I:0003].~.......@n..|.A[B:0636].~.......@n..."A[E:0000]L~.......@n..."A[E:0045]C~.......@n..."A[F:0606]?~.......@n....A[A:00(-]^~.......@n....A[B:0027]I~.......@n....A[C:0576]?~.......@n....A[A:0000]S~.......@n..."A[E:0000]L~.......@n..."A[E:0045]C~.......@n..."A[F:0606]?~.......@n..|.A[I:0003].~.......@n..|.A[B:0636].~.......@n....A[A:0000]S~.......@n....A[B:0043]K~.......@n....A[C:0576]?~.......@n..|.A[I:0003].~.......@n..|.A[B:0636].~.......@n....A[A:0000]S~.......@n....A[B:0043]K~.......@n....A[C:0576]?~.......@n..|.A[T:0026].~.......@n..|.A[I:0003].~.......@n..|.A[B:0636].~.......@n..."A[E:0000]L~.......@n..."A[E:0009]C~.......@n..."A[F:0606]?
Logged

Forum Moderator
São Paulo/SP/Brazil
Offline Offline
Sr. Member
*****
Karma: 2
Posts: 305
Brazilian Arduino Team
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Tudo isto tem no datasheet e eu já respondi isto em outro post nesta thread.

Tou dando CTRL+C, CTRL+V:
Quote
Com ele no modo API, você vai precisar desenvolver um software no PC, que vai abrir a porta serial(UartSbee com o coordenador) e "decifrar" os pacotes que chegam. Eu geralmente uso python e um módulo chamado python-xbee(http://code.google.com/p/python-xbee/).
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Opa!

A parada do lixo que estava falando era do cabeçalho do pacote. O dado, entre colchetes, está íntegro. Quando eu coloco em Hexa, aparece certinho.

Vou testar agora a parada que você disse do router. Vou inserir um na rede, router API, com o mesmo software do Arduino que tem nos outros e testar para ver se ele faz a ponte com o coordenador. Depois tiro ele de campo e vamos ver no que vai dar.

Obrigado por enquanto. Outras dúvidas surgirão e conto com seu apoio.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wagner:

Boa noite!

Tenho um xbee coordenador API, um outro xbee Router API e outros 2 xbee end device API.

Por que quando coloco todos na rede e afasto meu end devices até perder sinal com o coordenador e levo o router a meia distância para fazer a ponte, sendo que o router consegue comunicar com o coordenador, por que os end device não fazer a ponte com o router para comunicar com o coordenador automaticamente?

Tem alguma configuração em específico para isso dentro do X-CTU?

Quero lembrar que dentro do meu algoritmo (no arduino) há o endereço de destino de todos eles, que é o MAC do coordenador. Testei aquilo que você disse acima, mas não está funcionando.

Obrigado!
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Rapaziada,

Consegui fazer a rede ter roteamento automático, porém só na ida, ou seja, tenho um router e 2 end. Afasto os 3 do coordenador até perder o sinal. Insiro uma antena no router que comunica com o coordenador e os 2 end conectam nele fazendo ponte.... tudo ok por aí...

Porém, quando desligo o router e coloco os 2 end perto do coordenador de volta, não comunica de jeito nenhum. Daí só dando um reset no buffer xbee (botão no arduino) para que ele volte comunicar.

Alguém tem pelo menos algum palpite?

obrigado!
Logged

Pages: 1 [2]   Go Up
Jump to: