{"id":615,"date":"2012-09-18T13:43:42","date_gmt":"2012-09-18T16:43:42","guid":{"rendered":"http:\/\/www.renatopeterman.com.br\/blog\/?p=615"},"modified":"2012-10-22T16:40:10","modified_gmt":"2012-10-22T19:40:10","slug":"comunicacao-serial-rxtx-com-java-e-arduino-no-mac-os-x","status":"publish","type":"post","link":"https:\/\/renatopeterman.com.br\/blog\/2012\/09\/18\/comunicacao-serial-rxtx-com-java-e-arduino-no-mac-os-x\/","title":{"rendered":"Comunica\u00e7\u00e3o Serial (RXTX) com Java e Arduino no Mac OS X"},"content":{"rendered":"<p><img loading=\"lazy\" style=\"border:none\" src=\"https:\/\/renatopeterman.com.br\/blog\/wp-content\/uploads\/2012\/09\/tutorial-rxtx.jpg\" alt=\"\" title=\"tutorial-rxtx\" width=\"550\" height=\"160\" class=\"aligncenter size-full wp-image-630\" srcset=\"https:\/\/renatopeterman.com.br\/blog\/wp-content\/uploads\/2012\/09\/tutorial-rxtx.jpg 550w, https:\/\/renatopeterman.com.br\/blog\/wp-content\/uploads\/2012\/09\/tutorial-rxtx-300x87.jpg 300w, https:\/\/renatopeterman.com.br\/blog\/wp-content\/uploads\/2012\/09\/tutorial-rxtx-500x145.jpg 500w\" sizes=\"(max-width: 550px) 100vw, 550px\" \/><\/p>\n<p>Em <a href=\"https:\/\/renatopeterman.com.br\/blog\/tag\/tutorial\/\">alguns tutoriais<\/a> aqui no blog, optei por utilizar o C# no Windows pra realizar a comunica\u00e7\u00e3o com o Arduino via serial, por ser bem simples e r\u00e1pido de fazer. Na \u00e9poca, tentei fazer com Java, mas lembro que n\u00e3o tinha uma vers\u00e3o 64 bits da biblioteca para realizar essa comunica\u00e7\u00e3o. Uma solu\u00e7\u00e3o seria recompilar a biblioteca, mas&#8230; acabei indo pra alternativa mais r\u00e1pida.<\/p>\n<p>Recentemente, comecei um projeto bem legal com o Arduino (muito em breve vou postar aqui) e agora n\u00e3o teve jeito, vai ser web (tamb\u00e9m) e a melhor alternativa seria utilizar Java.<\/p>\n<p>Vamos l\u00e1 ent\u00e3o ?<\/p>\n<p><!--more--><\/p>\n<p>O que foi utilizado no tutorial:<\/p>\n<ul>\n<li><a href=\"http:\/\/www.apple.com\/osx\/\" target=\"_blank\">Mac OS X Mountain Lion 10.8<\/a><\/li>\n<li><a href=\"http:\/\/rxtx.qbang.org\/\" target=\"_blank\">Biblioteca Java RXTX Serial<\/a><\/li>\n<li><a href=\"http:\/\/java.com\/\" target=\"_blank\">Java SE 6 (Mac)<\/a><\/li>\n<li><a href=\"http:\/\/netbeans.org\" target=\"_blank\">Netbeans 7.1<\/a><\/li>\n<li><a href=\"http:\/\/arduino.cc\/en\/Main\/Software\" target=\"_blank\">Arduino IDE 1.0.1<\/a><\/li>\n<\/ul>\n<p>At\u00e9 onde pesquisei, a melhor op\u00e7\u00e3o \u00e9 utilizar a biblioteca <a href=\"http:\/\/rxtx.qbang.org\/\" target=\"_blank\">RXTX<\/a> pelo fato de ser open source e possuir uma wiki bem legal que fornece todo o suporte necess\u00e1rio para come\u00e7ar a utiliza-la. Al\u00e9m dela existe tamb\u00e9m a <a href=\"http:\/\/www.oracle.com\/technetwork\/java\/index-jsp-141752.html\" target=\"_blank\">Java Communications API<\/a>, mas esta, parece que foi descontinuada, al\u00e9m de varias outras, inclusive bibliotecas propriet\u00e1rias.<\/p>\n<h2>1. Download e Configura\u00e7\u00e3o da Biblioteca RXTX<\/h2>\n<p>Antes de mais nada, \u00e9 necess\u00e1rio realizar o download dos arquivos no site da biblioteca. No momento em que este tutorial est\u00e1 sendo feito a vers\u00e3o utilizada foi a <strong>&#8220;rxtx 2.1-7r2 (stable)&#8221;<\/strong>, <a href=\"http:\/\/rxtx.qbang.org\/wiki\/index.php\/Download\" target=\"_blank\">acesse a p\u00e1gina de download aqui<\/a>, ou se preferir, <a href=\"http:\/\/rxtx.qbang.org\/pub\/rxtx\/rxtx-2.1-7-bins-r2.zip\" target=\"_blank\"><strong>clique aqui<\/strong><\/a> para realizar o download direto dos arquivos.<\/p>\n<p>Ap\u00f3s realizar o download \u00e9 s\u00f3 extrair os arquivos em uma pasta. O \u00fanico arquivo que vamos utilizar dai \u00e9 o <strong>&#8220;RXTXcomm.jar&#8221;<\/strong>.<\/p>\n<p>Ao inv\u00e9s de utilizar o arquivo <strong>&#8220;librxtxSerial.jnilib&#8221;<\/strong> que est\u00e1 dentro da pasta <strong>Mac_OS_X<\/strong>, vamos utilizar uma outra vers\u00e3o desse arquivo que foi compilado pelo <a href=\"http:\/\/blog.iharder.net\/\" target=\"_blank\">Robert Harder<\/a> e est\u00e1 dispon\u00edvel no seu site. Isso \u00e9 necess\u00e1rio, porque o arquivo que acompanha a biblioteca n\u00e3o tem suporte as vers\u00f5es 64 bits do Mac OS X, enquanto a vers\u00e3o disponibilizada pelo Harder, segundo seu site, suporta tanto as vers\u00f5es 32 quanto 64 bits, Intel ou PowerPC. Na p\u00e1gina tem <a href=\"http:\/\/blog.iharder.net\/2009\/08\/18\/rxtx-java-6-and-librxtxserial-jnilib-on-intel-mac-os-x\/\" target=\"_blank\">explica\u00e7\u00e3o mais detalhada<\/a>. Pra fazer o download direto <a href=\"http:\/\/blog.iharder.net\/wp-content\/uploads\/2009\/08\/librxtxSerial.jnilib\"><strong>clique aqui<\/strong><\/a>.<\/p>\n<p>Agora o que voc\u00ea precisa fazer \u00e9:<\/p>\n<ul>\n<li>Copiar o arquivo <strong>RXTXcomm.jar<\/strong> para <strong>\/Library\/Java\/Extensions<\/strong><\/li>\n<li>Copiar o arquivo <strong>librxtxSerial.jnilib<\/strong> para <strong>\/Library\/Java\/Extensions<\/strong><\/li>\n<\/ul>\n<p>J\u00e1 estamos quase l\u00e1, voc\u00ea tamb\u00e9m vai precisar criar o diret\u00f3rio <strong>\/var\/lock<\/strong> como root e atribuir as permiss\u00f5es de escrita necess\u00e1rias. Se voc\u00ea n\u00e3o sabe como fazer isso siga as instru\u00e7\u00f5es abaixo:<\/p>\n<ol>\n<li>Abra o terminal<\/li>\n<li>Digite <strong>sudo mkdir \/var\/lock<\/strong> para criar o diret\u00f3rio<\/li>\n<li>Informe a sua senha quando solicitado<\/li>\n<li>Feito isso, digite <strong>sudo chmod 777 \/var\/lock<\/strong><\/li>\n<\/ol>\n<p>Agora j\u00e1 temos a biblioteca pronta pra se comunicar com o SO. Para utiliza-la \u00e9 s\u00f3 adicionar o jar RXTXcomm.jar ao classpath do seu projeto.<\/p>\n<p>Caso a sua aplica\u00e7\u00e3o n\u00e3o compile, ser\u00e1 necess\u00e1rio tamb\u00e9m, passar os seguintes par\u00e2metros a VM quando for executar alguma aplica\u00e7\u00e3o:<\/p>\n<p><strong>-Djava.library.path=&#8221;\/caminho_pasta_rxtx;$PATH&#8221;<\/strong><\/p>\n<p>Substituindo &#8220;\/caminho_pasta_rxtx&#8221; pelo caminho onde se encontrar a sua lib &#8220;librxtxSerial.jnilib&#8221;. A minha por exemplo est\u00e1 localizada em &#8220;\/Users\/renatopeterman\/rxtx&#8221;, logo o meu ficaria da seguinte forma: -Djava.library.path=&#8221;\/Users\/renatopeterman\/rxtx;$PATH&#8221;. Mais adiante veremos como fazer tudo isso no Netbeans.<\/p>\n<h2>2. Arduino<\/h2>\n<p>Abaixo, um c\u00f3digo bem simples para ser utilizado no Arduino para que possamos realizar a comunica\u00e7\u00e3o. Basicamente, ele identifica o que est\u00e1 sendo passado para o Arduino, nesse caso um n\u00famero que corresponde ao char na tabela ASCII. Quando for informada a letra &#8220;a&#8221; na aplica\u00e7\u00e3o Java, ser\u00e1 enviado ao arduino o equivalente a tabela ASCII desse char. Por exemplo, caso seja informada o char &#8220;a&#8221;, equivalente ao n\u00famero &#8220;97&#8221; retorna a string &#8220;Voce informou a letra A&#8221;, e mesma coisa para a letra &#8220;b&#8221;, equivalente ao n\u00famero &#8220;98&#8221;. <\/p>\n<pre>\n\n<div class=\"codecolorer-container cpp default\" style=\"overflow:auto;white-space:nowrap;width:100%;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/><\/div><\/td><td><div class=\"cpp codecolorer\"><span class=\"kw4\">void<\/span> setup<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; <br \/>\n&nbsp; <span class=\"co1\">\/\/Inicia a porta serial<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/com baud rate de 9600<\/span><br \/>\n&nbsp; Serial.<span class=\"me1\">begin<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">9600<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy4\">;<\/span><br \/>\n<br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"kw4\">void<\/span> loop<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; <br \/>\n&nbsp; <span class=\"co1\">\/\/Verifica se possui alguma entrada de dados<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/na entrada Serial<\/span><br \/>\n&nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span>Serial.<span class=\"me1\">available<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/Le o parametro de dados passado<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/para a porta serial<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw4\">char<\/span> entrada <span class=\"sy1\">=<\/span> Serial.<span class=\"me1\">read<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/Se o parametro passado for a letra &quot;a&quot;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/escreve na saida serial &quot;Voce informou a letra A&quot;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span>entrada <span class=\"sy1\">==<\/span> <span class=\"nu0\">97<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; Serial.<span class=\"me1\">println<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;Voce informou a letra A&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/Se o parametro passado for a letra &quot;b&quot;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/escreve na saida serial &quot;Voce informou a letra B&quot;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span>entrada <span class=\"sy1\">==<\/span> <span class=\"nu0\">98<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; Serial.<span class=\"me1\">println<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;Voce informou a letra B&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n\n<\/pre>\n<h2>3. Java<\/h2>\n<p>Neste exemplo utilizei o c\u00f3digo que est\u00e1 dispon\u00edvel na <a href=\"http:\/\/rxtx.qbang.org\/wiki\/index.php\/Two_way_communcation_with_the_serial_port\" target=\"_blank\">p\u00e1gina do projeto<\/a> RXTX. \u00c9 um aplicativo simples, utilizando threads, que funciona via linha de comando e que permite uma comunica\u00e7\u00e3o de duas vias, onde, al\u00e9m de imprimir no console a sa\u00edda serial, \u00e9 poss\u00edvel tamb\u00e9m enviar comandos ao mesmo. Voc\u00ea pode copiar o c\u00f3digo do projeto <a href=\"http:\/\/rxtx.qbang.org\/wiki\/index.php\/Two_way_communcation_with_the_serial_port\" target=\"_blank\"><strong>clicando aqui<\/strong><\/a>.<\/p>\n<p>Como voc\u00ea j\u00e1 deve ter notado, \u00e9 necess\u00e1rio informar a porta serial no met\u00f3do main do c\u00f3digo, por exemplo, no meu caso, onde estou utilizando um Arduino Duemilanove, a porta serial est\u00e1 em <strong>&#8220;\/dev\/tty.usbserial-A600ae3J&#8221;<\/strong>.<\/p>\n<p>Abaixo segue um trecho do c\u00f3digo presente, onde deve ser informada a porta serial.<\/p>\n<pre>\n\n<div class=\"codecolorer-container cpp default\" style=\"overflow:auto;white-space:nowrap;width:100%;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/><\/div><\/td><td><div class=\"cpp codecolorer\">...<br \/>\n<span class=\"kw2\">public<\/span> <span class=\"kw4\">static<\/span> <span class=\"kw4\">void<\/span> main <span class=\"br0\">&#40;<\/span> String<span class=\"br0\">&#91;<\/span><span class=\"br0\">&#93;<\/span> args <span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">try<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/Informe a sua porta serial no met\u00f3do &quot;connect()&quot;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/Por padr\u00e3o ele traz a porta &quot;COM3&quot; que \u00e9 utilizada no Windows.<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/\u00c9 necess\u00e1rio substituir pelo nome da porta no Mac, conforme o exemplo abaixo.<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#40;<\/span><span class=\"kw3\">new<\/span> TwoWaySerialComm<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">connect<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;\/dev\/tty.usbserial-A600ae3J&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">catch<\/span> <span class=\"br0\">&#40;<\/span> Exception e <span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ TODO Auto-generated catch block<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.<span class=\"me1\">printStackTrace<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n...<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n\n<\/pre>\n<p>Como citei anteriormente, antes de executar o c\u00f3digo, \u00e9 necess\u00e1rio algumas configura\u00e7\u00f5es adicionais. Primeiro \u00e9 necess\u00e1rio adicionar o jar RXTXcomm.jar ao seu projeto. Conforme mostra a imagem abaixo, clique com o bot\u00e3o direito sobre a pasta bibliotecas do seu projeto, v\u00e1 em &#8220;Adicionar JAR\/pasta&#8230;&#8221; e selecione o arquivo <strong>&#8220;RXTXcomm.jar&#8221;<\/strong>.<\/p>\n<div align=\"center\">\n<a href=\"https:\/\/renatopeterman.com.br\/blog\/wp-content\/uploads\/2012\/09\/img-001.jpg\"><img loading=\"lazy\" src=\"https:\/\/renatopeterman.com.br\/blog\/wp-content\/uploads\/2012\/09\/img-001.jpg\" alt=\"\" title=\"img-001\" width=\"462\" height=\"411\" class=\"aligncenter size-full wp-image-704\" srcset=\"https:\/\/renatopeterman.com.br\/blog\/wp-content\/uploads\/2012\/09\/img-001.jpg 462w, https:\/\/renatopeterman.com.br\/blog\/wp-content\/uploads\/2012\/09\/img-001-300x266.jpg 300w, https:\/\/renatopeterman.com.br\/blog\/wp-content\/uploads\/2012\/09\/img-001-337x300.jpg 337w\" sizes=\"(max-width: 462px) 100vw, 462px\" \/><\/a>\n<\/div>\n<p>Feito isso, caso n\u00e3o funcione, conforme citado acima, ser\u00e1 necess\u00e1rio passar os seguintes argumentos para a VM: <\/p>\n<p><strong>-Djava.library.path=\u201d\/caminho_pasta_rxtx;$PATH\u201d<\/strong><\/p>\n<p>Substituindo &#8220;\/caminho_pasta_rxtx&#8221; pelo caminho onde est\u00e1 o arquivo <strong>&#8220;librxtxSerial.jnilib&#8221;<\/strong> no seu computador.<\/p>\n<p>No Netbeans, clique com o bot\u00e3o direito sobre o seu projeto, e selecione a op\u00e7\u00e3o propriedades. Na janela que se abriu, do lado direito selecione a op\u00e7\u00e3o &#8220;executar&#8221; e em &#8220;Op\u00e7\u00f5es da VM&#8221; informe o argumento conforme especificado acima. As imagens abaixo ilustram o procedimento.<\/p>\n<p><a href=\"https:\/\/renatopeterman.com.br\/blog\/wp-content\/uploads\/2012\/09\/img-002.jpg\"><img loading=\"lazy\" src=\"https:\/\/renatopeterman.com.br\/blog\/wp-content\/uploads\/2012\/09\/img-002-288x300.jpg\" alt=\"\" title=\"img-002\" width=\"288\" height=\"300\" class=\"aligncenter size-medium wp-image-707\" srcset=\"https:\/\/renatopeterman.com.br\/blog\/wp-content\/uploads\/2012\/09\/img-002-288x300.jpg 288w, https:\/\/renatopeterman.com.br\/blog\/wp-content\/uploads\/2012\/09\/img-002.jpg 583w\" sizes=\"(max-width: 288px) 100vw, 288px\" \/><\/a><\/p>\n<p><a href=\"https:\/\/renatopeterman.com.br\/blog\/wp-content\/uploads\/2012\/09\/img-003.jpg\"><img loading=\"lazy\" src=\"https:\/\/renatopeterman.com.br\/blog\/wp-content\/uploads\/2012\/09\/img-003-300x211.jpg\" alt=\"\" title=\"img-003\" width=\"300\" height=\"211\" class=\"aligncenter size-medium wp-image-708\" srcset=\"https:\/\/renatopeterman.com.br\/blog\/wp-content\/uploads\/2012\/09\/img-003-300x211.jpg 300w, https:\/\/renatopeterman.com.br\/blog\/wp-content\/uploads\/2012\/09\/img-003-425x300.jpg 425w, https:\/\/renatopeterman.com.br\/blog\/wp-content\/uploads\/2012\/09\/img-003.jpg 863w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<h2>3. Pronto<\/h2>\n<p>Agora \u00e9 s\u00f3 ligar tudo, cruzar os dedos e compilar, se tudo der certo, quando voc\u00ea informar a letra &#8220;a&#8221; ou &#8220;b&#8221; no console, ele retornar\u00e1 as strings correspondentes que ser\u00e3o impressas no console do Java. A partir desse exemplo simples, \u00e9 poss\u00edvel entender como \u00e9 feita a comunica\u00e7\u00e3o e serve de base para aplica\u00e7\u00f5es mais complexas. S\u00f3 depende da sua criatividade. \ud83d\ude09<\/p>\n<p><em>Se o tutorial foi \u00fatil pra voc\u00ea, por favor, n\u00e3o deixe de comentar. \ud83d\ude42<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Em alguns tutoriais aqui no blog, optei por utilizar o C# no Windows pra realizar a comunica\u00e7\u00e3o com o Arduino via serial, por ser bem simples e r\u00e1pido de fazer. Na \u00e9poca, tentei fazer com Java, mas lembro que n\u00e3o &hellip; <a href=\"https:\/\/renatopeterman.com.br\/blog\/2012\/09\/18\/comunicacao-serial-rxtx-com-java-e-arduino-no-mac-os-x\/\">Continue lendo <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[24,10,11],"tags":[25,7,76,30,50],"_links":{"self":[{"href":"https:\/\/renatopeterman.com.br\/blog\/wp-json\/wp\/v2\/posts\/615"}],"collection":[{"href":"https:\/\/renatopeterman.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/renatopeterman.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/renatopeterman.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/renatopeterman.com.br\/blog\/wp-json\/wp\/v2\/comments?post=615"}],"version-history":[{"count":82,"href":"https:\/\/renatopeterman.com.br\/blog\/wp-json\/wp\/v2\/posts\/615\/revisions"}],"predecessor-version":[{"id":754,"href":"https:\/\/renatopeterman.com.br\/blog\/wp-json\/wp\/v2\/posts\/615\/revisions\/754"}],"wp:attachment":[{"href":"https:\/\/renatopeterman.com.br\/blog\/wp-json\/wp\/v2\/media?parent=615"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/renatopeterman.com.br\/blog\/wp-json\/wp\/v2\/categories?post=615"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/renatopeterman.com.br\/blog\/wp-json\/wp\/v2\/tags?post=615"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}