{"id":685,"date":"2014-09-26T13:37:38","date_gmt":"2014-09-26T12:37:38","guid":{"rendered":"http:\/\/ofalcao.pt\/blog\/?p=685"},"modified":"2014-09-26T13:37:38","modified_gmt":"2014-09-26T12:37:38","slug":"1-wire-led","status":"publish","type":"post","link":"https:\/\/ofalcao.pt\/blog\/2014\/1-wire-led","title":{"rendered":"1-wire LED"},"content":{"rendered":"<div class=\"seriesmeta\">This post is part 1 of 3 of \u00a0<a href=\"https:\/\/ofalcao.pt\/blog\/series\/rede-de-controlo-1-wire\" class=\"series-128\" title=\"Rede de controlo 1-wire\">Rede de controlo 1-wire<\/a><\/div><p>Estou a reproduzir em LEGO um concerto dos Xutos&amp;Pontap\u00e9s. A posi\u00e7\u00e3o dos elementos da banda em palco vai ser controlada por um controlador (ainda n\u00e3o decidi se um Raspberry Pi ou um LEGO EV3) e quero poder controlar tamb\u00e9m as luzes dos projectores:<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/www.brickshelf.com\/gallery\/jorgepereira\/X-e-P-Concerto2\/xutos-e-pontapes-concerto2-10.jpg\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/i0.wp.com\/www.brickshelf.com\/gallery\/jorgepereira\/X-e-P-Concerto2\/xutos-e-pontapes-concerto2-10.jpg?resize=279%2C364\" alt=\"\" width=\"279\" height=\"364\" \/><\/a>Se as luzes acendessem todas em simult\u00e2neo as liga\u00e7\u00f5es el\u00e9ctricas seriam simples e seriam necess\u00e1rios passar apenas 2 cabos (positivo e negativo, comuns a todos os LEDs) pela estrutura por cima do palco. Mas eu quero um controlo individual dos projectores e pelo menos 10 deles. Isso significa pelo menos 11 cabos (10 positivos e 1 negativo comum) e apesar de ser poss\u00edvel (consigo passar 4 ou 5 cabos de jumper por entre um furo Technic por isso bem arrumados os cabos at\u00e9 nem dariam muito nas vistas) obriga-me a ter pelo menos 10 portas digitais para o controlo (o que tamb\u00e9m \u00e9 poss\u00edvel com circuitos adicionais mas n\u00e3o me cativa). E se quiser aumentar o n\u00famero de projectores a coisa come\u00e7a a complicar-se.<\/p>\n<p>Comecei logo a pensar num bus de controlo e pendurar micro-circuitos de controlo ao longo do bus. O ideal mesmo seriam LEDs I2C mas n\u00e3o encontrei nada suficientemente pequeno ou funcional por isso optei por uma <a href=\"http:\/\/www.maximintegrated.com\/en\/glossary\/definitions.mvp\/term\/MicroLAN\/gpk\/608\">microLAN<\/a> 1-wire.<\/p>\n<p>O termo &#8220;<a href=\"http:\/\/en.wikipedia.org\/wiki\/1-Wire\">1-wire<\/a>&#8221; \u00e9 enganador: s\u00e3o necess\u00e1rios pelo menos 2 cabos num bus 1-wire (dados e massa) e na maioria das aplica\u00e7\u00f5es pr\u00e1ticas ser\u00e1 necess\u00e1rio um terceiro para alimentar os dispositivos (a norma prev\u00ea um modo &#8220;parasita&#8221; em que os dispositivos retiram alimenta\u00e7\u00e3o da liga\u00e7\u00e3o prevista para dados mas isso apenas se aplica a dispositivos de muito baixo consumo como sensores de temperatura). Mesmo assim 3 cabos \u00e9 muito bom para controlar quantos LEDs quiser (se decidir mais 2 ou 3 projectores n\u00e3o preciso passar mais 2 ou 3 cabos nem desencantar mais 2 ou 3 portas digitais no controlador).<\/p>\n<p>A Maxim fabrica o <a href=\"http:\/\/datasheets.maximintegrated.com\/en\/ds\/DS2413.pdf\">DS2413<\/a>, um circuito extremamente reduzido que implementa 2 portas digitais bidireccionais. \u00c9 um chip SMD mas a Adafruit fornece um<a href=\"http:\/\/www.adafruit.com\/products\/1551\"> kit<\/a> com o chip j\u00e1 montado numa placa de circuito impresso sendo s\u00f3 necess\u00e1rio soldar 4 headers e eventualmente uma resist\u00eancia (tudo fornecido com o kit) para podermos utilizar na nossa microLAN.<\/p>\n<p>Uhmmm&#8230; qual microLAN?<\/p>\n<p>\u00c9 poss\u00edvel implementar uma microLAN com o Raspberry Pi como master utilizando uma porta GPIO e uma resist\u00eancia de pull-up. Mas \u00e9 algo espec\u00edfico para o Raspberry, prefiro algo que possa replicar no meu PC ou no LEGO EV3. Por isso encomendei \u00e0 RS Online um Maxim <a href=\"http:\/\/datasheets.maximintegrated.com\/en\/ds\/DS9490-DS9490R.pdf\">DS9490R<\/a> que \u00e9 um dispositivo USB que funciona como master controller numa microLAN e \u00e9 suportado pelo Linux.<\/p>\n<p>No meu port\u00e1til (Ubuntu 14.04) foi s\u00f3 ligar:<\/p>\n<pre>$ dmesg\n(...)\n[18011.890734] usb 2-1.3: new full-speed USB device number 7 using ehci-pci\n[18011.983566] usb 2-1.3: New USB device found, idVendor=04fa, idProduct=2490\n[18011.983576] usb 2-1.3: New USB device strings: Mfr=0, Product=0, SerialNumber=0\n[18012.021996] Driver for 1-wire Dallas network protocol.\n[18012.026144] usbcore: registered new interface driver DS9490R<\/pre>\n<p>N\u00e3o fui ver que m\u00f3dulos foram carregados na altura mas penso que foram &#8216;ds2490&#8217; e &#8216;wire&#8217; (existe tamb\u00e9m um m\u00f3dulo &#8216;ds9490r&#8217; mas n\u00e3o est\u00e1 presente no meu Ubuntu).<\/p>\n<p>Ap\u00f3s detectar uma microLAN o kernel cria uma pasta &#8216;\/sys\/bus\/w1&#8217; para dispositivos 1-wire:<\/p>\n<pre>$ ls \/sys\/bus\/w1\/devices\n 81-000000336d08\u00a0 w1_bus_master1<\/pre>\n<p>&#8220;81-&#8221; identifica o DS9490<\/p>\n<p>A liga\u00e7\u00e3o do DS2413 \u00e0 microLAN \u00e9 muito simples: o DS9490R tem uma ficha RJ12, id\u00eantica \u00e0s RJ11 dos telefones mas com 6 contactos. Felizmente dos 6 contactos apenas os 2 centrais s\u00e3o necess\u00e1rios pelo que podemos usar um cabo normal de telefone s\u00f3 com dois condutores:<\/p>\n<ul>\n<li>3 &#8211; OW (OW 1-Wire Data)<\/li>\n<li>4 &#8211; GND_OW (1-Wire Return)<\/li>\n<\/ul>\n<div style=\"position: absolute; left: 282.379px; top: 310.299px; font-size: 16.8px; font-family: sans-serif; transform: rotate(0deg) scale(0.919284, 1); transform-origin: 0% 0% 0px;\" data-canvas-width=\"52.3992\" data-angle=\"0\" data-font-name=\"g_font_10\">Wire D<\/div>\n<p>Apesar da <a href=\"http:\/\/datasheets.maximintegrated.com\/en\/ds\/DS9490-DS9490R.pdf\">datasheet<\/a> da MAXIM indicar o pinout achei esta foto menos dada a confus\u00f5es:<\/p>\n<figure style=\"width: 390px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.sheepwalkelectronics.co.uk\/wiring_info.php\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.sheepwalkelectronics.co.uk\/images\/PinoutDS9490R.jpg?resize=390%2C255\" alt=\"\" width=\"390\" height=\"255\" \/><\/a><figcaption class=\"wp-caption-text\">Sheepwalk Electronics: Pinout DS9490R<\/figcaption><\/figure>\n<p>A Sheepwalk Electronics vende alguns produtos 1-wire (inclusive o DS9490R) e publica no seu site alguma informa\u00e7\u00e3o \u00fatil relacionada com 1-wire.<\/p>\n<p>Depois de soldar o header \u00e0 placa da Adafruit foi s\u00f3 fazer as liga\u00e7\u00f5es (com cabos de jumper ou crocodilos, o que houver \u00e0 m\u00e3o):<\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-693\" src=\"https:\/\/i0.wp.com\/151.236.52.166\/blog\/wp-content\/uploads\/2014\/09\/1wire-led.png?resize=766%2C398\" alt=\"1wire-led\" width=\"766\" height=\"398\" srcset=\"https:\/\/i0.wp.com\/ofalcao.pt\/blog\/wp-content\/uploads\/2014\/09\/1wire-led.png?w=766&amp;ssl=1 766w, https:\/\/i0.wp.com\/ofalcao.pt\/blog\/wp-content\/uploads\/2014\/09\/1wire-led.png?resize=300%2C155&amp;ssl=1 300w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><\/p>\n<p>Com 3 baterias AA NiMH (cerca de 3.8V) e um LED branco de alto brilho (cerca de 3.2V) temos 0.6V na resist\u00eancia por isso se esta for de 1K\u03a9 o consumo do LED ser\u00e1 de 0.6 mA de corrente, bastante abaixo dos 20 mA tolerados por cada porta e suficiente para um teste (no palco LEGO irei puxar mais por cada LED, pelo menos 10 mA cada e alimenta\u00e7\u00e3o ser\u00e1 de outro tipo).<\/p>\n<p><span style=\"text-decoration: underline;\"><strong>NOTA<\/strong><\/span>: com o kit da Adafruit vem uma resist\u00eancia de 4.7K\u03a9 para pull-up da linha &#8216;1-Wire Data&#8217;. Deveria ligar esta resist\u00eancia ao pino 1 da ficha RJ12 (+5V vindos do bus USB do host onde estiver ligado o controlador, neste caso o PC) mas n\u00e3o me agradou muito a ideia e como suspeito que internamente o controlador j\u00e1 preveja isso optei deliberadamente por n\u00e3o usar o pull-up&#8230; aparentemente sem consequ\u00eancias.<\/p>\n<p>Pouco depois de ligar o cabo telef\u00f3nico ao controlador USB o nosso circuito \u00e9 imediatamente reconhecido:<\/p>\n<pre> [\u00a0 706.356777] 0x81: count=17, status: 01 00 20 40 05 04 04 00 20 53 00 00 00 01 00 00 a5\n [\u00a0 706.356800]\n [\u00a0 706.356808]\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 enable flag:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\n [\u00a0 706.356812]\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1-wire speed:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0\n [\u00a0 706.356816]\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 strong pullup duration:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 20\n [\u00a0 706.356819]\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 programming pulse duration:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 40\n [\u00a0 706.356822]\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 pulldown slew rate control:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 5\n [\u00a0 706.356825]\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 write-1 low time:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 4\n [\u00a0 706.356829]\u00a0\u00a0\u00a0\u00a0\u00a0 data sample offset\/write-0 recovery time:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 4\n [\u00a0 706.356832]\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 reserved (test register):\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0\n [\u00a0 706.356835]\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 device status flags:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 20\n [\u00a0 706.356839]\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 communication command byte 1:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 53\n [\u00a0 706.356842]\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 communication command byte 2:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0\n [\u00a0 706.356845]\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 communication command buffer status:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0\n [\u00a0 706.356848]\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1-wire data output buffer status:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0\n [\u00a0 706.356852]\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1-wire data input buffer status:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\n [\u00a0 706.356855]\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 reserved:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0\n [\u00a0 706.356858]\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 reserved:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0\n [\u00a0 706.356861]\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 new device detect:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 a5\n [\u00a0 707.897674] w1_master_driver w1_bus_master1: Family 3a for 3a.00000012fdf4.44 is not registered.<\/pre>\n<p>Infelizmente diz que a fam\u00edla 3A n\u00e3o est\u00e1 registrada &#8211; o suporte nativo do kernel a dispositivos 1-wire n\u00e3o se extende [ainda?] ao DS2413. \u00c9 pena, assim n\u00e3o temos nada \u00fatil dentro de &#8216;\/sys\/bus\/w1\/devices\/3a-00000012fdf4&#8217;. Mas tudo bem, j\u00e1 esperava isso, existe o projecto <a href=\"http:\/\/owfs.org\/\">owfs<\/a> dedicado especificamente ao 1-wire:<\/p>\n<pre>sudo apt-get install owfs\nReading package lists... Done\nBuilding dependency tree\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\nReading state information... Done\nThe following extra packages will be installed:\n\u00a0 libow-2.8-15 owfs-common owfs-fuse owftpd owhttpd owserver\nSuggested packages:\n\u00a0 owfs-doc\nThe following NEW packages will be installed:\n\u00a0 libow-2.8-15 owfs owfs-common owfs-fuse owftpd owhttpd owserver\n0 upgraded, 7 newly installed, 0 to remove and 0 not upgraded.\nNeed to get 296 kB of archives.\nAfter this operation, 1,364 kB of additional disk space will be used.\nDo you want to continue? [Y\/n]<\/pre>\n<p>Ap\u00f3s a instala\u00e7\u00e3o descobrimos que temos 3 servi\u00e7os a correr:<\/p>\n<ul>\n<li>owserver<\/li>\n<li>owhttpd<\/li>\n<li>owftpd<\/li>\n<\/ul>\n<p>Embora n\u00e3o me pare\u00e7am necess\u00e1rios, nesta fase vou deix\u00e1-los a correr. Descobrimos tamb\u00e9m que o owfs impede o kernel de carregar os drivers que referi acima de modo a n\u00e3o ocorrerem conflitos:<\/p>\n<pre>$ cat \/etc\/modprobe.d\/libow-2.8-15.conf\nblacklist ds9490r\nblacklist ds2490\nblacklist wire<\/pre>\n<p>Para aceder \u00e0 microLAN usamos o comando &#8216;owfs&#8217; mas primeiro \u00e9 necess\u00e1rio definir um mountpoint onde o owfs vai criar uma estrutura de pastas virtuais que mapeiam cada dispositivo (escolhi &#8216;\/mnt\/1wire&#8217;):<\/p>\n<pre>sudo mkdir \/mnt\/1wire\nsudo owfs -u -m \/mnt\/1wire<\/pre>\n<p>Para confirmar que funciona:<\/p>\n<pre>$ sudo ls \/mnt\/1wire\n81.086D33000000 bus.1 settings statistics structure system uncached<\/pre>\n<p>temos 1 dispositivo na microLAN (o master controller DS9490R). Vamos agora ligar o DS2413 \u00e0 microLAN &#8211; passadas algumas dezenas de segundos temos:<\/p>\n<pre>$ sudo ls \/mnt\/1wire\n3A.F4FD12000000\u00a0 bus.1\u00a0\u00a0 \u00a0\u00a0\u00a0 statistics\u00a0 system\n81.086D33000000\u00a0 settings\u00a0 structure\u00a0\u00a0 uncached\n\n<\/pre>\n<p>agora j\u00e1 temos algo \u00fatil dentro do device &#8216;3A.F4FD12000000&#8217;:<\/p>\n<pre>$ sudo ls \/mnt\/1wire\/3A.F4FD12000000\naddress\u00a0 family\u00a0\u00a0 PIO.A\u00a0\u00a0\u00a0 PIO.BYTE\u00a0\u00a0 r_locator\u00a0\u00a0 sensed.B\nalias\u00a0\u00a0 \u00a0 id\u00a0\u00a0 \u00a0\u00a0 PIO.ALL\u00a0 r_address\u00a0 sensed.A\u00a0\u00a0 \u00a0\u00a0 sensed.BYTE\ncrc8\u00a0\u00a0 \u00a0 locator\u00a0 PIO.B\u00a0\u00a0\u00a0 r_id\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 sensed.ALL\u00a0 type<\/pre>\n<p>Ligando um LED a PIO.A podemos acend\u00ea-lo:<\/p>\n<pre>$ sudo sh -c\u00a0 \"echo 1 &gt; \/mnt\/1wire\/3A.F4FD12000000\/PIO.A\"<\/pre>\n<p>e voltar a apag\u00e1-lo:<\/p>\n<pre>$ sudo sh -c\u00a0 \"echo 0 &gt; \/mnt\/1wire\/3A.F4FD12000000\/PIO.A\"<\/pre>\n<p>(os comandos s\u00e3o muito feios porque o owfs tem de correr com previl\u00e9gios de root e eu n\u00e3o sou root no meu Ubuntu; em Raspberry Pi ou ev3dev bastaria:<\/p>\n<pre>echo 1 &gt; \/mnt\/1wire\/3A.F4FD12000000\/PIO.A\necho 0 &gt; \/mnt\/1wire\/3A.F4FD12000000\/PIO.A<\/pre>\n<p>)<\/p>\n<p>E agora um script python para piscar o LED a cada meio segundo:<\/p>\n<pre>import sys, traceback\nfrom time import sleep\nfrom subprocess import call\n\ndef main():\n\u00a0\u00a0\u00a0 try:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 while True:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 call(\"echo 1 &gt; \/mnt\/1wire\/3A.F4FD12000000\/PIO.A\", shell=True);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 sleep(0.5);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 call(\"echo 0 &gt; \/mnt\/1wire\/3A.F4FD12000000\/PIO.A\", shell=True);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 sleep(0.5);\n\n\u00a0\u00a0\u00a0 except (KeyboardInterrupt, SystemExit):\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 print \"Exiting...\";\n\u00a0\u00a0\u00a0 except Exception:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 traceback.print_exc(file=sys.stdout);\n\u00a0\u00a0\u00a0 call(\"echo 0 &gt; \/mnt\/1wire\/3A.F4FD12000000\/PIO.A\", shell=True);\n\u00a0\u00a0\u00a0 sys.exit(0);\n\nif __name__ == \"__main__\":\n\u00a0\u00a0\u00a0 main()<\/pre>\n<div class=\"jetpack-video-wrapper\"><iframe loading=\"lazy\" title=\"1-wire LED control - first test\" width=\"840\" height=\"473\" src=\"https:\/\/www.youtube.com\/embed\/dOB5bD2fPck?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<p>Os meus agradecimentos \u00e0 <a href=\"http:\/\/www.ptrobotics.com\/\">PTRobotics<\/a> por inclu\u00edrem o <a href=\"http:\/\/www.ptrobotics.com\/varios\/2954-ds2413-1-wire-two-gpio-controller-breakout.html\">Adafruit DS2413<\/a> na sua lista de produtos a meu pedido.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"seriesmeta\">This post is part 1  of 3 of \u00a0<a href=\"https:\/\/ofalcao.pt\/blog\/series\/rede-de-controlo-1-wire\" class=\"series-128\" title=\"Rede de controlo 1-wire\">Rede de controlo 1-wire<\/a><\/div><p>Estou a reproduzir em LEGO um concerto dos Xutos&amp;Pontap\u00e9s. A posi\u00e7\u00e3o dos elementos da banda em palco vai ser controlada por um controlador (ainda n\u00e3o decidi se um Raspberry Pi ou um LEGO EV3) e quero poder controlar tamb\u00e9m as luzes dos projectores: Se as luzes acendessem todas em simult\u00e2neo as liga\u00e7\u00f5es el\u00e9ctricas seriam simples &hellip; <a href=\"https:\/\/ofalcao.pt\/blog\/2014\/1-wire-led\" class=\"more-link\">Continuar a ler<span class=\"screen-reader-text\"> &#8220;1-wire LED&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[16,20],"tags":[28,73,80],"series":[128],"class_list":["post-685","post","type-post","status-publish","format-standard","hentry","category-geek","category-linux","tag-1-wire","tag-led","tag-microlan","series-rede-de-controlo-1-wire"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p2Mhyv-b3","_links":{"self":[{"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/posts\/685","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/comments?post=685"}],"version-history":[{"count":0,"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/posts\/685\/revisions"}],"wp:attachment":[{"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/media?parent=685"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/categories?post=685"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/tags?post=685"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/series?post=685"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}