Mudanças entre as edições de "Projeto de Estimador de Estado de Enlace"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
 
(6 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 80: Linha 80:
  
 
#define UDP_PORT 1234
 
#define UDP_PORT 1234
 +
// Define a porta UDP
 
#define SEND_INTERVAL (20 * CLOCK_SECOND)
 
#define SEND_INTERVAL (20 * CLOCK_SECOND)
 +
// Define o tempo qual equivale a SEND_INTERVAL
 
#define SEND_TIME (random_rand() % (SEND_INTERVAL))
 
#define SEND_TIME (random_rand() % (SEND_INTERVAL))
 +
// Define o tempo qual equivale a SEND_TIME
  
 
//------------------------------ VÁRIAVEIS ---------------------------------//
 
//------------------------------ VÁRIAVEIS ---------------------------------//
  
static struct simple_udp_connection unicast_connection;
+
static struct simple_udp_connection broadcast_connection; // Cria a estrutura do tipo simple_udp_connection com o nome de broadcast_connection
static struct etimer et_blink;
 
 
static uint8_t blinks;
 
static uint8_t blinks;
  
 
//--------------------------------------------------------------------------//
 
//--------------------------------------------------------------------------//
PROCESS(broadcast_example_process, "UDP broadcast example process");
+
PROCESS(broadcast_example_process, "UDP broadcast example process"); /*broadcast_example_process é o nome do processo e "UDP broadcast example process"
PROCESS(blink_process, "LED blink process");
+
é o nome que será impresso no terminal*/
AUTOSTART_PROCESSES(&broadcast_example_process,&blink_process);
+
PROCESS(blink_process, "LED blink process"); // blink_process é nome do processo e "LED blink process" é o nome que será impresso no terminal
 +
AUTOSTART_PROCESSES(&broadcast_example_process,&blink_process); // Dá o comando para o contiki começar o processo após ser iniciado
  
 
//------------------------------ RECEPTOR ----------------------------------//
 
//------------------------------ RECEPTOR ----------------------------------//
Linha 102: Linha 105:
 
         uint16_t receiver_port,
 
         uint16_t receiver_port,
 
         const uint8_t *data,
 
         const uint8_t *data,
         uint16_t datalen)
+
         uint16_t datalen) /* Função que recebe os parâmetros na seguinte ordem (ponteiro apontando para uma struct do tipo simple_udp_connection,
{Instant_Contiki_Ubuntu_12.04_32-bit
+
          ponteiro com o tipo de endereço IP de quem enviou, número da porta quem enviou a mensagem, ponteiro com o tipo de endereço IP de quem recebeu,
 +
            número da porta de quem recebeu a mensagem, ponteiro apontando para o tamanho 8bytes em constante inteiras, tamanho da mensagem enviada)*/
 +
{
 +
  leds_on(LEDS_GREEN); // Acende o LED verde
 
   printf("A porta %d recebeu dados da porta %d com tamanho %d\n",
 
   printf("A porta %d recebeu dados da porta %d com tamanho %d\n",
         receiver_port, sender_port, datalen);
+
         receiver_port, sender_port, datalen); /* Mostra a mensagem (A porta "número do nó que recebeu" recebeu dados da porta "número do nó que enviou",
   leds_toggle(LEDS_GREEN);
+
          com tamanho "tamanho da mensagem" )*/
 +
   leds_off(LEDS_GREEN); // Apaga o LED verde
 
}
 
}
  
 
//------------------------------ PROCESSOS -----------------------------//
 
//------------------------------ PROCESSOS -----------------------------//
  
PROCESS_THREAD(broadcast_example_process, ev, data)
+
PROCESS_THREAD(broadcast_example_process, ev, data) /* Recebe o conteúdo do processo no qual possui os parâmetros na seguinte ordem (funções do processo,
 +
  manipulador de evento, manipulador de dados)*/
 
{
 
{
   static struct etimer periodic_timer;
+
   static struct etimer periodic_timer; // Cria a estrutura do tipo etimer com o nome de periodic_timer
   static struct etimer send_timer;
+
   static struct etimer send_timer; // Cria a estrutura do tipo etimer com o nome de send_timer
   uip_ipaddr_t addr;
+
   uip_ipaddr_t addr; // Representação do endereço de IP
  
   PROCESS_BEGIN();
+
   PROCESS_BEGIN(); // Inicia o processo
  
 
   simple_udp_register(&broadcast_connection, UDP_PORT,
 
   simple_udp_register(&broadcast_connection, UDP_PORT,
 
                       NULL, UDP_PORT,
 
                       NULL, UDP_PORT,
                       receiver);
+
                       receiver); /* Faz um registro UDP simples que recebe como parâmetros na ordem os seguintes itens
 +
                      (ponteiro apontando para struct do tipo simple_udp_connection, porta UDP local definida previamente, endereço de IP remoto,
 +
                        porta UDP remota definida previamente, um ponteiro para chamar uma função)*/
  
   etimer_set(&periodic_timer, SEND_INTERVAL);
+
   etimer_set(&periodic_timer, SEND_INTERVAL); // Seta o periodic_timer com o valor de SEND_INTERVAL
   while(1)
+
   while(1) // Loop infinito
 
   {
 
   {
     PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&periodic_timer));
+
     PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&periodic_timer)); // Aguarda um evento acontecer, com uma condição extra, a qual está entre ()
     etimer_reset(&periodic_timer);
+
     etimer_reset(&periodic_timer); // Reseta o periodic_timer
     etimer_set(&send_timer, SEND_TIME);
+
     etimer_set(&send_timer, SEND_TIME); // Seta o send_timer com o valor de SEND_TIME
  
     PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&send_timer));
+
     PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&send_timer)); // Aguarda um evento acontecer, com uma condição extra, a qual está entre ()
     printf("Sending broadcast\n");
+
     printf("Enviando transmissão\n"); // Mostra a mensagem (Enviando transmissão)
     uip_create_linklocal_allnodes_mcast(&addr);
+
     uip_create_linklocal_allnodes_mcast(&addr); // Torna o IpV6 endereço local de todos os nós criados
     simple_udp_sendto(&broadcast_connection, "Test", 4, &addr);
+
     simple_udp_sendto(&broadcast_connection, "Test", 4, &addr); /* Envio de mensagem UDP que recebe como parâmetros na ordem os seguintes itens
 +
    (ponteiro apontando para struct do tipo simple_udp_connection, um ponteiro apontando para os dados a serem enviados,
 +
      o tamanho dos dados que serão enviados, endereço IP de quem irá receber)*/
 
   }
 
   }
  
   PROCESS_END();
+
   PROCESS_END(); // Finaliza o processo
 
}
 
}
  
 
// -------------------------------------------------------------------------//
 
// -------------------------------------------------------------------------//
PROCESS_THREAD(blink_process, ev, data)
+
PROCESS_THREAD(blink_process, ev, data) /* Recebe o conteúdo do processo no qual possui os parâmetros na seguinte ordem (funções do processo,
 +
  manipulador de evento, manipulador de dados)*/
 
{
 
{
   PROCESS_BEGIN();
+
  static struct etimer send_timer; // Cria a estrutura do tipo etimer com o nome de send_timer
 +
  static struct etimer et_blink; // Cria a estrutura do tipo etimer com nome et_blink
 +
   PROCESS_BEGIN(); // Inicia o processo
  
   while(1)
+
   while(1) // Entra em um loop infinito
 
   {
 
   {
     etimer_set(&et_blink, CLOCK_SECOND);
+
     etimer_set(&et_blink, SEND_TIME); // Seta o et_blink com o valor de SEND_TIME
  
     PROCESS_WAIT_EVENT_UNTIL(ev == PROCESS_EVENT_TIMER);
+
     PROCESS_WAIT_EVENT_UNTIL(ev == PROCESS_EVENT_TIMER); // Aguarda um evento acontecer, com uma condição extra, a qual está entre ()
     leds_toggle(LEDS_RED);
+
     leds_on(LEDS_RED); // Acende o LED vermelho
     printf("Piscar led... (state %0.2X)\n", leds_get());
+
     printf("Uma mensagem foi enviada"); // Mostra a mensagem (Uma mensagem foi enviada)
 +
    leds_on(LEDS_RED); // Apaga o LED vermelho
 
   }
 
   }
  
   PROCESS_END();
+
   PROCESS_END(); // Finaliza o processo
 
}
 
}
  
Linha 169: Linha 185:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
=Pontos a serem incluídos no cronograma=
+
=Semana 7 DATA 13/06 =
*Estudar Cap.4 itens 4.1 e 4.2 do livro IoT
+
 
*Estudar no cooja quais modelos de propagação de sinal são disponíveis
+
*13/06 até 18/06 Estudar Cap.4 itens 4.1 e 4.2 do livro IoT
 +
*14/06 até 20/06 Estudar no cooja quais modelos de propagação de sinal são disponíveis
 +
 
 +
=Semana 8 DATA 20/06 =
 
*Fazer um experimento para capturar LQI e RSSI no mote
 
*Fazer um experimento para capturar LQI e RSSI no mote
 +
 +
=Semana 9 DATA 27/06 =
 +
*Fazer um programa para ler dados da leitura de estado e devolver esses dados para um arquivo XML

Edição atual tal como às 10h34min de 28 de junho de 2018

Página do Bolsista

Nome: Gabriel Espíndola Soares de Souza

Local de Trabalho

Labic

Horário de Trabalho

  • Bolsa de 20h
  • Segunda-feira - 07:30 às 11:30
  • Terça-feira - 07:30 às 11:30
  • Quarta-feira - 07:30 às 11:30
  • Quinta-feira - 07:30 às 11:30
  • Sexta-feira - 07:30 às 11:30

Cronograma de Trabalho

  1. Estudo Básico de Redes
    1. Referência: Livro de Redes de Computadores do Kurose e experimentos de rede (https://wiki.sj.ifsc.edu.br/index.php/Curso_T%C3%A9cnico_Integrado_de_Telecomunica%C3%A7%C3%B5es_-_Redes_de_Computadores_(RCO))
    2. Duração: 8 semanas (até dia 31 de Junho)
    3. Colocar o detalhamento das tarefas no Trello (compartlhar com o professor: eraldo.silveira@gmail.com)
    4. Indicador de Sucesso: Resumo dos cap.1,2.1, 2.2, 2.5, 2.7, 3.1, 3.3, 4.1, 4.2,4.3,4.4,5.1, 5.2, 5.3,6.1,6.2, 6.3 - (i) Fazer no Sharelatex em um modelo de relatório - compartilhar com o coordenador. (ii) Execução dos experimentos de laboratório do link passado (resumo de atividades).
  2. Estudo do Contiki/Cooja
    1. Instalar o Contiki/Cooja: http://www.contiki-os.org/start.html
    2. Estudar no Contiki/Cooja dois exemplos do diretório /home/user/contiki/examples: ipv6/simple-udp-rpl e escolher outro exemplo simples usando rime (falar com André)
    3. Propor e implementar um exempĺo sobre os nodos.
    4. Indicador de Sucesso: (i) discutir os dois exemplos no relatório (ii)propor um exemplo de comunicação usando 3 nodos para fazer algo específico no simulador
    5. Duração: 8 semanas (até dia 15 de Junho)
    6. Colocar o detalhamento das tarefas no Trello (compartlhar com o professor: eraldo.silveira@gmail.com)

Semana 1 DATA 02/05

  • 02/05 até 03/05: Leitura e produção do resumo sobre os subcapítulos 1.1,1.2 e 1.3;
  • 04/05 até 07/05: Instalação do Contiki/Cooja;
  • 08/05 até 09/05: Leitura e produção do resumo sobre os subcapítulos 1.4,1.5,1.6,1.7;

Semana 2 DATA 09/05

  • 10/05 até 15/05: Leitura e produção do resumos dos subcapítulos 2.1,2.2,2.5,2.7;
  • 12/05 até 18/05: Estudar no Contiki/Cooja dois exemplos do diretório /home/user/contiki/examples: ipv6/simple-udp-rpl e escolher outro exemplo simples usando rime;

Semana 3 DATA 16/05

  • 16/05 até 17/05: Leitura e produção do resumo dos subcapítulos 3.1,3.3
  • 18/05 até 24/05: Leitura e produção do resumo dos subcapítulos 4.1,4.2,4.3,4.4
  • 18/05 até 25/05: Estudo no Contiki/Cooja os exemplos unicast-receiver.c e unicast-sender.c do diretório /home/user/contiki/examples: ipv6/simple-udp-rpl

Semana 4 DATA 23/05

  • 25/05 até 30/05: Leitura e produção do resumo dos subcapítulos 5.1,5.2,5.3
  • 23/05 até 30/05: Realização dos laboratórios 1 e 2

Semana 5 DATA 30/05

  • 30/05 até 05/06: Leitura e produção do resumo dos subcapítulos 6.1,6.2,6.3
  • 30/05 até 06/06: Realização do laboratórios 3 e 4

Semana 6 DATA 06/06

  • 06/06 até 13/06: Propor exemplo de 3 nodos para fazer algo no simulador


#include "contiki.h"
#include "lib/random.h"
#include "sys/ctimer.h"
#include "sys/etimer.h"
#include "net/ip/uip.h"
#include "net/ipv6/uip-ds6.h"
#include "simple-udp.h"
#include <stdio.h>
#include <string.h>
#include "dev/leds.h"


#define UDP_PORT 1234
// Define a porta UDP
#define SEND_INTERVAL		(20 * CLOCK_SECOND)
// Define o tempo qual equivale a SEND_INTERVAL
#define SEND_TIME		(random_rand() % (SEND_INTERVAL))
// Define o tempo qual equivale a SEND_TIME

//------------------------------ VÁRIAVEIS ---------------------------------//

static struct simple_udp_connection broadcast_connection; // Cria a estrutura do tipo simple_udp_connection com o nome de broadcast_connection
static uint8_t blinks;

//--------------------------------------------------------------------------//
PROCESS(broadcast_example_process, "UDP broadcast example process"); /*broadcast_example_process é o nome do processo e "UDP broadcast example process"
é o nome que será impresso no terminal*/
PROCESS(blink_process, "LED blink process"); // blink_process é nome do processo e "LED blink process" é o nome que será impresso no terminal
AUTOSTART_PROCESSES(&broadcast_example_process,&blink_process); // Dá o comando para o contiki começar o processo após ser iniciado

//------------------------------ RECEPTOR ----------------------------------//
static void
receiver(struct simple_udp_connection *c,
         const uip_ipaddr_t *sender_addr,
         uint16_t sender_port,
         const uip_ipaddr_t *receiver_addr,
         uint16_t receiver_port,
         const uint8_t *data,
         uint16_t datalen) /* Função que recebe os parâmetros na seguinte ordem (ponteiro apontando para uma struct do tipo simple_udp_connection,
           ponteiro com o tipo de endereço IP de quem enviou, número da porta quem enviou a mensagem, ponteiro com o tipo de endereço IP de quem recebeu,
            número da porta de quem recebeu a mensagem, ponteiro apontando para o tamanho 8bytes em constante inteiras, tamanho da mensagem enviada)*/
{
  leds_on(LEDS_GREEN); // Acende o LED verde
  printf("A porta %d recebeu dados da porta %d com tamanho %d\n",
         receiver_port, sender_port, datalen); /* Mostra a mensagem (A porta "número do nó que recebeu" recebeu dados da porta "número do nó que enviou",
          com tamanho "tamanho da mensagem" )*/
  leds_off(LEDS_GREEN); // Apaga o LED verde
}

//------------------------------ PROCESSOS -----------------------------//

PROCESS_THREAD(broadcast_example_process, ev, data) /* Recebe o conteúdo do processo no qual possui os parâmetros na seguinte ordem (funções do processo,
  manipulador de evento, manipulador de dados)*/
{
  static struct etimer periodic_timer; // Cria a estrutura do tipo etimer com o nome de periodic_timer
  static struct etimer send_timer; // Cria a estrutura do tipo etimer com o nome de send_timer
  uip_ipaddr_t addr; // Representação do endereço de IP

  PROCESS_BEGIN(); // Inicia o processo

  simple_udp_register(&broadcast_connection, UDP_PORT,
                      NULL, UDP_PORT,
                      receiver); /* Faz um registro UDP simples que recebe como parâmetros na ordem os seguintes itens
                      (ponteiro apontando para struct do tipo simple_udp_connection, porta UDP local definida previamente, endereço de IP remoto,
                        porta UDP remota definida previamente, um ponteiro para chamar uma função)*/

  etimer_set(&periodic_timer, SEND_INTERVAL); // Seta o periodic_timer com o valor de SEND_INTERVAL
  while(1) // Loop infinito
  {
    PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&periodic_timer)); // Aguarda um evento acontecer, com uma condição extra, a qual está entre ()
    etimer_reset(&periodic_timer); // Reseta o periodic_timer
    etimer_set(&send_timer, SEND_TIME); // Seta o send_timer com o valor de SEND_TIME

    PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&send_timer)); // Aguarda um evento acontecer, com uma condição extra, a qual está entre ()
    printf("Enviando transmissão\n"); // Mostra a mensagem (Enviando transmissão)
    uip_create_linklocal_allnodes_mcast(&addr); // Torna o IpV6 endereço local de todos os nós criados
    simple_udp_sendto(&broadcast_connection, "Test", 4, &addr); /* Envio de mensagem UDP que recebe como parâmetros na ordem os seguintes itens
    (ponteiro apontando para struct do tipo simple_udp_connection, um ponteiro apontando para os dados a serem enviados,
      o tamanho dos dados que serão enviados, endereço IP de quem irá receber)*/
  }

  PROCESS_END(); // Finaliza o processo
}

// -------------------------------------------------------------------------//
PROCESS_THREAD(blink_process, ev, data) /* Recebe o conteúdo do processo no qual possui os parâmetros na seguinte ordem (funções do processo,
  manipulador de evento, manipulador de dados)*/
{
  static struct etimer send_timer; // Cria a estrutura do tipo etimer com o nome de send_timer
  static struct etimer et_blink; // Cria a estrutura do tipo etimer com nome et_blink
  PROCESS_BEGIN(); // Inicia o processo

  while(1) // Entra em um loop infinito
  {
    etimer_set(&et_blink, SEND_TIME); // Seta o et_blink com o valor de SEND_TIME

    PROCESS_WAIT_EVENT_UNTIL(ev == PROCESS_EVENT_TIMER); // Aguarda um evento acontecer, com uma condição extra, a qual está entre ()
    leds_on(LEDS_RED); // Acende o LED vermelho
    printf("Uma mensagem foi enviada"); // Mostra a mensagem (Uma mensagem foi enviada)
    leds_on(LEDS_RED); // Apaga o LED vermelho
  }

  PROCESS_END(); // Finaliza o processo
}

Peguei a referência desse site: https://www.sevenbits.io/blog/iso/puredarwin/osx/2015/03/11/convert-to-iso.html

sudo apt-get install qemu-img qemu-img convert -f vmdk nome_do_arquivo.vmdk novo_nome.raw dd if=novo_nome.raw of=novo_nome.iso

</syntaxhighlight>

Semana 7 DATA 13/06

  • 13/06 até 18/06 Estudar Cap.4 itens 4.1 e 4.2 do livro IoT
  • 14/06 até 20/06 Estudar no cooja quais modelos de propagação de sinal são disponíveis

Semana 8 DATA 20/06

  • Fazer um experimento para capturar LQI e RSSI no mote

Semana 9 DATA 27/06

  • Fazer um programa para ler dados da leitura de estado e devolver esses dados para um arquivo XML