Porte do MQTT-SN para o Contiki
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
doxy_files
obj_srf06-cc26xx
obj_z1
scripts_aux
simulacoes
tools
Doxyfile
LICENSE
Makefile
Makefile.target
README.md
contiki-srf06-cc26xx.a
contiki-z1.a
contiki-z1.map
doxygen_sqlite3.db
main_core-srf06-cc26xx.map
main_core.bin
main_core.c
main_core.elf
main_core.hex
main_core.srf06-cc26xx
main_core.z1
mqtt_sn.c
mqtt_sn.h
prog
project-conf.h
slip
symbols.c
symbols.h
web_slip

README.md

Porte do MQTT-SN para o Contiki-OS

logo mqtt logo do projeto
Desenvolvedor: Ânderson Ignácio da Silva
Portado parcialmente as características oficiais do protocolo, alguns limitantes ainda são impostos pelo broker (mosquitto.rsmb).
Características:

  • publicação e inscrição com QoS 0
  • wildcard (ver observações abaixo)
  • função de callback para recebimento de mensagens
  • auto-reconexão
  • documentação em doxygen
  • teste em simulação e cross-compile
  • suporte a QoS -1, 1 e 2

Iniciando:
Inicialmente recomenda-se testar com o broker em anexo (tools/mosquitto.rsmb) para o iniciar o broker MQTT-SN com IPv6 habilitado:

./broker_mqtts config.mqtt

Uma vez iniciado pode-se conectar tanto via TCP (porta 1883) ou UDP (porta 1884), recomenda-se manter uma janela de terminal aberta com inscrição no tópico # utilizando recursos do mosquitto para visualizar quaisquer pacotes trocados no broker:

mosquitto_sub -t "#" -v

Compilando:
Para testar o porte foram realizados testes na ferramenta cooja com o mote Z1, e com um teste real com o CC2650. Para utilizar a simulação, abra o cooja dentro de contiki/tools/cooja:

ant run

E abra o a simulação dentro de tools/simulacoes (mqtt_sn_exemplo) para testar compile para o TARGET=z1. É necessário que este repositório esteja dentro da pasta do contiki para encontrar os diretórios no makefile.

make TARGET=z1

Algumas flags foram adicionadas no Makefile para reduzir o tamanho do firmware gerado.

CFLAGS += -ffunction-sections
LDFLAGS += -Wl,--gc-sections,--undefined=_reset_vector__,--undefined=InterruptVectors,--undefined=_copy_data_init__,--undefined=_clear_bss_init__,--undefined=_end_of_init__

Para criar o tunelamento dos pacotes de simulação deve-se utilizar o script webserver_slip.sh (scripts_aux) assim que a simulação estiver aberta, logo ao criar o adaptador de rede tunelado os pacotes serão redirecionados para o broker local do mosquitto.rsmb.
Simulação

Teste com dispositivo real(cc2650):

Para teste com o cc2650 a biblioteca irá adicionar o arquivo lib/newlib/syscalls.c o qual é utilizado para alocação dinâmica de memória no heap do micro processador (malloc) através da chamada sbrk do sistema. Um dos detalhes percebidos é de que até o momento deste código o linker script do CC2650 no Contiki não possui definição de zona de heap, entretanto para utilizar de funções que utilizem desta zona de memória, insira no linker script do Contiki (contiki/cpu/cc26xx-cc13xx/cc26xx.ld) as linhas abaixo, no final da chave SECTIONS:

...
    _heap = .;
    _eheap = ORIGIN(SRAM) + LENGTH(SRAM);
}

A compilação para esse plataforma se dá através do TARGET=srf06-cc26xx para programação também se utiliza da ferramenta uniflash, a qual deve ser previamente instalada caso haja interesse em programar dispositivos Texas. Como auxílio para a programação e teste há dois shell scripts (programCC2650.sh e script_init_slip.sh) onde o primeiro é utilizado para programação do dispositivo através do uniflash tool e o segundo é utilizado para iniciar o tunelamento de porta, o qual cria o dispositivo tun0 no linux, utilizado pelo border-router para redirecionar os pacotes enviados e recebidos da rede mesh. Também há um terceiro script (reset_acm.sh) o qual resseta o módulo do linux utilizado pela conexão dos dispositivos do cc caso a enumeração ultrapasse valores máximo de alocação do sistema. Todos os scripts estão contidos dentro de scripts_aux. O target default do makefile do projeto é o cc2650 e para listar demais targets deve-se utilizar o comando "make targets". Abaixo segue a sequência de comandos para compilar, programar e testar com o CC2650. Inicia-se pela compilação do rpl-border-router:

cd contiki/examples/ipv6/rpl-border-router
make TARGET=srf06-cc26xx
cd contiki
contiki/MQTT-SN-Contiki---HomeStark/scripts_aux/programCC2650.sh border-router.srf06-cc26xx #Aguardar a programação
#Abrir um novo terminal com broker já aberto(./broker_mqtts config.mqtt)
#Iniciar o tunelamento (criação do tun0)
contiki/MQTT-SN-Contiki---HomeStark/scripts_aux/script_init_slip.sh /dev/ttyACMX #descobrir qual dispositivo está listado ls /dev/tty*, pegar o de menor valor
#Às vezes recomenda-se ressetar a placa do slip caso não aparece o ip atribuído

Em um novo terminal, programe o nó com o exemplo padrão:

cd contiki/MQTT-SN-Contiki---HomeStark
make TARGET=srf06-cc26xx all
scripts_aux/programCC2650.sh main_core.elf #Aguardar a programação

Assim que o dispositivo for programado ele tentará conectar ao broker e em sequência irá enviar as mensagens direcionadas conforme o exemplo, o tempo de conexão varia, algo em torno de 10 segundos aproximadamente.

##Observações

  1. Se o CC2650 utilizado for o launchpad, ele pode apresentar erro na programação com o Uniflash Tool, tal problema relacionado com o programador JTAG anexado a placa, para resolver isso, conecte o launchpad a um Windows com o software SmartRF Flash Programmer v2 e clique em "update" que após o update da ferramenta, ele irá ser programado no Linux.
  2. Toda documentação das funções está em doxygen no caminho MQTT-SN-Contiki---HomeStark/doxy_files/html/index.html.

##Contribuições e licença: Este software está sendo liberado sobre a licença Apache 2.0, qualquer contribuição deve ser informada ao autor, criando um branch novo para o feature implementado.