Linux ã§BLEã®ãã³ã°ã«ãåºãã¦éä¿¡ãããã
http://www.adventar.org/calendars/523
mbed Advent Calendar 2014 ã®è¨äºã§ãã
Start typing in the blue box...Linuxã§ãéçºãããã®ã§ç°å¢ãæ´ãã¦ã¿ã¾ããã
HWç°å¢
1)lenovo ThinkPad x201
2)PRiNCETON PTM-UBT7 Bluetooth® USBã¢ããã¿ã¼
http://www.princeton.co.jp/product/ptmubt7.html
3)mbed HRM1017
http://www.switch-science.com/catalog/1755/
OS:Ubuntu14.04
Linux 3.13.0-32-generic #56-Ubuntu SMP Mon Jul 7 11:32:12 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
ãã®ç°å¢ã§ãã
ã¾ããUSBãã³ã°ã«ãåºãã¦ä»¥ä¸ã®ã³ãã³ãã§ç¢ºèª
ãã³ã°ã«ãåºãå
kazu@kazu-develop:~$ hciconfig hci0: Type: BR/EDR Bus: USB BD Address: 70:F3:95:48:19:CF ACL MTU: 1021:8 SCO MTU: 64:1 UP RUNNING PSCAN ISCAN RX bytes:1050 acl:0 sco:0 events:52 errors:0 TX bytes:1423 acl:0 sco:0 commands:52 errors:0
å
èã®BTãç¾ãã¦ãã¾ããæ¬¡ã«ãåºããå¾
kazu@kazu-develop:~$ hciconfig hci1: Type: BR/EDR Bus: USB BD Address: 00:1B:DC:06:C9:6C ACL MTU: 310:10 SCO MTU: 64:8 UP RUNNING PSCAN RX bytes:606 acl:0 sco:0 events:36 errors:0 TX bytes:939 acl:0 sco:0 commands:36 errors:0 hci0: Type: BR/EDR Bus: USB BD Address: 70:F3:95:48:19:CF ACL MTU: 1021:8 SCO MTU: 64:1 UP RUNNING PSCAN ISCAN RX bytes:1050 acl:0 sco:0 events:52 errors:0 TX bytes:1423 acl:0 sco:0 commands:52 errors:0
hci1ã¨ãã¦æ°ããBTâUSBã®æ©å¨ãèªèããã¦ãã¾ãã
ï¼ï¼æ°ããBlueZã«ãã
https://www.kernel.org/pub/linux/bluetooth/
ããææ°ã®VerãDLãã¾ãã
å
¬å¼HP:http://www.bluez.org/bluez-low-energy-support-status/
$ wget https://www.kernel.org/pub/linux/bluetooth/bluez-5.21.tar.gz $ tar -xvf bluez-5.21.tar.gz $ cd bluez-5.21
ããããã«ããã¾ããã©ã¤ãã©ãªã®ä¸è¶³ãæãå ´åãããã®ã§ä»¥ä¸ãå®è¡
$ sudo apt-get install libglib2.0-dev libdbus-1-dev libudev-dev libical-dev libreadline-dev
ããã¦ãã«ã
./configure --disable-systemd && make && make install
ããã§æºåã¯æ´ãã¾ããã
2.mbed HRM1017ã«ä½ããµã³ãã«ããã°ã©ã ãå
¥ãã
ããã¯ãä»ã®æ¹ãã¨ããããä½ã£ã¦ãããµã³ãã«ããã°ã©ã ãå
¥ãããããããã¯èªåã§ä½æããããã°ã©ã ãå
¥ãã¦ä¸ããã
ããã§ã¯ãç¹å¥ã«ç´¹ä»ãã¾ãããmbed HRM1017 ãã黿³¢ãçºä¿¡ãããã°OKã§ãã主ã«é信確èªãããããã§ãã
3.mbed HRM1017 ã¨æ¥ç¶ãã
mbed HRM1017ã¨æ¥ç¶ãã¾ãã以ä¸ãå®è¡
$ hciconfig hci1: Type: BR/EDR Bus: USB BD Address: 00:1B:DC:06:C9:6C ACL MTU: 310:10 SCO MTU: 64:8 UP RUNNING PSCAN RX bytes:645 acl:0 sco:0 events:40 errors:0 TX bytes:973 acl:0 sco:0 commands:38 errors:0 hci0: Type: BR/EDR Bus: USB BD Address: 70:F3:95:48:19:CF ACL MTU: 1021:8 SCO MTU: 64:1 UP RUNNING PSCAN ISCAN RX bytes:1050 acl:0 sco:0 events:52 errors:0 TX bytes:1423 acl:0 sco:0 commands:52 errors:0
ä¸è¨ã¯hciconfigã§æ°ããæ¥ç¶ããBT4.0対å¿ã®USBãã³ã°ã«ã®BDã¢ãã¬ã¹ã確èªãã¦ãã¾ãã
ããã¦ä»¥ä¸ã§æ°ããUSBãã³ã°ã«ã§ããhci1 ãæ¤ç´¢ããããã¤ã¹ã hcitool -i ã®ãªãã·ã§ã³ã§hci1 ã¨ãã¦æå®ã lescan ã¨ããã³ãã³ãã宿½ãã¦ãmbed HRM1017ãæ¤ç´¢ãã¾ãã
ãããè¤æ°ã®BT4.0æ©å¨ãæã£ã¦ããå ´åã¯ã䏿¦ãã®æ©å¨ã®é»æºãè½ã¨ããªããã¦è¤æ°ã®ããã¤ã¹ãæ¤ç¥ãããªãããã«ãããã¨ã§ãééããé²ããã¨æãã¾ãã
$ sudo hcitool -i hci1 lescan LE Scan ... F4:9F:B2:09:EA:FE (unknown) F4:9F:B2:09:EA:FE (unknown) ^z [2]+ 忢 sudo hcitool -i hci1 lescan $
ãã®ã³ãã³ãã¯ã²ãããã¹ãã£ã³ãã¾ãã®ã§ctrl+zã«ã¦åæ¢ããã¦ãã ããã
ãã®æ
å ±ã§mbed HRM1017ã®ã¢ãã¬ã¹ãF4:9F:B2:09:EA:FEã§æããã¨ãå¤ãã¾ããã
ï¼ï¼F4:9F:B2:09:EA:FEã§ããmbed HRM1017ã¨æ¥ç¶ãã
gatttoolã§ãã®ãã³ã°ã«ãæå®ãæ¥ç¶ãã¾ãã
gatttoolã³ãã³ãã®-i ãªãã·ã§ã³ã§æ°ããããã¤ã¹hci1ãæå®ããã¢ãã¬ã¹ã-bã§æå®ã-tã§LEã¢ãã¬ã¹ãã©ã³ãã ã«ã-Iã§ã¤ã³ã¿ã©ã¯ãã£ãã¢ã¼ãã§ãã
$ gatttool -i hci1 -b F4:9F:B2:09:EA:FE -t random -I
ãã®ã³ãã³ãã®å¾ã以ä¸ã®ã³ãã³ãããã³ããã«ç§»è¡ãã¾ãã
[ ][F4:9F:B2:09:EA:FE][LE]>
ãã®ç¶æ
ã§ä»¥ä¸ãå
¥å
[ ][F4:9F:B2:09:EA:FE][LE]> connect [CON][F4:9F:B2:09:EA:FE][LE]>
[CON]ã«ãªãäºã§æ¥ç¶ãå®äºãã¦ãã®ãå¤ãã¾ãã
5.gatttoolã«ã¤ãã¦
LEã®ãµãã¼ãã®Bluetoothãããã³ã«ã¹ã¿ãã¯BlueZãæä¾ãã¦ãããCLIãã¼ã¹ã®ãã¼ã«ã§ãã
ã³ãã³ãã©ã¤ã³ãã¼ã¹ã§ Bluetooth-LEãRegacy-Bluetoothã®ã¢ããªãã¥ã¼ããèªã¿æ¸ãåºæ¥ããã¼ã«ã§ãã
ä»åã¯ã³ãã³ãã©ã¤ã³ããæ¯åå©ãã®ãé¢åãªã®ããã£ã¦-Iãªãã·ã§ã³ã§ã¤ã³ã¿ã©ã¯ãã£ãã¢ã¼ãã«ãã¦ãã·ã§ã«ã§ä½¿ã£ã¦ãã¾ãã
6.gatttoolã§èªã¿æ¸ã
gatttoolã§èªã¿æ¸ããã¦ã¿ã¾ããmbed HRM1017ãã©ããªãµã¼ãã¹ãæä¾ãã¦ãã®ã以ä¸ã®ã³ãã³ãã§è¦ã¾ãã
[CON][F4:9F:B2:09:EA:FE][LE]> help help Show this help exit Exit interactive mode quit Exit interactive mode connect [address [address type]] Connect to a remote device disconnect Disconnect from a remote device primary [UUID] Primary Service Discovery characteristics [start hnd [end hnd [UUID]]] Characteristics Discovery char-desc [start hnd] [end hnd] Characteristics Descriptor Discovery char-read-hnd <handle> [offset] Characteristics Value/Descriptor Read by handle char-read-uuid <UUID> [start hnd] [end hnd] Characteristics Value/Descriptor Read by UUID char-write-req <handle> <new value> Characteristic Value Write (Write Request) char-write-cmd <handle> <new value> Characteristic Value Write (No response) sec-level [low | medium | high] Set security level. Default: low mtu <value> Exchange MTU for GATT/ATT [CON][F4:9F:B2:09:EA:FE][LE]>
helpãæã¤ã¨gatttoolã§å©ç¨åºæ¥ãä¸è¦§ã表示ããã¾ãã
ã¾ããPrimary Service Discoveryã«ã¦ä½ãServiceããã¦çºä¿¡ããã¦ããã®ã確èªãã¾ãã
[CON][F4:9F:B2:09:EA:FE][LE]> primary [CON][F4:9F:B2:09:EA:FE][LE]> attr handle: 0x0001, end grp handle: 0x0007 uuid: 00001800-0000-1000-8000-00805f9b34fb attr handle: 0x0008, end grp handle: 0x000b uuid: 00001801-0000-1000-8000-00805f9b34fb attr handle: 0x000c, end grp handle: 0xffff uuid: 0000fff0-0000-1000-8000-00805f9b34fb [CON][F4:9F:B2:09:EA:FE][LE]>
ããã§ãµã¼ãã¹ããã¦ãããã©ã¤ããªæ
å ±ãå¤ãã¾ããã
次ã«ãUUIDã®ä¸ä½ï¼æ¡16bitã¯GATTã®ä»æ§ã§å¶å®ããã¦ããè¦å®å¤ã§ããããã調ã¹ã¾ãã
https://developer.bluetooth.org/gatt/services/Pages/ServicesHome.aspx
1800=Generic Access
1801=Generic Attribute
ã§ã¯ãGeneric Accessã®æ
å ±ãèªã¿ã ãã¦ã¿ã¾ããç¯å²ã¯ä¸è¨ã§ã¿ãã¨0x0001 ãã 0x0007ã§ãã
https://developer.bluetooth.org/gatt/services/Pages/ServiceViewer.aspx?u=org.bluetooth.service.generic_access.xml
[CON][F4:9F:B2:09:EA:FE][LE]> char-desc 0x0001 0x0007 [CON][F4:9F:B2:09:EA:FE][LE]> handle: 0x0001, uuid: 2800 handle: 0x0002, uuid: 2803 handle: 0x0003, uuid: 2a00 handle: 0x0004, uuid: 2803 handle: 0x0005, uuid: 2a01 [CON][F4:9F:B2:09:EA:FE][LE]>
ããã§uuidã¨handleã®é¢ä¿ãå¤ãã¾ããã1800ã¯GenericAccessãªã®ã§ãå
ã»ã©ã®ãã¼ã¸ãè¦ãã¨Device Nameãèªãããã¨ãå¤ãã¾ãã
Device Nameã®UUIDã¨ã¢ãã¬ã¹ã¯
https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.device_name.xml
ãè¦ãã¨Assigned Number: 0x2A00 ã§å®ç¾©ããã¦ãããã¨ãå¤ãã¾ãã
0x2A00 㯠UUIDã§ããããã«å¯¾å¿ããã®ã¯0x0003ã§ãããµãéãã®èªãæ¹æ³ãããã¾ãã
ï¼ã¤ãchar-read-hndãä½¿ãæ¹æ³
[CON][F4:9F:B2:09:EA:FE][LE]> char-read-hnd 0x0003 [CON][F4:9F:B2:09:EA:FE][LE]> Characteristic value/descriptor: 6d 62 65 64 20 48 52 4d 31 30 31 37 [CON][F4:9F:B2:09:EA:FE][LE]>
2ã¤ãUUIDãæå®ããæ¹æ³
[CON][F4:9F:B2:09:EA:FE][LE]> char-read-uuid 2a00 [CON][F4:9F:B2:09:EA:FE][LE]> handle: 0x0003 value: 6d 62 65 64 20 48 52 4d 31 30 31 37 [CON][F4:9F:B2:09:EA:FE][LE]>
è¿ãå¤ãåãäºãå¤ãã¨æãã¾ãã
ããã¯ãå
ã»ã©ã®HPæ
å ±ããDeviceNameã§ãããè¿ãå¤ã¯Format utf8s ã§ãã®ã§æ¬¡ã®HPã§ç¢ºèªãã¾ãã
https://developer.bluetooth.org/gatt/Pages/FormatTypes.aspx
ãè¦ãã¨UTF-8 string ã¨ãªã£ã¦ãã¾ããæ°åã®ç¾
åã§ããã®ã¯ASCIIã³ã¼ãã§ããããã§ãããããæååã«å¤æãã¦ã¿ã¾ãã
$ echo " 6d 62 65 64 20 48 52 4d 31 30 31 37"| tr \ = | nkf -WwmQ mbed HRM1017 $
ããã§ééããªãããã¤ã¹mbed HRM1017ã«æ¥ç¶ãã¦ããã¨ãå¤ãã¾ããã
éä¿¡ã®ãããã°ã¯è¤éã§ããããã®ãã¼ã«ã使ãäºã«ããå°ãã§ãæãäºãããã°ããã¨æãé§ãè¶³ã§ããç´¹ä»ãã¦ã¿ã¾ããã
ãã®ã³ãã³ã以å¤ã«ãgatttoolã«ã¯
char-write-req <handle> <new value> Characteristic Value Write (Write Request) char-write-cmd <handle> <new value> Characteristic Value Write (No response)
ã®ã³ãã³ããããã¾ãã®ã§ç´æ¥å©ãã®ãå¯è½ã§ãã
7.Raspberry Pi ã¸ã®å°å
¥
ã©ãºããªã¼ãã¤ã§ããã®ãã³ã°ã«ã使ããäºãå¤ãã¾ããã
å°å
¥æ¹æ³ã¯ä»¥ä¸ã®éãã§ãã
æ¬ä½ã¯ãLinux 3.10.25+ #622 PREEMPT Fri Jan 3 18:41:00 GMT 2014 armv6l GNU/Linux
å
ãã¯æ¬ä½ã®ã¢ãããã¼ãããã
$ sudo apt-get update $ sudo apt-get upgrade
ããã¦å¿
è¦ãªã©ã¤ãã©ãªãå°å
¥ãã¾ãã
$ apt-get install libglib2.0-dev libdbus-1-dev libudev-dev libical-dev libreadline6-dev
ææ°ã®ï½ï½ï½ï½
ZãDLããè§£åãã¾ãã
$ wget https://www.kernel.org/pub/linux/bluetooth/bluez-5.21.tar.gz $ tar xvf bluez-5.21.tar.gz
DLãããã©ã«ãã«ç§»å
$ cd bluez-5.21
ããã¦ãã«ããã¾ãã
$ sudo ./configure --disable-systemd --enable-library && make && make install
gatttoolã¯èªåã§ã¤ã³ã¹ãã¼ã«ãããªãã®ã§ã³ãã¼ãã¾ãã
$ sudo cp attrib/gatttool /usr/local/bin
ããã§å°å
¥ãå®äºã§ãã
次ã«åºãããã³ã°ã«ãæå¹åãã¾ãã
$ hciconfig hci0: Type: BR/EDR Bus: USB BD Address: 00:1B:DC:06:C9:6C ACL MTU: 310:10 SCO MTU: 64:8 DOWN RX bytes:2504 acl:1 sco:0 events:137 errors:0 TX bytes:1261 acl:1 sco:0 commands:92 errors:0
hci0ã¨ãã¦èªèããã¦ãã¾ãããDOWNãªã®ã§UPããã¾ãã
$ sudo hciconfig hci0 up
ããã§ä¸åº¦UPãã¦ããã確èªãã¾ãã
$ hciconfig hci0: Type: BR/EDR Bus: USB BD Address: 00:1B:DC:06:C9:6C ACL MTU: 310:10 SCO MTU: 64:8 UP RUNNING RX bytes:3051 acl:1 sco:0 events:164 errors:0 TX bytes:1645 acl:1 sco:0 commands:119 errors:0
ããã§æºåãæ´ã£ãã®ã§mbed HRM1017 ãã¹ãã£ã³ãã¾ãã
$ hcitool lescan LE Scan ... F4:9F:B2:09:EA:FE (unknown) F4:9F:B2:09:EA:FE (unknown) F4:9F:B2:09:EA:FE (unknown) F4:9F:B2:09:EA:FE (unknown) F4:9F:B2:09:EA:FE (unknown) F4:9F:B2:09:EA:FE (unknown) F4:9F:B2:09:EA:FE (unknown) F4:9F:B2:09:EA:FE (unknown) ^C
ããããã¯Ubuntuã¨åãæ¹æ³ã§æ¥ç¶ãã¾ãã
root@kazu:~/bluez-5.21# gatttool -i hci0 -b F4:9F:B2:09:EA:FE -t random -I
ããã§æ¥ç¶å®äºããã¨ä»¥ä¸ã«ãªãã¾ãã
[F4:9F:B2:09:EA:FE][LE]> ããã¦ãconnectãå ¥åããã¨ä»¥ä¸ [F4:9F:B2:09:EA:FE][LE]> connect Attempting to connect to F4:9F:B2:09:EA:FE [F4:9F:B2:09:EA:FE][LE]> Connection successful
ãã®ç¶æ
ã§ã³ãã¯ãå®äºã§ãã
primaryããã¨ä»¥ä¸ãåºåããã¾ãã®ã§ç¢ºèªãã¾ãã
[F4:9F:B2:09:EA:FE][LE]> primary [F4:9F:B2:09:EA:FE][LE]> attr handle: 0x0001, end grp handle: 0x0007 uuid: 00001800-0000-1000-8000-00805f9b34fb [F4:9F:B2:09:EA:FE][LE]> attr handle: 0x0008, end grp handle: 0x000b uuid: 00001801-0000-1000-8000-00805f9b34fb [F4:9F:B2:09:EA:FE][LE]> attr handle: 0x000c, end grp handle: 0xffff uuid: 0000fff0-0000-1000-8000-00805f9b34fb [F4:9F:B2:09:EA:FE][LE]>
åèã«ããã¦é ããHP
1:Bluetoothã®ã¯ãªã(4)ï½Wirelessã»ã®ãã¨ï½ãµã¤ã¬ãã¯ã¹ã»ãã¯ããã¸ã¼æ ªå¼ä¼ç¤¾
http://www.silex.jp/blog/wireless/2012/12/bluetooth4.html
2:BlueZã§éãã§ã¿ã - BLE大éªåå¼·ä¼
http://www.slideshare.net/kobashin/ble-32572318
3:æ¬æä¸ã«ããå種HPã¢ãã¬ã¹å
1 comment on Linux ã§BLEã®ãã³ã°ã«ãåºãã¦éä¿¡ãããã:
Please log in to post comments.

http://www.adventar.org/calendars/523 ã®ï¼ï¼æ¥ã®è¨äºã«æç¨¿ãã¾ããã