{"id":657,"date":"2014-09-12T17:40:41","date_gmt":"2014-09-12T16:40:41","guid":{"rendered":"http:\/\/ofalcao.pt\/blog\/?p=657"},"modified":"2014-09-12T17:40:41","modified_gmt":"2014-09-12T16:40:41","slug":"lego-b3ac0n","status":"publish","type":"post","link":"https:\/\/ofalcao.pt\/blog\/2014\/lego-b3ac0n","title":{"rendered":"LEGO B3AC0N"},"content":{"rendered":"<p>Com os updates recentes ao kernel do ev3dev e a inclus\u00e3o do m\u00f3dulo btusb [a meu pedido, mod\u00e9stia \u00e0 parte] j\u00e1 \u00e9 poss\u00edvel utilizar dongles Bluetooth 4.0 com o LEGO EV3.<\/p>\n<p>Enquanto n\u00e3o me chegam \u00e0s m\u00e3os beacons e outros dispositivos BT 4.0 para testar, o \u00fanico aparelho que tenho \u00e9 um telem\u00f3vel Android que infelizmente apenas &#8220;consome&#8221; servi\u00e7os. Bem, demos-lhe qualquer coisa para consumir: um beacon &#8211; n\u00e3o posso dizer iBeacon porque \u00e9 trademark da Apple&#8230; mas \u00e9 a mesma coisa: um \u00abfarol\u00bb que pode servir para marcar presen\u00e7a, orienta\u00e7\u00e3o, medi\u00e7\u00e3o de dist\u00e2ncias, fornecimento personalizado de informa\u00e7\u00e3o&#8230;<\/p>\n<p>A implementa\u00e7\u00e3o \u00e9 muito f\u00e1cil, est\u00e1 quase tudo no post &#8220;<a title=\"Adafruit: piBeacon\" href=\"https:\/\/learn.adafruit.com\/pibeacon-ibeacon-with-a-raspberry-pi\/overview\">piBeacon &#8211; DIY Beacon with a Raspberry Pi<\/a>&#8221; da Adafruit.<\/p>\n<p>Claro que primeiro \u00e9 necess\u00e1rio um dongle Bluetooth 4.0 como <a title=\"PTRobotics: Bluetooth 4.0 USB Module\" href=\"http:\/\/www.ptrobotics.com\/placas-de-expansao\/2331-bluetooth-40-usb-module-v21-back-compatible.html\">este<\/a> (qualquer um que funcione num Raspberry Pi a correr Raspbian dever\u00e1 funcionar tamb\u00e9m com o EV3 a correr ev3dev).<\/p>\n<p>\u00c9 necess\u00e1rio tamb\u00e9m uma vers\u00e3o recente do ev3dev (baseado em Debian jessie, com kernel\u00a0 3.16.1-1 ou superior, neste momento estou a usar a 3.16.1-2). Quem j\u00e1 tiver instalado a vers\u00e3o pre-release (ev3dev-jessie-2014-07-12) que \u00e0 data \u00e9 <a title=\"ev3dev: Releases for Download\" href=\"https:\/\/github.com\/ev3dev\/ev3dev\/releases\">a mais recente dispon\u00edvel<\/a> para download, basta<\/p>\n<pre>apt-get update\napt-get dist-upgrade\napt-get install linux-image-3.16.1-2<\/pre>\n<p>Para confirmar que temos o dongle a funcionar usamos o comando hciconfig:<\/p>\n<pre>root@ev3dev:~# hciconfig -a<\/pre>\n<pre>hci1:\u00a0\u00a0 \u00a0Type: BR\/EDR\u00a0 Bus: UART\n\u00a0\u00a0 \u00a0BD Address: 00:17:EC:02:91:B7\u00a0 ACL MTU: 1021:4\u00a0 SCO MTU: 180:4\n\u00a0\u00a0 \u00a0UP RUNNING PSCAN\n\u00a0\u00a0 \u00a0RX bytes:563 acl:0 sco:0 events:27 errors:0\n\u00a0\u00a0 \u00a0TX bytes:879 acl:0 sco:0 commands:27 errors:0\n\u00a0\u00a0 \u00a0Features: 0xff 0xff 0x2d 0xfe 0x9b 0xff 0x79 0x83\n\u00a0\u00a0 \u00a0Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3\n\u00a0\u00a0 \u00a0Link policy: RSWITCH HOLD SNIFF PARK\n\u00a0\u00a0 \u00a0Link mode: SLAVE ACCEPT\n\u00a0\u00a0 \u00a0Name: 'ev3dev-0'\n\u00a0\u00a0 \u00a0Class: 0x000000\n\u00a0\u00a0 \u00a0Service Classes: Unspecified\n\u00a0\u00a0 \u00a0Device Class: Miscellaneous,\n\u00a0\u00a0 \u00a0HCI Version: 2.1 (0x4)\u00a0 Revision: 0x0\n\u00a0\u00a0 \u00a0LMP Version: 2.1 (0x4)\u00a0 Subversion: 0x191f\n\u00a0\u00a0 \u00a0Manufacturer: Texas Instruments Inc. (13)\n\nhci0:\u00a0\u00a0 \u00a0Type: BR\/EDR\u00a0 Bus: USB\n\u00a0\u00a0 \u00a0BD Address: 00:1A:7D:DA:71:13\u00a0 ACL MTU: 310:10\u00a0 SCO MTU: 64:8\n\u00a0\u00a0 \u00a0UP RUNNING PSCAN\n\u00a0\u00a0 \u00a0RX bytes:25008 acl:0 sco:0 events:1215 errors:0\n\u00a0\u00a0 \u00a0TX bytes:2486 acl:0 sco:0 commands:159 errors:0\n\u00a0\u00a0 \u00a0Features: 0xff 0xff 0x8f 0xfe 0xdb 0xff 0x5b 0x87\n\u00a0\u00a0 \u00a0Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3\n\u00a0\u00a0 \u00a0Link policy: RSWITCH HOLD SNIFF PARK\n\u00a0\u00a0 \u00a0Link mode: SLAVE ACCEPT\n\u00a0\u00a0 \u00a0Name: 'ev3dev #1'\n\u00a0\u00a0 \u00a0Class: 0x000000\n\u00a0\u00a0 \u00a0Service Classes: Unspecified\n\u00a0\u00a0 \u00a0Device Class: Miscellaneous,\n\u00a0\u00a0 \u00a0HCI Version: 4.0 (0x6)\u00a0 Revision: 0x22bb\n\u00a0\u00a0 \u00a0LMP Version: 4.0 (0x6)\u00a0 Subversion: 0x22bb\n\u00a0\u00a0 \u00a0Manufacturer: Cambridge Silicon Radio (10)<\/pre>\n<p>Temos 2 dispositivos Bluetooth: hci1 (UART) que \u00e9 o nativo (interno) do EV3, ainda 2.0 e que por isso de pouco serve; e hci0 (USB) que \u00e9 o nosso.<\/p>\n<p>Podemos ver na informa\u00e7\u00e3o acima que hci0 j\u00e1 est\u00e1 em estado &#8220;UP RUNNING&#8221; apesar de na maioria dos artigos que encontrei referirem sempre ser necess\u00e1rio activ\u00e1-lo<\/p>\n<pre>hciconfig hci0 up<\/pre>\n<p>Inicialmente hci0 n\u00e3o est\u00e1 a anunciar-se em modo Low Energy pelo que \u00e9 necess\u00e1rio ativar esse modo. Al\u00e9m disso o artigo em que me inspirei refer ser conveniente desactivar a procura de outros dispositivos por poder interferir e apesar de achar isso estranho para este exemplo mal n\u00e3o faz por isso<\/p>\n<pre>hciconfig hci0 leadv\nhciconfig hci0 noscan<\/pre>\n<p>Resta apenas configurar hci0 para funcionar se anunciar como beacon e fingir ser da Apple:<\/p>\n<pre>root@ev3dev:~# hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 1A 1A FF 4C 00 02 15 E2 0A 39 F4 73 F5 4B C4 A1 2F 17 D1 AD 07 A9 61 00 00 00 00 C8 00\n&lt; HCI Command: ogf 0x08, ocf 0x0008, plen 32\n\u00a0 1E 02 01 1A 1A FF 4C 00 02 15 E2 0A 39 F4 73 F5 4B C4 A1 2F\n\u00a0 17 D1 AD 07 A9 61 00 00 00 00 C8 00\n&gt; HCI Event: 0x0e plen 4\n\u00a0 01 08 20 00<\/pre>\n<p>Se no nosso Android instalarmos uma aplica\u00e7\u00e3o como a &#8220;Bluetooth LE Scan&#8221; (e o telem\u00f3vel\/tablet tiver BT 4.0 e Android 4.3 ou superior) ap\u00f3s um SCAN encontramos o nosso Beacon:<\/p>\n<pre>ev3dev #1\nMAC: 00:1A:7D:DA:71:13\nUpdated: 2014-09-12 17:46:50\nRSSI: -60.0db \/ -60.0 dB\nUUID: ....\nMajor:   0     Minor:  0\nTx Power: -56  Distance: 1.64m\nDescriptor: NEAR<\/pre>\n<p>A precis\u00e3o deixa um pouco a desejar: v\u00e1rios SCAN consecutivos deram valores entre 1m [NEAR] e 7m [FAR] quando o telem\u00f3vel estava a cerca de 1m40 do dongle.<\/p>\n<p>Podemos ajustar um pouco mudando um valor de refer\u00eancia <strong>Tx Power<\/strong> enviado pelo Beacon no pen\u00faltimo byte do comando hcitool (&#8220;C8&#8221; acima) que corresponde ao valor RSSI medido em laborat\u00f3ria a dist\u00e2ncias de um metro, escrito em complemento para 2 (C8 = -56 portanto corresponde a uma medi\u00e7\u00e3o de RSSI de -56 dB a um metro)<\/p>\n<p>Seguem algures valores pr\u00f3ximos de -56 dB:<\/p>\n<p>-54 dB = CA<br \/>\n-55 dB = C9<br \/>\n-56 dB = C8<br \/>\n-57 dB = C7<br \/>\n-58 dB = C6<br \/>\n-59 dB = C5<\/p>\n<p>Portanto se colocarmos o dispositivo Android a exactamente um metro do dongle USB, o valor RSSI medido ser\u00e1 o nosso valor ideal de <strong>Tx Power<\/strong>.<\/p>\n<p>Infelizmente obtive valores entre -55 e -63 dB (com o EV3 alimentado por carregador para garantir uma alimenta\u00e7\u00e3o constante) por isso fiquei na mesma. Ap\u00f3s algumas experi\u00eancias com algumas medi\u00e7\u00f5es a v\u00e1rias dist\u00e2ncias fiquei-me por -57 dB = C7, pareceu-me o menos flutuante.<\/p>\n<pre>hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 1A 1A FF 4C 00 02 15 E2 0A 39 F4 73 F5 4B C4 A1 2F 17 D1 AD 07 A9 61 00 00 00 00 C7 00<\/pre>\n<p>Quando tiver um Beacon a s\u00e9rio vou poder calibrar melhor este meu EV3 B3AC0N (e at\u00e9 pode ser que a flutua\u00e7\u00e3o seja do software, vou procurar outras aplica\u00e7\u00f5es semelhantes).<\/p>\n<p>Falta agora o inverso: utilizar hci0 para encontrar outros Beacons. Ou talvez outros B3AC0Ns.<\/p>\n<p>Nota: podemos n\u00e3o fingir ser Apple, substituindo 4C 00 pelo <a href=\"https:\/\/www.bluetooth.org\/en-us\/specification\/assigned-numbers\/company-identifiers\">Company ID<\/a> de outro fabricante (infelizmente a LEGO n\u00e3o aparece) como por exemplo <span id=\"DeltaPlaceHolderMain\">\u200bFE 00 (reserved)&#8230; s\u00f3 que deixa de ser reconhecido como um Beacon.<\/span><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Com os updates recentes ao kernel do ev3dev e a inclus\u00e3o do m\u00f3dulo btusb [a meu pedido, mod\u00e9stia \u00e0 parte] j\u00e1 \u00e9 poss\u00edvel utilizar dongles Bluetooth 4.0 com o LEGO EV3. Enquanto n\u00e3o me chegam \u00e0s m\u00e3os beacons e outros dispositivos BT 4.0 para testar, o \u00fanico aparelho que tenho \u00e9 um telem\u00f3vel Android que &hellip; <a href=\"https:\/\/ofalcao.pt\/blog\/2014\/lego-b3ac0n\" class=\"more-link\">Continuar a ler<span class=\"screen-reader-text\"> &#8220;LEGO B3AC0N&#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":[13,18,19,20],"tags":[219,42,77],"series":[],"class_list":["post-657","post","type-post","status-publish","format-standard","hentry","category-ev3dev","category-lego","category-lego-mindstorms","category-linux","tag-bluetooth","tag-bt-4-0","tag-low-energy"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p2Mhyv-aB","_links":{"self":[{"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/posts\/657","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=657"}],"version-history":[{"count":0,"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/posts\/657\/revisions"}],"wp:attachment":[{"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/media?parent=657"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/categories?post=657"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/tags?post=657"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/series?post=657"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}