Mudanças entre as edições de "Projeto de Estimador de Estado de Enlace"
Ir para navegação
Ir para pesquisar
(7 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 | + | 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; | 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, |
− | { | + | 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", |
− | + | 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(" | + | 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, | + | 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_on(LEDS_RED); // Acende o LED vermelho | |
− | printf(" | + | 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 159: | Linha 175: | ||
*08/06 até 13/06 Gerar iso do instant contiki (https://www.turnkeylinux.org/blog/convert-vm-iso) e testar antes em uma virtualbox | *08/06 até 13/06 Gerar iso do instant contiki (https://www.turnkeylinux.org/blog/convert-vm-iso) e testar antes em uma virtualbox | ||
+ | Peguei a referência desse site: https://www.sevenbits.io/blog/iso/puredarwin/osx/2015/03/11/convert-to-iso.html | ||
<code> | <code> | ||
Linha 168: | Linha 185: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | = | + | =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
- Estudo Básico de Redes
- 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))
- Duração: 8 semanas (até dia 31 de Junho)
- Colocar o detalhamento das tarefas no Trello (compartlhar com o professor: eraldo.silveira@gmail.com)
- 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).
- Estudo do Contiki/Cooja
- Instalar o Contiki/Cooja: http://www.contiki-os.org/start.html
- 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é)
- Propor e implementar um exempĺo sobre os nodos.
- 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
- Duração: 8 semanas (até dia 15 de Junho)
- 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
}
- 08/06 até 13/06 Gerar iso do instant contiki (https://www.turnkeylinux.org/blog/convert-vm-iso) e testar antes em uma virtualbox
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