Slide 1

Slide 1 text

BLEͰϩϘοττΠΛ ੍ޚ͠Α͏ Pycon JP 2020 2020/08/29 Twitterɿ@sandfish03

Slide 2

Slide 2 text

ࣗݾ঺հ • sandfish03ɹ • αʔόαΠυΤϯδχΞʢ࠷ۙͷ࢓ࣄ͸C#Ͱ͢ʣ • Python͸ϓϥΠϕʔτͰར༻͍ͯ͠·͢ • JϦʔάͱԻָʢओʹϩοΫʣͱ΢ΟεΩʔΛ޷ΜͰ͍·͢ • ΧϯϑΝϨϯεͰൃද͢Δͷ͸ॳΊͯͳͷͰۓு͍ͯ͠·͢

Slide 3

Slide 3 text

BLEͰϩϘοττΠΛ੍ޚ͠Α͏ ຊτʔΫͷ໨త

Slide 4

Slide 4 text

STEAMڭҭΛ໨ʹ͢Δػձ͕૿͑·ͨ͠ ※ݸਓͷײ૝Ͱ͢

Slide 5

Slide 5 text

STEAMڭҭͱ͸ • STEAMڭҭͱ͸ɺ ScienceʢՊֶʣɺ Technologyʢٕज़ʣɺ Engineeringʢ޻ֶʣɺMathematicsʢ਺ֶʣΛ౷߹తʹֶश͢Δ ʮSTEMڭҭʯʹɺ ͞ΒʹArtsʢϦϕϥϧΞʔπ·ͨ͸ܳज़ʣΛ౷߹ ͢Δڭҭख๏Ͱ͋Δ ʮSTEAMڭҭʯʰϑϦʔඦՊࣄయɹ΢ΟΩϖσΟΞ೔ຊޠ൛ʱɻ2020೥5݄25೔ (݄) 18:48ɹUTCɺURL: https://ja.wikipedia.org

Slide 6

Slide 6 text

গͣͭ͠ίϯςϯπ͕૿͍͑ͯ·͢ • ະདྷͷֶͼίϯιʔγΞϜ ✓ ࣄྫͷ঺հ΍ίϯςϯπͷ঺հΛ͍ͯ͠·͢ • ϩϘοττΠ • ϏδϡΞϧϓϩάϥϛϯάɹͳͲ

Slide 7

Slide 7 text

ݸਓతʹࢥͬͯΔ͜ͱ • Python͸ॳֶऀֶ͕ͿͨΊʹྑ͍ݴޠ • ࠷ॳ͸ʮHello WorldʯΛग़ྗ͢ΔͰ΋ྑ͍͚ͲɺϞϊ͕ಈ͍ͨํ͕ ϓϩάϥϛϯάΛֶͿ্Ͱ΋ָ͍ͩ͠Ζ͏ͳ • ಈ͔ͤΔίϯςϯπͰAPI͕ެ։͞Ε͍ͯΔϞϊ͕͋ͬͨΒ STEAMڭҭͷίϯςϯπͱͯ͠ྑͦ͞͏

Slide 8

Slide 8 text

̎̌̎̌೥݄̏͝Ζͷࢲ

Slide 9

Slide 9 text

ൃදऀͷtoio™ͷۙӨ "toioTM"͸ɺגࣜձࣾιχʔɾΠϯλϥΫςΟϒΤϯλςΠϯϝϯτͷొ࿥঎ඪ·ͨ͸঎ඪͰ͢ɻ

Slide 10

Slide 10 text

toio™ͱ͸ • toio™͸ɺגࣜձࣾιχʔɾΠϯλϥΫςΟϒΤϯλςΠϯϝϯτ͕ ఏڙ͢ΔϩϘοττΠͰ͢ • ΧʔτϦοδΛࠩ͠ࠐΜͰ༷ʑͳ༡ͼΛମݧͰ͖·͢ • ϏδϡΞϧϓϩάϥϛϯάͰૢ࡞΋Ͱ͖·͢ • ٕज़࢓༷ʹଇͬͨίʔυΛॻ͚͹ૢ࡞Ͱ͖·͢

Slide 11

Slide 11 text

ݸਓతʹtoio™Λਪ͢ཧ༝ ίʔσΟϯάͳ͠Ͱ༡΂Δ ↓ ϏδϡΞϧϓϩάϥϛϯάͰ؆୯ͳ͜ͱ͕Ͱ͖Δ ↓ ϓϩάϥϛϯάͯ͠ߴ౓ͳ͜ͱ͕Ͱ͖Δ εςοϓΞοϓͯ͠ ମݧͰ͖Δͷ ͍͍Ͷʂ

Slide 12

Slide 12 text

༻ҙ͞Ε͍ͯΔϥΠϒϥϦ͸JavaScript

Slide 13

Slide 13 text

̎̌̎̌೥݄̐͝Ζͷࢲ ɹϥΠϒϥϦ͸ JavaScript͚͔ͩ

Slide 14

Slide 14 text

͍΍ɺ଴ͯɺٕज़࢓༷͸ެ։͞Ε͍ͯΔ Original document by Sony Interactive Entertainment Inc., is licensed under CC BY 4.0. https://github.com/toio/toio-spec https://creativecommons.org/licenses/by/4.0/

Slide 15

Slide 15 text

ͳ͍ͳΒ࡞Δ͔ʂʂ

Slide 16

Slide 16 text

ຊτʔΫͷ಺༰ • Stay HomeͰ࣌ؒΛ࣋ͯ༨ͨ͠ൃදऀ͕toio.jsΛPythonʹॻ͖׵͑ͯ ֶΜͩ͜ͱΛڞ༗͠·͢ ✓ toio™ͷ੍ޚ͸BLEΛ༻͍͍ͯΔͷͰɺϥΠϒϥϦΛ༻͍ͨ BLEͷ੍ޚͷ࢓ํΛઆ໌͠·͢ ✓ ϥΠϒϥϦΛ࢖༻ͯ͠ൃੜͨ͠՝୊ʹ͍ͭͯରॲͨ͠಺༰Λ આ໌͠·͢

Slide 17

Slide 17 text

ຊτʔΫͰ࿩͞ͳ͍͜ͱ • toio™ࣗମͷ͜ͱ͸࿩͠·ͤΜ • தͷਓͰ͸ͳ͍ͷͰɺtoio™ͷ࣭໰ʹ͸౴͑ΒΕ·ͤΜ • BLE੍ޚͷҰ෦ͷ࿩͸MacલఏͰɺWindowsɾLinuxͷ࿩͸͠·ͤΜ ✓ खݩʹWindowsϚγϯ͕ͳ͔ͬͨͷͰݕূͰ͖·ͤΜͰͨ͠ ✓ Linux͸৺ʹ༨༟͕ͳ͔ͬͨͷͰݕূͰ͖·ͤΜͰͨ͠

Slide 18

Slide 18 text

BLEͰϩϘοττΠΛ੍ޚ͠Α͏ BLE֓ཁ

Slide 19

Slide 19 text

ͦ΋ͦ΋BLEͬͯʁ • Bluetooth Low Energy (Bluetooth LE, BLE)ͱ͸ɺແઢPANٕज़Ͱ͋Δ Bluetooth ͷҰ෦Ͱɺόʔδϣϯ 4.0 ͔Β௥Ճʹͳͬͨ௿ফඅిྗͷ ௨৴Ϟʔυ • BLEͰ͸ɺσόΠεͱσόΠε͕௨৴Λ͓͜ͳ͏ํ๏ͱͯ͠ɺϒϩʔ υΩϟετͱίωΫγϣϯͱ͍͏2ͭͷํ๏Λఆ͍ٛͯ͠·͢ ʮBluetooth Low EnergyʯʰϑϦʔඦՊࣄయɹ΢ΟΩϖσΟΞ೔ຊޠ൛ʱɻ2019೥12݄2೔ (݄) 00:25ɹUTCɺURL: https://ja.wikipedia.org

Slide 20

Slide 20 text

ίωΫγϣϯͷߏ੒Ͱ઀ଓ • toio™͸ίωΫγϣϯͷߏ੒Ͱ઀ଓ͠·͢ • ίωΫγϣϯʹ͸ηϯτϥϧͱϖϦϑΣϥϧͷ2ͭͷ໾ׂ͕͋Γ·͢ • ௨৴ͷϗετͱͳΔσόΠεΛηϯτϥϧɺԿ͔͠Βͷ৘ใ΍ػೳΛ ఏڙ͢ΔσόΠεΛϖϦϑΣϥϧͱݺͼ·͢

Slide 21

Slide 21 text

ηϯτϥϧͱϖϦϑΣϥϧ • ࠓճͷ࣮૷͸ɺtoio™ͷΩϡʔϒ͕ϖϦϑΣϥϧͰɺ PythonͰ࣮૷͠Α͏ͱ͍ͯ͠Δͷ͕ηϯτϥϧͷ෦෼Ͱ͢ ϖϦϑΣϥϧ ηϯτϥϧ

Slide 22

Slide 22 text

toioΩϡʔϒͷػೳͷར༻ • ϖϦϑΣϥϧͷ੍ޚ͸αʔϏεͱαʔϏεʹؚ·Ε͍ͯΔ ΩϟϥΫλϦεςΟοΫʢʹಛੑʣΛ࢖͏͜ͱͰ৘ใͷऔಘ΍੍ޚ͕ Ͱ͖·͢

Slide 23

Slide 23 text

toioΩϡʔϒͷػೳͷར༻ Type Primary Service Service UUID 10B20100-5B3B-4571-9508-CF3EFCD7BBAE Characteristics ID Information / ಡΈऔΓηϯαʔ Sensor Information / Ϟʔγϣϯηϯαʔ Button Information / Ϙλϯ Battery Information / όοςϦʔ Motor Control / Ϟʔλʔ Light Control / ϥϯϓ Sound Control / α΢ϯυ Configuration / ઃఆ Original document by Sony Interactive Entertainment Inc., is licensed under CC BY 4.0. https://github.com/toio/toio-spec https://creativecommons.org/licenses/by/4.0/

Slide 24

Slide 24 text

BLEϥΠϒϥϦͰ੍ޚ͢Δ

Slide 25

Slide 25 text

BLEϥΠϒϥϦͰ੍ޚ͢Δ όΠφϦσʔλΛѻ͏

Slide 26

Slide 26 text

toioΩϡʔϒͷૢ࡞͸όΠφϦσʔλͰߦ͏ • ϖϦϑΣϥϧͰ͋ΔtoioΩϡʔϒ͔Βͷ৘ใΛಡΈॻ͖͠·͢ toio.js͔ΒҾ༻ʢίʔυ͸TypescriptͰॻ͔Ε͍ͯ·͢ʣ

Slide 27

Slide 27 text

όΠφϦσʔλΛѻ͏ΦϒδΣΫτ • όΠφϦσʔλΛૢ࡞͢ΔͨΊͷίΞ૊ΈࠐΈܕ͸ bytes ͓Αͼ bytearray Ͱ͢ • bytes ΦϒδΣΫτ͸ෆมͳΦϒδΣΫτͰɺbytearray ΦϒδΣΫτ ͸ՄมͳΦϒδΣΫτͰ͢

Slide 28

Slide 28 text

ෆมͳΦϒδΣΫτɾՄมͳΦϒδΣΫτ ಡΈॻ͖Մೳͳbytes-like object͕ඞཁ bytes͸bytes-like object͚ͩͲಡΈॻ͖ՄೳͰͳ͍ bytes-like object͸༻ޠूΛࢀর bytearrayͳΒOK

Slide 29

Slide 29 text

toio.jsͷ࣮૷ɿόΠφϦσʔλಡΈॻ͖ • readUInt8ɿ8Ϗοτූ߹ແ͠੔਺ͷಡΈࠐΈ • writeUInt8ɿ8Ϗοτූ߹ແ͠੔਺ͷॻ͖ࠐΈ toio.js͔ΒҾ༻ʢίʔυ͸TypescriptͰॻ͔Ε͍ͯ·͢ʣ

Slide 30

Slide 30 text

toio.jsͷ࣮૷ɿόΠφϦσʔλಡΈॻ͖ • readUInt32LEɿ32Ϗοτූ߹ແ͠੔਺ͷಡΈࠐΈ • writeUInt16LEɿ16Ϗοτූ߹ແ͠੔਺ͷॻ͖ࠐΈ toio.js͔ΒҾ༻ʢίʔυ͸TypescriptͰॻ͔Ε͍ͯ·͢ʣ LE is Կʁ

Slide 31

Slide 31 text

ݸਓతʹջ͔͍͠ϦτϧΤϯσΟΞϯ Original document by Sony Interactive Entertainment Inc., is licensed under CC BY 4.0. https://github.com/toio/toio-spec https://creativecommons.org/licenses/by/4.0/

Slide 32

Slide 32 text

όΠτΦʔμΛҙࣝͯ͠όΠφϦσʔλΛѻ͏ • ॻࣜจࣈྻͰσʔλΛύοΫͨ͠ΓɺΞϯύοΫ͢Δ࣌ͷظ଴͞ΕΔ ϨΠΞ΢τΛࢦఆ͢Δ จࣈ όΠτΦʔμ < ϦτϧΤϯσΟΞϯ > ϏοάΤϯσΟΞϯ ϑΥʔϚοτ Cͷܕ Pythonͷܕ ඪ४ͷαΠζ B unsigned char ੔਺ 1 H unsigned short ੔਺ 2 I unsigned int ੔਺ 4 ॻࣜจࣈྻ ॻࣜࢦఆจࣈ https://docs.python.org/ja/3/library/struct.html#format-strings

Slide 33

Slide 33 text

όΠτΦʔμΛҙࣝͯ͠όΠφϦσʔλΛѻ͏ αΠζ͝ͱʹॻࣜจࣈྻΛ ࢦఆͯ͠ॲཧ͢Δ

Slide 34

Slide 34 text

BLEϥΠϒϥϦͰ੍ޚ͢Δ BLEΛૢ࡞͢Δ

Slide 35

Slide 35 text

ηϯτϥϧࢹ఺Ͱͷେ͖ͳྲྀΕ 1. Scan • पғʹ͍ΔϖϦϑΣϥϧΛ୳͢ 2. Connect • ݟ͚ͭͨϖϦϑΣϥϧͱ઀ଓ͢Δ 3. ReadʗNotifyʗWrite • ϖϦϑΣϥϧͷαʔϏεʹඥͮ͘ಛੑʹରͯ͠σʔλΛಡΈॻ͖͢Δ 4. Disconnect • ϖϦϑΣϥϧͱͷ઀ଓΛղআ͢Δ BLEͷ࣮૷͸OSʹ ґଘ͢ΔՕॴ͕͋Δ ͷͰେมͦ͏

Slide 36

Slide 36 text

BLEΛૢ࡞͢ΔϥΠϒϥϦ • PythonͰBLEΛૢ࡞͢ΔϥΠϒϥϦΛ୳ͯ͠ΈΔ "EBGSVJU1ZUIPO#MVFGSVJU-& #MFBL 63- IUUQTMFBSOBEBGSVJUDPNCMVFGSVJUMFQZUIPO MJCSBSZPWFSWJFX IUUQTCMFBLSFBEUIFEPDTJPFOMBUFTU ର৅04 w NBD04 w -JOVY w 8JOEPXT w NBD04 w -JOVY උߟ w ϥΠϒϥϦࣗମ͸EFQSFDBUFEʹͳΔखલͷες ʔλεͰͨ͠ w $JSDVJU1ZUIPOΛ஌ͬͨͷ͸গ͠ޙͰͨ͠ɻɻɻ w ֤04Ͱಁաతʹར༻Ͱ͖Δͷ͸ྑͦ͞͏

Slide 37

Slide 37 text

BLE੍ޚ͢ΔϥΠϒϥϦΛ૊ΈࠐΜͰΈΔ self._peripheral.connect()΍ discover͸BLE੍ޚϥΠϒϥϦͷ ϝιουͰ͢ ※͜ͷ࣌఺Ͱ͸Adafruit Python BluefruitLEΛ࢖༻͍ͯ͠·͢

Slide 38

Slide 38 text

BLE੍ޚ͢ΔϥΠϒϥϦΛ૊ΈࠐΜͰΈΔ

Slide 39

Slide 39 text

BLE੍ޚ͢ΔϥΠϒϥϦΛ࢖ͬͯಈ͔ͯ͠ΈΔ

Slide 40

Slide 40 text

BLEϥΠϒϥϦͰ੍ޚ͢Δ BLEϥΠϒϥϦͰൃੜͨ͠՝୊

Slide 41

Slide 41 text

Adafruit_BluefruitLEͰൃੜͨ͠՝୊ • ௨ৗͷಡΈࠐΈɺॻ͖ࠐΈͰ͸໰୊ͳ͍Ͱ͢ • ͨͩɺηϯτϥϧ͕पғʹ͋ΔϖϦϑΣϥϧΛݕࡧ͢Δ࣮૷ͰɺRSSI ʢ৴߸ڧ౓ʣͷ஋Λอ͍࣋ͯ͠ͳ͍ͷͰtoio.jsͰ࣮ݱ͞Ε͍ͯΔ͜ͱ ͕࣮ݱͰ͖·ͤΜͰͨ͠

Slide 42

Slide 42 text

• ͜ͷॲཧͰ͸ηϯτϥϧ͕ϖϦϑΣϥϧΛݕࡧ͠ɺ࠷΋͍ۙϖϦϑΣ ϥϧΛฦ٫͠·͢ • ࠷΋͍ۙ͸ϖϦϑΣϥϧͷ৴߸ڧ౓Ͱ൑ఆ͠·͢ toio.jsͰ࣮ݱ͍ͯ͠Δ͜ͱ

Slide 43

Slide 43 text

rssiΛҾ਺Ͱड͚औ͍ͬͯΔ͕อ͍࣋ͯ͠ͳ͍ ͜ͷॲཧ͸ηϯτϥϧ͕ϖϦϑΣϥϧΛScanͨ࣌͠ʹಈ͘ʢৄ͘͠͸ޙ΄Ͳʣ

Slide 44

Slide 44 text

Adafruit Python BluefruitLEͰਐΊΔͷ͸೉͍͠ ΋͏ҰͭͷϥΠϒϥϦͷ bleakΛࢼͯ͠ΈΔ͔

Slide 45

Slide 45 text

bleakͰൃੜͨ͠ ͦͷੲɺൃੜͯͨ͠՝୊ • 2020/08/07࣌఺ͰbleakͰࢼͨ͠ΒϥΠϒϥϦͷߏ଄͕มΘ͍ͬͯͯ ໰୊ͳ͘ಈ͖·ͨ͠ɻɻɻ

Slide 46

Slide 46 text

bleakͰൃੜͨ͠ ͦͷੲɺൃੜͯͨ͠՝୊ • ηϯτϥϧͱϖϦϑΣϥϧ͸ඇಉظͰॲཧΛߦͳ͍ͬͯΔՕॴ͕ଘࡏ ͠·͢ • ಉҰͷϖϦϑΣϥϧ͔Βͷ௨஌Λड͚औ͍ͬͯΔͷͰ͕͢ɺ৘ใ͕མ ͍ͪͯΔέʔε͕͋Γɺਖ਼͘͠ͳ͍஋Ͱॲཧ͕ߦΘΕ͍ͯ·ͨ͠

Slide 47

Slide 47 text

ಉ͡UUIDͷ৔߹ɺొ࿥͞ΕͨσʔλΛར༻ ॳճʹड͚औͬͨ QFSJQIFSBMͷOBNF͸ۭ Ͱɺճ໨ʹड͚औΔͱ OBNFʹਖ਼͍͠஋͕ೖΔ Ṗݱ৅͕ൃੜ ͦΕͧΕͷϖϦϑΣϥϧ ͰҰ൪࠷ޙʹདྷͨ΋ͷΛ ਖ਼ͱͯ͘͠Ε͹໰୊ͳ͍

Slide 48

Slide 48 text

นʹͿ͔ͭͬͯ͠·ͬͨ • PRΛग़ͯ͠ΈΔʁ • Adafruit͸ߋ৽͕ࢭ·͍ͬͯΔΈ͍ͨ ʢ͜ͷ࣌͸deprecatedͳͷ΋஌Βͳ͍ʣ • bleak΋ଞͷBLEͩͱ্ख͘औಘͰ͖͍ͯΔ͔Βɺ toioΩϡʔϒ͕ۮવɺname͕औΕͳ͍͚͔ͩ΋ɻɻɻ • ෆ۩߹͡Όͳͦ͞͏͔ͩΒͳɻɻɻɻ

Slide 49

Slide 49 text

ंྠͷ࠶ൃ໌͚ͩͲɺࣗ෼Ͱ࡞ͬͯΈΔ͔ʂ

Slide 50

Slide 50 text

ͲͪΒ΋pyobjcΛར༻͍ͯ͠Δ https://bleak.readthedocs.io/en/latest/backends/macos.html https://github.com/adafruit/Adafruit_Python_BluefruitLE Adafruit Python BluefruitLE bleak

Slide 51

Slide 51 text

pyobjcͰBLE੍ޚͯ͠ΈΑ͏ʂ https://pyobjc.readthedocs.io/en/latest/#

Slide 52

Slide 52 text

pyobjcͰ੍ޚ͢Δ

Slide 53

Slide 53 text

pyobjcͰ੍ޚ͢Δ pyobjcͱ͸

Slide 54

Slide 54 text

pyobjcͱ͸ • PyObjC͸macOS্ͰPythonͱObjective-CͷݴޠؒͷϒϦοδΛఏ ڙ͍ͯ͠·͢ • Python͔ΒObjective-CϕʔεͷϥΠϒϥϦΛར༻Ͱ͖ɺٯ΋વΓ • ࠓճ͸ɺmacOSͰBLEΛ੍ޚ͢ΔCoreBluetoothΛར༻͠·͢

Slide 55

Slide 55 text

pythonࢹ఺Ͱͷpyobjc֓ཁ • Objective-CΫϥεͱPythonͷؔ࿈͚ͮʹΞϯμʔείΞ Λ࢖͏ • 2ϑΣʔζͰॳظԽ͢Δ • Πϯελϯεม਺ʹ͸ΞΫηαΛར༻͢Δ

Slide 56

Slide 56 text

Objective-CΫϥεͱPythonͷؔ࿈͚ͮ • Objective-Cͷϝιουݺͼͩ͠͸ϝοηʔδૹ৴ͰɺηϨΫλΛ ౉ͯ͠ରԠ͢Δϝιου͕ಈ͖·͢ ɹ[someObject doSomething:arg1 withSomethingElse:arg2]; ɹdoSomething:withSomethingElse: ηϨΫλ ϝιουݺͼग़͠

Slide 57

Slide 57 text

Objective-CΫϥεͱPythonͷؔ࿈͚ͮ • ಁաతʹΞΫηε͢ΔͨΊPythonϝιου໊͸ɺηϨΫλͷίϩϯΛ ΞϯμʔείΞʹஔ͖׵͑ͯఆٛ͠·͢ ɹdoSomething_withSomethingElse_ ɹdoSomething:withSomethingElse: ηϨΫλ Pythonͷϝιου

Slide 58

Slide 58 text

Objective-CΫϥεͱPythonͷؔ࿈͚ͮͷ෭࡞༻ • ͨͩ͠ɺ͜ͷ࢓૊Έʹ͸෭࡞༻͕͋Γɺϝιου໊ͷΞϯμʔείΞ ͱҾ਺ͷ਺͕͍͋ͬͯͳ͍ͱΤϥʔͰىಈ͠·ͤΜ • NSObjectΛܧঝͨ͠Ϋϥεʹwrite_valueϝιουΛ௥Ճͨ͠Β objc.BadPrototypeErrorʹͳΓ·ͨ͠

Slide 59

Slide 59 text

Objective-CΫϥεͱPythonͷؔ࿈͚ͮͷ෭࡞༻ • ϝιου໊Λϧʔϧʹ߹ΘͤΕ͹໰୊ͳ͍Ͱ͕͢ɺσίϨʔλΛར༻ ͨ͠ํ͕ྑͦ͞͏ QZUIPOϝιουͱͯ͠ѻΘΕ ϒϦοδ͞Εͳ͍ Ҿ਺ͷ਺ʹ߹Θͤͯϝιου໊ʹΞϯμʔ είΞΛ߹ΘͤΕ͹ΤϥʔʹͳΒͳ͍ɻ ˞ΞϯμʔείΞͰऴΘΒͳ͍ͱҾ਺ͱ͠ ͯೝࣝ͞Εͳ͍

Slide 60

Slide 60 text

2ϑΣʔζͰॳظԽ͢Δ ΦϒδΣΫτͷΠϯελϯεԽʹඞཁͳ 2ͭͷεςοϓ • ׂΓ౰ͯɿallocϝιου • ॳظԽɿinitϝιου

Slide 61

Slide 61 text

Objective-CΫϥεͷΠχγϟϥΠβ • ΠχγϟϥΠβ͸ init ͰҾ਺ͳ͠ • Ҿ਺͋ΓͷΠχγϟϥΠβ͸श׳తʹinitWithʙͰ࢝ΊΔʢΒ͍͠ʣ • initWith ʴʢ Ҿ਺໊ ʴ _ ʣ✖ Ҿ਺ͷ਺෼ • લͷαϯϓϧͩͱotherVariableͱ͍͏Ҿ਺͕͋ΔͷͰ initWithOtherVariable_ɹͱ͍͏ϝιουΛఆٛ͢Δ

Slide 62

Slide 62 text

Πϯελϯεม਺ʹ͸ΞΫηαΛར༻͢Δ • Πϯελϯεม਺Λར༻͢Δͱ͖͸ΞΫηαϝιουʹ͢Δ͜ͱΛ ؾΛ෇͚Δ DIBSBDUFSJTUJDWBMVFͰ͸ͳ͘ɺ DIBSBDUFSJTUJDWBMVF ͰΞΫηε͢Δ ※஋Λઃఆ͢Δͱ͖͸ characteristic.setValue_(value)

Slide 63

Slide 63 text

Objective-Cͷϓϩτίϧ • CoreBluetoothʹ͸ϓϩτίϧ͕ग़͖ͯ·͢ • ϓϩτίϧʹ४ڌͨ͠ΦϒδΣΫτ͸ϓϩτίϧͰఆΊͨϝιουΛ ࣮૷͠ͳ͚Ε͹ͳΒͳ͍ • ͍ۙ͠ߟ͑ํͱͯ͠͸ந৅جఈΫϥεʢABC: Abstract Base Classʣ • CoreBluetoothͷΦϒδΣΫτͰ͸σϦήʔτͷ࣮૷ʹϓϩτίϧ͕ ར༻͞Ε͍ͯΔ

Slide 64

Slide 64 text

playbackɿ՝୊ͱͯ͠ొ৔ͨ͠ϝιου • ϓϩτίϧͰఆٛ͞Ε͍ͯΔϝιου͸࣮૷͕ඞਢ • ૒ํ޲ʹॲཧ͢ΔͨΊϝιου໊ͷϧʔϧɺҾ਺ͷ਺Ͱؔ࿈͚ͮͯ͠ ஋ͷड͚౉͠Λߦ͍ͬͯΔʢͳͷͰɺ࢖͍ͬͯͳ͍஋΋౉͍ͯ͠Δʣ

Slide 65

Slide 65 text

pyobjcͰ੍ޚ͢Δ corebluetoothΛ੍ޚ͢Δ

Slide 66

Slide 66 text

corebluetoothͷ֓ཁ • AppleͷυΩϡϝϯτʮCore Bluetooth Programming Guideʯʹ جຊతͳ಺༰ʹ͍ͭͯهࡌ͞Ε͍ͯ·͢ • ʮPerforming Common Central Role TasksʯΛಡΊ͹ྑͦ͞͏

Slide 67

Slide 67 text

Central ManagerͷॳظԽ "QQMFͷυΩϡϝϯτʹ͸OJMʢ/POFʣͰࢦఆ͢Δ ͱ.BJOͷ%JTQBUDI2VFVFΛར༻͢Δͱॻ͍ͯ͋Γ ·͕ͨ͠ɺϓϩτίϧͷ࣮૷ʹ௨஌͕ߦΘΕ·ͤΜ Ͱͨ͠ɻ ࣗલͰ%JTQBUDI2VFVFΛ࡞ΔΑ͏ʹ͍ͯ͠·͢

Slide 68

Slide 68 text

ϖϦϑΣϥϧΛൃݟ ϖϦϑΣϥϧΛ୳͢ϝιου͕࣮ߦ͞Εͨ ޙͷσϦήʔτॲཧ ϖϦϑΣϥϧΛ୳͢ϝιου ※ηϯτϥϧͱϖϦϑΣϥϧؒͷ௨৴͸ඇಉظͳͷͰɺϓϩτίϧͷϝιου͕ద੾ʹॲཧ͞ΕΔ·Ͱ଴ͭ ɹඞཁ͕͋Γ·͢ʢҎ߱ͷηϯτϥϧɾϖϦϑΣϥϧؒͷॲཧ͸ಉ͡ߟ͑ํͰ͢ʣ

Slide 69

Slide 69 text

ϖϦϑΣϥϧʹ઀ଓ ϖϦϑΣϥϧʹ઀ଓ͢Δϝιου͕࣮ߦ͞ ΕͨޙͷσϦήʔτॲཧ ϖϦϑΣϥϧʹ઀ଓ͢Δϝιου

Slide 70

Slide 70 text

઀ଓͨ͠ϖϦϑΣϥϧͷαʔϏεɾಛੑΛൃݟ αʔϏεʹඥͮ͘ಛੑΛൃݟ͢Δϝιου αʔϏεΛൃݟ͢Δϝιου αʔϏεΛൃݟ͢Δϝιου͕࣮ߦ͞ΕͨޙͷσϦήʔτॲཧ ಛੑΛൃݟ͢Δϝιου͕࣮ߦ͞ΕͨޙͷσϦήʔτॲཧ

Slide 71

Slide 71 text

ಛੑͷ஋ΛಡΈऔΔʗॻ͖ࠐΉ ಡΈࠐΈϝιου ॻ͖ࠐΈϝιου͕࣮ߦ͞ΕͨޙͷσϦήʔτॲཧ ಡΈࠐΈϝιου͕࣮ߦ͞ΕͨޙͷσϦήʔτॲཧ ॻ͖ࠐΈϝιου ɿॻ͖ࠐΈ੒ޭΛ௨஌ ɿॻ͖ࠐΈ੒ޭΛ௨஌͠ͳ͍

Slide 72

Slide 72 text

͓·͚ɿ઀ଓΛղআ͢Δ • corebluetoothͷ֓ཁʹ͸disconnectͷઆ໌͕ͳ͔ͬͨ • Objective-CͷAPIυΩϡϝϯτݟΔͱղআ͸͜ΕΛݺͼग़͢ • func cancelPeripheralConnection(CBPeripheral) • Delegateͷॲཧ͸ͪ͜Β͕ݺͼग़͞Εͦ͏ • func centralManager(CBCentralManager, didDisconnectPeripheral: CBPeripheral, error: Error?)

Slide 73

Slide 73 text

ϖϦϑΣϥϧͷ઀ଓΛղআ͢Δ ઀ଓղআϝιου ઀ଓղআϝιου͕࣮ߦ͞ΕͨޙͷσϦήʔτॲཧ

Slide 74

Slide 74 text

·ͱΊ

Slide 75

Slide 75 text

·ͱΊ • όΠφϦσʔλΛѻ͏ʹ͸structύοέʔδΛ࢖͍·͢ ✓ όΠτΦʔμʔ΍αΠζ͸ॻࣜจࣈྻΛ༻੍͍ͯޚ͠·͢ ✓ όΠφϦσʔλ͸ಡΈॻ͖Մೳͳbytes-like object͕ඞཁͰ͢ • BLEϥΠϒϥϦΛಋೖ͢Δͱ؆୯ʹBLE੍ޚ͕Ͱ͖·͢ ✓ OSґଘͷ࣮૷͸ϥΠϒϥϦ͕Ӆͯ͘͠Ε·͢

Slide 76

Slide 76 text

·ͱΊ • ௿͍ϨΠϠͷϥΠϒϥϦͰ͋ΔpyobjcΛར༻͢Δ͜ͱ΋ՄೳͰ͢ ✓ Objective-CͱϒϦοδ͢Δඞཁͷͳ͍ϝιου͸σίϨʔλΛͭ ͚ͯϒϦοδର৅֎ͱͨ͠ํ͕ྑ͍Ͱ͢ ✓ MainͷσΟεύονΩϡʔ͕ಈ͔ͳ͔ͬͨͷͰɺݸผʹΩϡʔΛ ࡞੒͢Ε͹ಈ࡞Մೳ

Slide 77

Slide 77 text

ࠓޙʹ޲͚ͯɿStay Homeத • pyobjc༻ʹࣗ࡞ͷίʔυΛॻ͖׵͑ • toio™ͷϖϦϑΣϥϧͷόʔδϣϯΞοϓରԠʢ2.0.0→2.1.0ʣ • WindowsରԠʢҰࡢ೔WindowsϚγϯΛखʹೖΕ·ͨ͠ʣ ରԠͨ͠಺༰͸BlogΛߋ৽͠·͢ Blog ɿ https://sandfishfactory.hatenablog.com/

Slide 78

Slide 78 text

΍ͬͯΑ͔ͬͨ͜ͱ • ΍ͬͺΓϞϊ͕ಈָ͍ͬͯ͘͠ • PythonͰόΠτΦʔμΛૢ࡞͢ΔͳͲීஈͷ࢓ࣄͰ͸ؔΘͬͯͳ͔ͬ ͨͷͰ৽઱ͩͬͨ • ंྠͷ࠶ൃ໌͚ͩͬͨͲɺJavaScriptͷίʔυΛPythonʹஔ͖׵͑Δ ʹ͸Ͳ͏͢Δ͚ͩͬʁͬͯߟ͑ͨΒPythonͷ஌Βͳ͍͜ͱ͕ଟ͔ͬͨ

Slide 79

Slide 79 text

օ͞Μ΋BLEͰϩϘοττΠΛ੍ޚ͠Α͏ʂ

Slide 80

Slide 80 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ Twitterɿ@sandfish03