{"id":619,"date":"2013-10-10T16:45:39","date_gmt":"2013-10-10T19:45:39","guid":{"rendered":"http:\/\/www.viazap.com.br\/?p=619"},"modified":"2013-10-10T16:45:39","modified_gmt":"2013-10-10T19:45:39","slug":"simulando-aplicacoes-simples-com-tinyos-e-cooja","status":"publish","type":"post","link":"https:\/\/blog.clusterweb.com.br\/?p=619","title":{"rendered":"Simulando aplica\u00e7\u00f5es simples com TinyOS e Cooja"},"content":{"rendered":"<table width=\"100%\" border=\"0\" cellspacing=\"3\" cellpadding=\"3\">\n<tbody>\n<tr>\n<td colspan=\"2\"><b>Introdu\u00e7\u00e3o e contextualiza\u00e7\u00e3o<\/b><\/p>\n<div>Ultimamente, os sistemas distribu\u00eddos usando redes de sensores sem fio (RSSF), est\u00e3o sendo bastante estudados. Apesar de poucas pessoas conhecerem o trabalho, que \u00e9 desenvolvido com esse tipo de rede, existem v\u00e1rias aplica\u00e7\u00f5es que fazem seu uso &#8211; aplica\u00e7\u00f5es de sensoreamento em geral (ex\u00e9rcito, medicina, escrit\u00f3rios, planta\u00e7\u00f5es).<\/p>\n<p>Venho, portanto, por meio deste tutorial, mostrar como simular algo no\u00a0<em>TinyOS<\/em>, uma esp\u00e9cie de sistema operacional voltado para o desenvolvimento de aplica\u00e7\u00f5es de RSSF, juntamente com o software\u00a0<em>Cooja<\/em>, que simula um ambiente de rede, permitindo analisar tudo o que acontece durante a execu\u00e7\u00e3o da aplica\u00e7\u00e3o.<\/p>\n<p>A linguagem de programa\u00e7\u00e3o utilizada no desenvolvimento \u00e9 bem parecida com a linguagem\u00a0<em>C<\/em>, ela se chama\u00a0<em>nesC<\/em>\u00a0(network embedded systems C).<\/p>\n<p>De uma maneira geral, um programa em nesC \u00e9 composto por dois arquivos, s\u00e3o eles o componente de configura\u00e7\u00e3o e o componente de implementa\u00e7\u00e3o:<\/p>\n<ol>\n<li>O primeiro \u00e9 voltado para definir e criar uma interface para componentes reais, que v\u00e3o prover as funcionalidades que estamos interessados.<\/li>\n<li>O segundo, visa implementar os eventos das interfaces do m\u00f3dulo, que cont\u00e9m as interfaces que ser\u00e3o usadas na aplica\u00e7\u00e3o.<\/li>\n<\/ol>\n<p>Obs.: a compreens\u00e3o do c\u00f3digo fica por conta do aprendiz. Eu utilizo o livro &#8220;TinyOS Programming eBook&#8221;.<\/p>\n<p>Esta \u00e9 a m\u00e1quina virtual, j\u00e1 configurada com os softwares que ser\u00e3o utilizados (a senha \u00e9\u00a0<span>user<\/span>):<\/p>\n<ul>\n<li><a href=\"http:\/\/cia2.inf.ufg.br\/ftp\/images\/Contiki_TinyOS.ova\">http:\/\/cia2.inf.ufg.br\/ftp\/images\/Contiki_TinyOS.ova<!--more--><\/a><\/li>\n<\/ul>\n<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\"><b>Simula\u00e7\u00e3o 1 &#8211; Blink<\/b><\/p>\n<div>1. Simulando a app Blink:<\/p>\n<p>Inicialmente, irei demonstrar como simular uma simples aplica\u00e7\u00e3o exemplo do TinyOS, chamada\u00a0<em>Blink<\/em>.<\/p>\n<p>Em resumo, este exemplo tem como finalidade, apenas ligar e desligar os LEDs dos sensores. Para acessar as aplica\u00e7\u00f5es dispon\u00edveis, acesse o diret\u00f3rio &#8220;home\/tinyos\/apps&#8221;. Nesta pasta voc\u00ea ter\u00e1 acesso a alguns apps exemplos do TinyOS.<\/p>\n<p>2. Entre na pasta Blink e verifique os arquivos &#8220;BlinkAppC.nc&#8221; e &#8220;BlinkC.nc&#8221;, o Makefile e o README.<\/p>\n<p>2.1 Voc\u00ea poder\u00e1 abrir os arquivos e ver os c\u00f3digos.<\/p>\n<p>3. Temos que compilar a aplica\u00e7\u00e3o, e para isso, abra o terminal e v\u00e1 at\u00e9 ao diret\u00f3rio em que o respectivo exemplo se encontra. Digite o seguinte comando:<\/p>\n<p><strong>$ make telosb<\/strong><\/p>\n<p>Obs.:\u00a0<span>telosb<\/span>\u00a0\u00e9 um tipo de sensor, executando o comando\u00a0<strong>make telosb<\/strong>, voc\u00ea estar\u00e1 compilando a aplica\u00e7\u00e3o para o sensor telosb, o mais usado geralmente.<\/p>\n<div><a href=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/1379207720.1.jpg\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" src=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/thumb_1379207720.1.jpg\" width=\"500\" height=\"313\" border=\"0\" \/><\/a><\/div>\n<p>Caso o\u00a0<strong>make<\/strong>\u00a0for executado sem erros, voc\u00ea visualizar\u00e1 este mesmo log de compila\u00e7\u00e3o.<\/p>\n<p>4. Voc\u00ea ir\u00e1 perceber que na pasta em que se encontra os arquivos &#8220;.nc&#8221;, foi criado uma pasta com o nome\u00a0<span>build<\/span>, que cont\u00e9m a pasta\u00a0<span>telosb<\/span>. Dentro dessa pasta, est\u00e3o os arquivos resultantes da compila\u00e7\u00e3o.<\/p>\n<p>5. V\u00e1 ao Desktop e abra o simulador Cooja (ele ser\u00e1 pr\u00e9-carregado pelo terminal, abrindo logo em seguida.)<\/p>\n<p>5.1. File \u2192 New Simulation (<strong>Ctrl+n<\/strong>).<\/p>\n<div><img loading=\"lazy\" decoding=\"async\" alt=\"\" src=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/1379207807.2.png\" width=\"508\" height=\"304\" \/><\/div>\n<p>5.2. D\u00ea um nome a sua simula\u00e7\u00e3o e clique em:\u00a0<span>Create<\/span>.<\/p>\n<div><a href=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/1379207807.3.png\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" src=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/thumb_1379207807.3.png\" width=\"500\" height=\"253\" border=\"0\" \/><\/a><\/div>\n<p>5.3. Voc\u00ea ver\u00e1 que o ambiente de simula\u00e7\u00e3o ser\u00e1 carregado.<\/p>\n<p>6. Agora, temos que carregar o c\u00f3digo compilado da aplica\u00e7\u00e3o para os sensores em nossa rede. Para isso, precisamos criar os sensores.<\/p>\n<p>6.1. Motes \u2192 Add Motes \u2192 Create new mote type \u2192 Sky mote.<\/p>\n<div><a href=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/1379207807.4.png\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" src=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/thumb_1379207807.4.png\" width=\"500\" height=\"223\" border=\"0\" \/><\/a><\/div>\n<p>6.2. A seguinte janela ir\u00e1 aparecer, pedindo a descri\u00e7\u00e3o do sensor (nome e o firmware). O nome pode ser qualquer.<\/p>\n<p>J\u00e1 o firmware ser\u00e1 o arquivo &#8220;main.exe&#8221;, que se encontra no diret\u00f3rio &#8220;&#8230;\/build\/telosb&#8221; do\u00a0<em>app Blink<\/em>.<\/p>\n<p>Clique em\u00a0<span>Browse<\/span>\u00a0e navegue at\u00e9 selecionar o arquivo &#8220;main.exe&#8221;. Clique em\u00a0<span>Open<\/span>\u00a0e em seguida, em\u00a0<span>Create<\/span>.<\/p>\n<div><a href=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/1379207807.5.png\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" src=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/thumb_1379207807.5.png\" width=\"500\" height=\"300\" border=\"0\" \/><\/a><\/div>\n<p>6.3. Escolha a quantidade de sensores que voc\u00ea quer ter na sua simula\u00e7\u00e3o (para esta, basta um sensor) e clique em:\u00a0<span>Add motes<\/span>.<\/p>\n<p>6.4. Voc\u00ea ver\u00e1 que o n\u00f3 foi criado na aba\u00a0<span>Network<\/span>\u00a0do simulador. Para ativar atributos desse sensor, clique no menu\u00a0<span>View<\/span>\u00a0e escolha o desejado. Como nossa aplica\u00e7\u00e3o ir\u00e1 trabalhar com os LEDs do sensor, queremos ent\u00e3o, ativar os LEDs.<\/p>\n<div><img loading=\"lazy\" decoding=\"async\" alt=\"\" src=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/1379207807.6.png\" width=\"337\" height=\"297\" \/><\/div>\n<p>6.5. Antes de colocar a simula\u00e7\u00e3o para rodar, v\u00e1 at\u00e9 a aba\u00a0<span>Simulation control<\/span>\u00a0e defina a velocidade para 100%, simulando numa m\u00e9trica real de tempo.<\/p>\n<div><img loading=\"lazy\" decoding=\"async\" alt=\"\" src=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/1379207807.7.png\" width=\"281\" height=\"159\" \/><\/div>\n<p>6.6. Clique em\u00a0<span>Start<\/span>.<\/p>\n<p>A simula\u00e7\u00e3o ir\u00e1 iniciar, come\u00e7ando a piscar os LEDs ap\u00f3s 4~6 segundos de simula\u00e7\u00e3o (este \u00e9 o tempo que, supostamente, demora para carregar o c\u00f3digo no sensor). Para parar a simula\u00e7\u00e3o, clique em\u00a0<span>Stop<\/span>.<\/p>\n<p>6.7. Voc\u00ea poder\u00e1 ver o resultado no pr\u00f3prio n\u00f3 e tamb\u00e9m na aba\u00a0<span>Timeline<\/span>, na parte inferior do simulador Cooja.<\/p>\n<div><a href=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/1379207807.8.png\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" src=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/thumb_1379207807.8.png\" width=\"500\" height=\"343\" border=\"0\" \/><\/a><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\"><b>Simula\u00e7\u00e3o 2 &#8211; PppRouter e MyEcho<\/b><\/p>\n<div>1. Simulando comunica\u00e7\u00e3o &#8220;cliente-servidor&#8221; com apps PppRouter e MyEcho:<\/p>\n<p>Para trabalharmos com essa simula\u00e7\u00e3o, precisaremos de dois APPs, que tamb\u00e9m v\u00eam junto com o TinyOS.<\/p>\n<p>O funcionamento da aplica\u00e7\u00e3o \u00e9 simples:<\/p>\n<p>Definimos um n\u00f3 como servidor, que recebe uma requisi\u00e7\u00e3o de um n\u00f3 na ponta da rede. Ocorre a troca de mensagens com estes dois n\u00f3s por interm\u00e9dio de outros n\u00f3s &#8220;secund\u00e1rios&#8221; na rede e, o n\u00f3 principal, que funcionar\u00e1 como servidor, ir\u00e1 responder ao comando recebido com uma mensagem de eco, retornando o que ele receber &#8211; se eu enviar a mensagem &#8220;TESTE ECO&#8221;, o servidor retornar\u00e1 &#8220;TESTE ECO&#8221;.<\/p>\n<p>2. Entre na pasta do\u00a0<em>pppRouter<\/em>\u00a0(\/home\/tinyos\/apps) e compile o APP com o seguinte comando:<\/p>\n<p><strong>$ make telosb blip<\/strong><\/p>\n<p>3. Entre na pasta do\u00a0<em>MyEcho<\/em>\u00a0(\/home\/tinyos\/apps) e compile o APP com o mesmo comando anterior.<\/p>\n<p>Compilamos os dois APPs necess\u00e1rios. Agora, vamos integr\u00e1-los na simula\u00e7\u00e3o no Cooja.<\/p>\n<p>4. Abra o Cooja para configurar a simula\u00e7\u00e3o.<\/p>\n<p>4.1. Crie uma nova simula\u00e7\u00e3o, com o nome que quiser.<\/p>\n<p>4.2. Crie o primeiro Sky mote com o c\u00f3digo do pppRouter (tem que ser o mote 1). Navegue at\u00e9 a pasta &#8220;build\/telosb&#8221; dentro da pasta do APP pppRouter e selecione o\u00a0<span>main.exe<\/span>:<\/p>\n<div><a href=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/1379208373.9.png\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" src=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/thumb_1379208373.9.png\" width=\"500\" height=\"304\" border=\"0\" \/><\/a><\/div>\n<p>* Importante: adicione apenas um n\u00f3 com esta configura\u00e7\u00e3o.<\/p>\n<p>4.3. Agora, voc\u00ea pode criar quantos Sky motes voc\u00ea quiser com o c\u00f3digo do APP MyEcho (em m\u00e9dia de 3 a 5 n\u00f3s).<\/p>\n<p>5. O tutorial em rela\u00e7\u00e3o \u00e0 primeira simula\u00e7\u00e3o difere-se neste ponto. Aqui, iremos fazer o uso de dois scripts simples que ir\u00e3o nos ajudar a configurar nossa interface de comunica\u00e7\u00e3o na rede simulada, criando uma conex\u00e3o via socket.<\/p>\n<p>5.1. Clique com o bot\u00e3o direito sobre o n\u00f3 sensor 1 e procure a op\u00e7\u00e3o:<\/p>\n<p>\u2192 Mote tools for Sky 1 \u2192 Serial socket (SERVER)<\/p>\n<p>5.1.1. Uma janela ir\u00e1 abrir indicando que a porta 60001 est\u00e1 escutando.<\/p>\n<p>Neste momento, usaremos os dois scripts mencionados. Eles ser\u00e3o usados, basicamente, para criar uma interface chamada\u00a0<span>ppp0<\/span>\u00a0de comunica\u00e7\u00e3o na rede.<\/p>\n<p>5.2. Crie um documento em branco e salve-o com o nome\u00a0<span>socket.sh<\/span>, contendo o seguinte conte\u00fado:<\/p>\n<div>#!\/bin\/bash<\/p>\n<p>sudo pppd debug passive noauth nodetach 115200 socket 127.0.0.1:60001 \\<br \/>\nnocrtscts nocdtrcts lcp-echo-interval 0 noccp noip ipv6 ::23,::24<\/p><\/div>\n<div><a href=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/1379208373.10.png\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" src=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/thumb_1379208373.10.png\" width=\"500\" height=\"196\" border=\"0\" \/><\/a><\/div>\n<p>5.3. Crie um segundo arquivo com o nome de\u00a0<span>interface.sh<\/span>\u00a0com o seguinte conte\u00fado:<\/p>\n<div>#!\/bin\/bash<\/p>\n<p>sudo ifconfig ppp0 add fec0::100\/64<\/p><\/div>\n<div><a href=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/1379208373.11.png\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" src=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/thumb_1379208373.11.png\" width=\"500\" height=\"201\" border=\"0\" \/><\/a><\/div>\n<p>5.4. Crie um terceiro arquivo com o nome de\u00a0<span>pppd.sh<\/span>\u00a0contendo:<\/p>\n<div>#!\/bin\/bash<\/p>\n<p>sudo pppd debug passive noauth nodetach 115200 \/dev\/ttyUSB0 \\<br \/>\nnocrtscts nocdtrcts lcp-echo-interval 0 noccp noip ipv6 ::23,::24<\/p><\/div>\n<div><a href=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/1379208373.12.png\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" src=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/thumb_1379208373.12.png\" width=\"500\" height=\"183\" border=\"0\" \/><\/a><\/div>\n<p>5.5. Abra um terminal para executar cada comando, deixando-os pr\u00e9-escritos, ao ponto de se apertar\u00a0<span>Enter<\/span>.<\/p>\n<div><a href=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/1379208373.13.png\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" src=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/thumb_1379208373.13.png\" width=\"500\" height=\"228\" border=\"0\" \/><\/a><\/div>\n<p>5.5.1. Deixe uma aba no terminal do\u00a0<span>socket.sh<\/span>\u00a0com o comando\u00a0<strong>ifconfig<\/strong>, para que voc\u00ea possa verificar se a interface ppp0 foi realmente criada.<\/p>\n<div><a href=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/1379208373.14.png\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" src=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/thumb_1379208373.14.png\" width=\"500\" height=\"145\" border=\"0\" \/><\/a><\/div>\n<p>5.6. Volte ao Cooja, coloque a velocidade em 100% e inicie a simula\u00e7\u00e3o.<\/p>\n<p>5.7. Ative o comando\u00a0<strong>socket.sh<\/strong>.<\/p>\n<p>5.8. Em seguida, rode o arquivo\u00a0<span>interface.sh<\/span>, configurando assim, o endere\u00e7o IPv6.<\/p>\n<p>Se tudo der certo, ir\u00e1 criar uma interface de rede ppp0 &#8211; vide via comando\u00a0<strong>ifconfig<\/strong>\u00a0em uma aba do terminal.<\/p>\n<div><a href=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/1379208373.15.png\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" src=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/thumb_1379208373.15.png\" width=\"500\" height=\"281\" border=\"0\" \/><\/a><\/div>\n<p>Abri dois terminais, configurei o Cooja, e deixei o\u00a0<span>socket.sh<\/span>\u00a0no primeiro terminal, e o\u00a0<span>interface.sh<\/span>\u00a0no segundo. Ao iniciar a simula\u00e7\u00e3o, executei os comandos nos terminais.<\/p>\n<div><a href=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/1379208373.16.png\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" src=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/thumb_1379208373.16.png\" width=\"500\" height=\"281\" border=\"0\" \/><\/a><\/div>\n<p>Interface ppp0 criada.<\/p>\n<p>6.Tudo deve estar funcionando.<\/p>\n<p>6.1. Use o\u00a0<strong>nc6<\/strong>\u00a0para iniciar uma comunica\u00e7\u00e3o com os sensores:<\/p>\n<p><strong>$ nc6 -u fec0::2 8989<\/strong><\/p>\n<p>6.2. Tudo que digitar depois ser\u00e1 enviado at\u00e9 o sensores, que responder\u00e1 com a mesma String.<\/p>\n<div><img loading=\"lazy\" decoding=\"async\" alt=\"\" src=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/1379208373.17.png\" width=\"362\" height=\"239\" \/><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\"><b>Conclus\u00e3o<\/b><\/p>\n<div>Chegamos ao final deste tutorial, galera.<\/p>\n<p>Espero que ele n\u00e3o esteja ficado muito confuso, mas tamb\u00e9m espero que tenha alcan\u00e7ado o objetivo de trazer um pouco sobre o funcionamento das aplica\u00e7\u00f5es em RSSF.<\/p>\n<p>O TinyOS nos oferece um suporte junto com o IPv6, onde podemos criar aplica\u00e7\u00f5es poderosas e que sejam de grande utilidade no campo tecnol\u00f3gico. A partir destes simples tutorial fica livre o interesse da comunidade em aprofundar mais nesse ramo de Rede de Computadores.<\/p>\n<p>N\u00e3o pare por esses exemplos, procure compreender bem o funcionamento deles e sigam em frente com os estudos.<\/p>\n<p>Muito obrigado.<\/p><\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n","protected":false},"excerpt":{"rendered":"<p>Introdu\u00e7\u00e3o e contextualiza\u00e7\u00e3o Ultimamente, os sistemas distribu\u00eddos usando redes de sensores sem fio (RSSF), est\u00e3o sendo bastante estudados. Apesar de poucas pessoas conhecerem o trabalho, que \u00e9 desenvolvido com esse tipo de rede, existem v\u00e1rias aplica\u00e7\u00f5es que fazem seu uso &#8211; aplica\u00e7\u00f5es de sensoreamento em geral (ex\u00e9rcito, medicina, escrit\u00f3rios, planta\u00e7\u00f5es). Venho, portanto, por meio deste [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1,42,51,68],"tags":[347,349,352,351,348,346,350],"class_list":["post-619","post","type-post","status-publish","format-standard","hentry","category-viazap","category-leitura-recomendada","category-linux-linuxrs","category-redes-2","tag-aplicacoes","tag-com","tag-cooja","tag-e","tag-simples","tag-simulando","tag-tinyos"],"_links":{"self":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/619","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=619"}],"version-history":[{"count":1,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/619\/revisions"}],"predecessor-version":[{"id":620,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/619\/revisions\/620"}],"wp:attachment":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=619"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=619"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=619"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}