Mudanças entre as edições de "Projeto de Estimador de Estado de Enlace"
Ir para navegação
Ir para pesquisar
(17 revisões intermediárias por 2 usuários não estão sendo mostradas) | |||
Linha 10: | Linha 10: | ||
*Bolsa de 20h | *Bolsa de 20h | ||
− | *Segunda-feira - | + | *Segunda-feira - 07:30 às 11:30 |
− | *Terça-feira - | + | *Terça-feira - 07:30 às 11:30 |
− | *Quarta-feira - | + | *Quarta-feira - 07:30 às 11:30 |
− | *Quinta-feira - | + | *Quinta-feira - 07:30 às 11:30 |
− | *Sexta-feira - | + | *Sexta-feira - 07:30 às 11:30 |
=Cronograma de Trabalho= | =Cronograma de Trabalho= | ||
Linha 64: | Linha 64: | ||
*06/06 até 13/06: Propor exemplo de 3 nodos para fazer algo no simulador | *06/06 até 13/06: Propor exemplo de 3 nodos para fazer algo no simulador | ||
+ | |||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | #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 | ||
+ | } | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | *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> | ||
+ | |||
+ | 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 |
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