Rede de objetos inteligentes IPv6

No primeiro experimento prático, será criada uma rede IPv6 de objetos inteligentes utilizando Cooja. O Contiki oferece uma implementação do 6LoWPAN em conjunto com o protocolo de roteamento RPL. Além disso, o SO também oferece suporte à pilha de protocolos µIP TCP/IP (veja Seção 1.3.3). Para começar, inicie o Cooja através do atalho da área de trabalho ou execute o comando abaixo e, em seguida, crie uma nova simulação ou compile o código para um nó real:

Inicie o Cooja executando os comandos abaixo:

$ cd <DIR>+contiki/tools/cooja/
$ ant run

Para experimentação em nós reais, programe-os com os comandos abaixo:

$ cd <DIR>+contiki/examples/ipv6/sky-websense/
$ make TARGET=sky sky-websense.upload

Dando seguimento à prática, dispositivos Tmote Sky serão emulados. Um dos motes servirá como roteador de borda da rede de objetos IPv6. O roteador de borda é o dispositivo responsável por configurar um prefixo de rede e iniciar a construção da árvore de roteamento do RPL. Em outras palavras, o roteador de borda nada mais é que a raiz da árvore de roteamento e interlocutor entre a rede de objetos e a rede externa.

O código do roteador de borda está localizado em:

$ <DIR>+contiki/examples/ipv6/rpl-border-router/border-router.c

Com o Cooja aberto, vá até a aba de criação de mote e adicione um Sky mote. Na tela seguinte, compile e carregue, como firmeware, o código do roteador de borda. Finalmente adicione 1 mote deste tipo.

Para experimentação em nós reais, remova todos os nós programados do websense. Em seguida, programe o roteador de borda com o RPL:

$ cd <DIR>+contiki/examples/ipv6/sky-websense/
$ make TARGET=sky border-router.upload

Após configurar o roteador de borda, a próxima etapa é povoar a rede com objetos inteligentes (isto se estiver realizando simulação, pois já programamos nos passos anteriores os motes com o firmware sky-websense). O código sky-websense.c ajudará nesta fase.

O código do sky-websense.c está localizado em:

$ <DIR>+contiki/examples/ipv6/sky-websense/sky-websense.c

Este código é uma aplicação que produz “dados sensoriados” e prover acesso a estas informações via webserver. Adicione alguns motes desse tipo. É recomendável que o leitor investigue o código sky-websense.c para entender o que ele faz. Retorne para o Cooja. Na aba chamada “Network”, localize o roteador de borda e no seu menu de contexto selecione a opção mostrada abaixo. O Cooja informará que o roteador de borda criou um socket e está escutando na porta local 60001. Em seguida inicialize a simulação.

No Menu-Contexto do Roteador de Borda selecione:

“Mote tools for sky/Serial socket (SERVER)"

Abra um novo terminal e execute os seguintes comandos:

Comandos para executar o programa tunslip6

Para simulação:

$ cd <DIR>+contiki/examples/ipv6/rpl-border-router/
$ make connect-router-cooja TARGET=sky

Se estiver executando em motes reais:

$ cd <DIR>+contiki/examples/ipv6/rpl-border-router/
$ make connect-router

Reinicie o roteador de borda (pressionando o botal reset no dispositivo) e note o endereço exibido do dispositivo

Estes comandos acabam por executar o programa tunslip6. O programa configura uma interface na pilha de protocolos do Linux, em seguida, conecta a interface ao socket em que o roteador de borda está escutando. O tunslip6 fará com que todo o tráfego endereçado ao prefixo aaaa:: seja direcionado para a interface do Cooja.

O tunslip6 apresentará uma saída semelhante a mostrada na caixa de título Terminal 2 e o Cooja apresentará algo como mostrado na figura ao lado. Agora já é possível verificar se os Tmotes Sky emulados estão acessíveis através de ferramentas como o ping6.

Simulation of the border router CONTIKI-OS.
Simulation of the border router CONTIKI-OS.

Realize testes com os seguintes comandos:

$ ping6 aaaa::212:7401:1:101 (Roteador de borda)
$ ping6 aaaa::212:7402:2:202 (Tmote rodando sky-websense)

Note que o endereço para dispositivos reais terá um identificador de host diferente dos exibidos acima. 

Em seu navegador, acesse o endereço do roteador de borda http://[aaaa::212:7401:1:101]/

A rede de exemplo possui três motes e apresenta topologia exibida na figura abaixo, em que ˜:101 é o roteador de borda.

Simulation of the border router CONTIKI-OS.
Network Topology.

O Roteador de Borda responderá com:

Neighbors
fe80::212:7402:2:202
Routes
aaaa::212:7402:2:202/128 via fe80::212:7402:2:202 16711412s
aaaa::212:7403:3:303/128 via fe80::212:7402:2:202 16711418s

A resposta à requisição feita ao roteador de borda conterá duas partes. A primeira exibe a tabela de vizinhança, ou seja, os nós diretamente ligados na árvore de roteamento do RPL (Neighbor Table). A segunda lista os nós alcançáveis (Routes) e o próximo salto na rota até aquele destinatário.

Agora acesse, pelo navegador, os recursos (luminosidade e temperatura) providos pelos Tmotes rodado sky-websense como mostrado a seguir:

Neighbors
http://[IPv6 do Tmote]/
http://[IPv6 do Tmote]/l
http://[IPv6 do Tmote]/t

Exemplo de requisição:

Neighbors
http://[aaaa::212:7403:3:303]/l

Exemplo de resposta:http://[aaaa::212:7403:3:303]/l

Simulation of the border router CONTIKI-OS.
Websense Response.

Erbium (Er) REST: Uma implementação CoAP no Contiki-OS

Esta prática abordará o uso de Representational State Transfer (REST) – Transferência de Estado Representacional. Para tanto, será utilizado o Erbium (Er), uma implementação do IETF CoAP de RTF 7252. O Er foi projetado para operar em dispositivos de baixa potência e tem código livre disponível junto com o sistema operacional Contiki. Para iniciar será feita uma breve revisão da implementação e uso do CoAP no Contiki.

A versão para dispositivos reais é apresentada em vídeo (veja aqui)

CoAP Erbium Contiki

Nesta etapa será apresentado o uso do Erbium Contiki.

Mude para o seguinte diretório:

$ cd <DIR>+/contiki/examples/er-rest-example/

Neste diretório existe uma conjunto de arquivos de exemplo do uso do Erbium. Por exemplo, o arquivo er-example-server.c mostra como desenvolver aplicações REST do lado servidor. Já er-example-client.c mostra como desenvolver um cliente que consulta um determinado recurso do servidor a cada 10s. Antes de iniciar a prática é conveniente realizar algumas configurações. A primeira delas diz respeito aos endereços que serão utilizados. Deste modo, realize as operações abaixo:

Defina os endereços dos Tmotes no arquivo /etc/hosts

Adicione os seguintes mapeamentos:
aaaa::0212:7401:0001:0101 cooja1
aaaa::0212:7402:0002:0202 cooja2

Além disso, adicione a extensão Copper (CU) CoAP user-agent no Mozilla Firefox.

No arquivo er-example-server.c verifique se as macros “REST_RES_[HELLO e TOGGLE]” possuem valor 1 e as demais macros em 0. Em caso negativo, modifique de acordo. Agora as configurações preliminares estão prontas.

Na pasta do exemplo Erbium Rest execute o comando abaixo:

$ make TARGET=cooja server-only.csc

Este comando iniciará uma simulação previamente salva. Esta simulação consta 2 dispositivos Tmotes, o dispositivo de ID 1 é um roteador de borda e o ID 2 emula um dispositivo executando er-example-server.c como firmeware.

Em um novo terminal execute o comando abaixo:

$ make connect-router-cooja

Como na primeira prática anterior, este comando executará o programa tunslip6 e realizará o mesmo procedimento anteriormente citado. Inicie a simulação, abra o Mozilla Firefox e digite: coap://cooja2:5683/

Cooja and Cooper
Cooja and Cooper.

Como resultado o Mozilla Firefox deverá abrir o ambiente do Copper. A Figura 1.12 exemplifica a situação atual. No lado esquerdo é possível verificar os recursos disponíveis pelo servidor (cooja2). Para experimentar os recursos providos pelo cooja2, selecione o recurso “hello”. Note que a URI foi alterada, em seguida, pressione o botão “GET” do ambiente Copper e observe o resultado. Já no recurso “toggle” pressione o botão “POST” e observe que o LED RED do cooja2 (no simulador) estará ligado, repita o processo e verifique novamente o LED.

É recomendável que os leitores alterem os recursos disponíveis pelo cooja2 no arquivo er-example-server.c modificando os recursos ativos no CoAP server convenientemente. Para fazer isto, comente ou descomente os “rest_activate_resource()” presentes no código. No material extra do curso, existem outras simulações e exemplos de uso. Vale ressaltar, que o mote emulado (Tmote Sky) apresenta limitações de memória, como a maioria, dos objetos inteligentes e, por esse motivo, nem sempre todos os recursos poderão está ativo ao mesmo tempo. Em caso de excesso de memória, o simulador ou compilador para o dispositivo alertará tal problema.

Fontes