YAPC::Asia 2014 2014-08-29 by @mackee_w
Perl meets Real World2014-08-29 YAPC::Asia 2014
View Slide
@mackee_w a.k.a Ϛίϐʔ• ໘ന๏ਓΧϠοΫ ٕज़෦• αʔόαΠυΤϯδχΞ(Perl)• ιʔγϟϧήʔϜͷ։ൃ/ӡ༻• ࠓ࡞͍ͬͯΔήʔϜࣄલొडத
ͯ͞
WebΤϯδχΞ͕ԿނϋʔυΣΞ͔ʁ
ڈগ͚ͩ͠ϋʔυΣΞͷࣄΛͨ͠• ઇࢁͰϥδίϯϔϦΛඈ͢ࣄ• Webͷٕज़͔͠ແ͔ͬͨ• ௐͨΒ࠷ۙͷϋʔυ͍͢͜͝ͱʹͳ͍ͬͯͨ
ٕͬͨज़• RaspberryPi• Arduino• OpenCV• Ansible
ϋʔυΣΞશ෦ҰൠతʹೖखՄೳ
ιϑτΣΞ“Web”ʹ௨ͣΔٕज़ͨͪ
ۤ࿑͚͋ͬͨΕͲָ͔ͬͨ͠ͷͰ”ํ๏”ͷҰ෦Λհ͠·͢
ࠓ͢͜ͱ• RaspberryPiͱArduino• ΦʔϓϯιʔεϋʔυΣΞ• Perl͚ͩͰωΪΛৼΔ• ࣗ࡞ϋʔυΣΞͱະདྷ
ࠓ͞ͳ͍͜ͱ• ϋϯμ͚ʢձ͔Β͓ͦΒౖ͘ΒΕΔʣ• ճ࿏ઃܭʢཁ͕͋Εผͷػձʹʣ• ΨνͷArduinoʢ͍ͨΒ࠙ձͱ͔Ͱʣ• ͦͷଞΨνిࢠ࡞
ୈҰষRaspberry PiͱArduino
Raspberry Pihttp://commons.wikimedia.org/wiki/File:Raspberry_Pi_Photo.jpg
• ARM 700MHz• 512MB RAM(Model B)• SD CARD• 100BASE-TX LAN• USB2.0 x 2• HDMI and RCA VIDEO• Audio• Power by USB
Q. Ͱɺ͜ΕͰPerlಈ͘ͷʁ
A. ͪΖΜಈ͖·͢ʂ
ී௨ͷLinux͕ಈ͘• Raspbian (DebianͷRasPi͚ΧελϜ)• NOOBS(for beginner)• Pidora(FedoraͷRasPi͚ΧελϜ)
ͦͦͷRasPiͷత• খதֶੜൃల్্ࠃ͚ͷITڭҭ• RCAϏσΦδϟοΫ͕͍͍ͯΔͷൃల్্ࠃͷϒϥϯςϨϏͰ͏ͨΊ• MinecraftͷRasPi൛ͱ͔͋ͬͯPythonͰΧελϚΠζͰ͖ͨΓ͢Δ
kanoࢠڙ͚ͷΦʔϧΠϯϫϯͷPCΩοτhttps://www.kickstarter.com/projects/alexklein/kano-a-computer-anyone-can-make
͔͠͠େਓ༷ͯ͠ʑͳϓϩδΣΫτ͕ڵͬͨ
RaspberryPiΛͬͨϓϩδΣΫτ
Raspberry PiԿނ/׆༻͞Ε͔ͨ
·͍͋ΖΜͳཧ༝͋Δ• ͍҆ (B/B+͕4000ԁఔ)• ΫϨδοτΧʔυαΠζ• ଞʹطʹಉछͷͷ͋ͬͨ• ڥ͕͍ͬͯΔ(ग़͕ࣗॳ৺ऀ͚)• ࡞ྫ͕ଟ͍
GPIO
GPIO - ݱ࣮ੈքʹհೖ͢ΔͨΊͷखஈ
ిؾΛݟฉ͖͠ɺ͠ΌΔ• ϞʔλʔͳͲͷۦಈػثͷಈ࡞ -> ࢛ࢶ• ηϯαʔͰͷपғঢ়گͷݕ -> ޒײ
ిؾͱ͍͏࠷ϨΠϠʔΛखܰʹѻ͑Δͷ͕RasPi
Arduinoͷ
• ిؾΛѻ͏͜ͱʹಛԽ• 8bit ϚΠίϯΛࡌ• ॲཧೳྗඇৗʹখ͍͞• USBೖྗઐ༻• ྫ֎͋Δ• LinuxͳͲ౸ఈಈ͔ͳ͍• ϐϯΛૢ࡞͢Δ
A. (‘A`) ಈ͔ͳ͍ɻɻɻ
ϋʔυΣΞ୯ମͰඇྗ͕ͩΤίγεςϜ͕ڧྗ
Arduino IDEArduinoʹඞཁͳͷΛશͯ٧ΊࠐΜͩιϑτΣΞ
γʔϧυُࢠُํࣜͰ֦ு͢ΔΞλονϝϯτ
ϥΠϒϥϦArduinoΛલఏͱͨ͠Ωοτ
͜͏͍͚Δ
RaspberryPiͰΓ͍ͨ͜ͱ• ը૾ॲཧͱ͔Τϯίʔυͱ͔ॏ͍ͨॲཧ• ෳࡶͳΞϧΰϦζϜΛཁ͢Δͷ• PC͚ͷϥΠϒϥϦ͕͙͢ಈ͖͍͢• ؆୯ͳΦϯΦϑఔͷϋʔυΣΞ੍ޚ
ArduinoͰΓ͍ͨ͜ͱ• ࣗ࡞ͷిࢠ෦ͳͲͱ࿈ܞ͢Δέʔε• Arduino͚ϥΠϒϥϦ͕͢Ͱʹ͋Δ߹• PWM੍ޚͳͲͷߴʹΦϯɾΦϑΛΔ߹• RasPiͩͱ͜͏͍͏͜ͱΛΔͱCPUΛΊͬͪΌ৯͏
ීஈ2ͭΛΈ߹ΘͤΔ͜ͱ͕ଟ͍Ͱ͕͢ɺͦΕޙͷষͰ
ୈೋষΦʔϓϯϋʔυΣΞ
ΦʔϓϯιʔεϥΠηϯε• ࣗ༝ͳ࠶൦͕Մೳ• ιʔείʔυ͕ೖखͰ͖Δ• ੜΛ࡞ͬͯྑ͍• ͦͷଞϥΠηϯε͕ܧঝ͞ΕΔͱ͔
ϋʔυΣΞʹ͓͚ΔΦʔϓϯιʔεͱ
ϋʔυΣΞͷιʔε• ϑΝʔϜΣΞ• ճ࿏ਤ• ෦ใ• ج൘ஔਤ
Arduinoͷྫ
ճ࿏ਤ(Arduino Unoͷ߹)http://arduino.cc/en/Main/ArduinoBoardUno
ج൘ஔਤEagleͱ͍͏ճ࿏ਤ/ج൘ΤσΟλͷܗࣜͰ൦͞Ε͍ͯΔ
ͭ·Γ؆୯ʹArduinoΛࣗ࡞͢Δ͜ͱ͕ग़དྷΔ
ݱʹΫϩʔϯ͕͍ͬͺ͍ଘࡏ͢Δ
ArduinoΛࣗ࡞͢ΔϝϦοτ• ػೳͷՃ• Ϟʔλʔ੍ޚճ࿏ΛΈࠐΉͱ͔• ϑοτϓϦϯτͷݮগ• ΊͬͪΌখ͍͞ػثʹੵΈ͍ͨ• ArduinoͷΤίγεςϜͷԸܙΛड͚ΒΕΔ
ϋʔυΛΦʔϓϯʹ͢Δ͜ͱ• ϋοΫΛଅ͢• ΤίγεςϜ͕ൃల͍͢͠• ྲྀߦΔͱ͕ͨ͘͞Μग़ͯ͘Δ• ArduinoRasPi໊લΛ͏ͷΛϥΠηϯεͰ੍ݶ͍ͯ͠Δ
ΦʔϓϯʹͳΕϋʔυΣΞͰϚογϡΞοϓ(ࢮޠ)ग़དྷΔͱ͍͏͜ͱͰ͢Ͷ
ୈࡾষPerl͚ͩͰωΪΛৼΔ
ωΪΛৼΔͱʁʁʁ• ݩʑχίχίಈըͷॳԻϛΫಈըͰωΪΛৼΔͷ͕͋Δ• χίχίٕज़෦ͰೖಈըͰΑ͘ࡐʹͳΔ• ͍ΖΜͳͷͰωΪΛৼ͍ͬͯΔ
ҎԼͷറΓͰ࡞Δ• ϋϯμ͚ͳ͠ ϒϨουϘʔυͳ͠• Arduinoݴޠॻ͔ͳ͍• Perlॻ͘(YAPCͳͷͰ)
ࡐྉ• Raspberry Pi Model B• Arduino Leonardo(Ոʹ͋ͬͨ)• GROVE System
GROVE Systemͱ
͜͏͍͏ͪͬͪΌ͍෦͕͋ͬͯ
͜͏͍͏γʔϧυΛArduinoʹࡌ͚ͬͯ
͜Μͳ͔Μ͡Ͱͭͳ͛ͯ͏
͏ͨΊͷϥΠϒϥϦطʹඋ͞Ε͍ͯΔ
Step 1Raspberry PiͱArduinoͰ͓͠ΌΓ͢Δ
Firmata͍ͬͯ͏ͷΛ͍·͢• FirmataArduinoͱ͔ͷϚΠίϯͱPCؒͰ͓͠ΌΓ͢ΔͨΊͷϓϩτίϧ• ͓खܰಋೖՄೳ
ࠓFirmataͰLEDΛޫΒ͢
PerlͰFirmataΛ͠ΌΔ
ArduinoʹFirmataͷεέονΛॻ͖ࠐΉ
ϋʔυͷ΄͏ͷ४උ• ArduinoͱGROVE Base ShieldΛଓ• γʔϧυͷD4ʹLEDϞδϡʔϧΛଓ• ArduinoͱRaspberry PiΛͭͳ͛Δ
Step 2αʔϘϞʔλΛ͏
GROVEͷαʔϘϞʔλD3ʹͭͳ͍ͩ
Step 3WebΞϓϦԽ͢Δ
Amon2Ͱ࡞Δ
WebΞϓϦͷػೳ• WebSocketͰ֯ใΛड৴• ͦͷΛRedisʹॻ͖ࠐΉ
ผϓϩηεͷϫʔΧʔ• ແݶϧʔϓͰRedisͷΛࢹ• มԽ͕͋ΕFirmataͰArduinoʹૹ৴
σϞ
࠷ऴষࣗ࡞ϋʔυΣΞͱະདྷ
ϋʔυΣΞΛࣗͰ࡞ΕΔ࣮࣌֬ʹདྷ͍ͯΔ• 3DϓϦϯλͱ͔ੲߟ͑ΒΕͳ͔ͬͨ• ᝑମΛ͔ͬ͜ྑ͘࡞Δ͕ૉૣ͘ղܾ• ϋʔυΣΞΛखചΓ͢Δ࣌ʹͳͬͨ• Make Fairͱ͔Ͷ
IRKithttp://getirkit.com/
IRKit• தArduinoޓج൘• ͯ͢Φʔϓϯ• ճ࿏ઃܭᝑମͷઃܭΛݸਓͰߦ͏
ϋʔυΣΞΛ͕ͬͭΓΒͣʹ࡞ΕΔ࣌• ࣗͷख׳ΕͨݴޠͰهड़Ͱ͖Δ• ϋϯμ͚ෆཁ• εςοϓΞοϓ͢ΔͱϒϨουϘʔυϋϯμ͚͕ඞཁʹͳΔ͚ΕͲ
·ͩ·ͩΓͳ͍͜ͱ(͕Βͳ͍͚͔ͩ)• ΤϯδχΞϦϯάͱͯ͠ͷΈԽ• PerlͰݴ͏CPANΈ͍ͨͳͭ• ษڧձɺϫʔΫγϣοϓ• ςετڥ
ϋʔυΣΞͳਓͱग़ձ͍͍ͨʂ• WebͷਓͱΑ͘ձ͏͚ΕͲɺ͜͏͍͏͜ͱ͍ͬͯΔਓͳ͔ͳ͔ग़ձΘͳ͍• ͍ͨΒհͯ͠ཉ͍͠͠ɺ͋ͳ͕ͨͦ͏Ͱ͋Ε༑ͩͪʹͳ͍ͬͯͩ͘͞
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠
࣭ٙԠ͕࣌ؒ༨ͬͨΒΔ༻
ແઢԽ
γϦΞϧΛແઢԽ• XBee/XBee WiFiͦͷଞແઢLANϞδϡʔϧ• γϦΞϧΛZigBeeWiFiʹมͰ͖Δ• ٕదʹҙ• ւ֎Ϟδϡʔϧి๏ͰҾ͔͔ͬΔͱ͔͋Δ
RasPi Cam
Raspberry Piઐ༻Χϝϥ• খ͍͍ͦͦ҆͜͜͞͠(2000ԁ)• ͨͩ͠RasPiઐ༻• RasPiΛϥΠϒΧϝϥͱ͔ʹग़དྷΔ• ϔϦͰ͍·ͨ͠ʢখ͍͞͠USB৯Θͳ͍