Slide 1

Slide 1 text

RASPBERRY PIߨशձ PART3: IOT WITH RASPBERRY PI 2018೥ౙɹখ໺ً໵

Slide 2

Slide 2 text

લճͷ෮शQUIZ Q1ɹγΣϧͷओͳ໾ׂ͸Կʁ Q2ɹCUIʹΑΔίϚϯυૢ࡞͸{1.Ϋιɹ2.ਆ}Ͱ͋Δɻ Q3ɹaptͬͯԿʁ Q4ɹLinuxγεςϜͷ؅ཧऀϢʔβ͸Կʁ

Slide 3

Slide 3 text

PYTHONͷ෮श def get_average(mylist, size): “""ؔ਺ݺͼग़࣌͠ʹ mylist = score, size = 4ͷ୅ೖ͕ߦΘΕΔ""" sum = 0 for i in mylist: sum += i # a += 1 ͸ a = a + 1Λҙຯ͢Δ return sum / size score = [70, 82, 88, 90] average = get_average(score, 4) print("average:{}".format(average))

Slide 4

Slide 4 text

ࠓճͷ໨ඪ webαʔόʔΛཱͯΔʂ ϒϥ΢β͔ΒLEDΛ఺౮ʂ ͍·όζͬͯΔIoTͱ͍͏΍ͭͰ͢ɻ

Slide 5

Slide 5 text

αʔόɾΫϥΠΞϯτߏ੒ αʔόଆͷίϯϐϡʔλͱΫϥΠΞϯτଆͷ ίϯϐϡʔλʹ෼͚ͯͦΕͧΕͷ໾໨Λ ੾Γ཭͢ɻ

Slide 6

Slide 6 text

ϦΫΤετΛ޷͖ͳλΠϛϯάͰૹΓ ϨεϙϯεΛ΋Β͏ɻ ྫʣϒϥ΢β ΫϥΠΞϯτ

Slide 7

Slide 7 text

αʔό ϦΫΤετʹରͯ͠ϨεϙϯεΛฦ͢ɻ ϦΫΤετΛ͡ʔʔͬͱ଴ͭɻ webαʔόɺFTPαʔόɺDNSαʔόͳͲ

Slide 8

Slide 8 text

ࠓɺͲ͜ʹ͍Δʁ αʔόɾΫϥΠΞϯτߏ੒ͰϓϩάϥϜΛॻ͘ͱ͖͸ɺ ࣗ෼͕ࠓͲͪΒଆΛ࡞͍ͬͯΔͷ͔ҙࣝ͠Α͏ɻ

Slide 9

Slide 9 text

webαʔό ɹ HTTPϓϩτίϧʹج͍ͮͯσʔλͷ΍Γ औΓΛ͢Δαʔόͷ͜ͱ

Slide 10

Slide 10 text

HTTPϓϩτίϧ hypertext transfer protocol ϋΠύʔͳςΩετΛτϥϯεϑΝʔ͢Δͨ Ίͷϓϩτίϧɻ

Slide 11

Slide 11 text

௨৴ϓϩτίϧ ௨৴Λߦ͏ͨΊʹඞཁͳऔΓܾΊ έʔϒϧͷίωΫλͷܗঢ়͸ʁ σʔλͷઌ಄10όΠτ͸ԿΛද͢ʁɹͳͲͳͲ SSHͱHTTPͰ͸࣮ݱ͍ͨ͜͠ͱ͕ҟͳΔͨΊҟͳΔϓϩτίϧ͕༻͍ΒΕΔ

Slide 12

Slide 12 text

ϋΠύʔςΩετ ͨͩͷจࣈ͚ͩͰͳ͘ɺਤɺදɺͳͲΛදݱͰ ͖ɺϦϯΫʹΑͬͯผͷςΩετΛࢀরͰ͖Δ Α͏ʹͳ͍ͬͯΔςΩετϑΝΠϧͷ͜ͱ

Slide 13

Slide 13 text

HTML hypertext markup languageɹ ϋΠύʔͳςΩετͷ୅ද֨ɻ

Slide 14

Slide 14 text

webϑϨʔϜϫʔΫ webΞϓϦέʔγϣϯΛ࡞Δࡍʹେ఍ඞཁͱͳΔػೳΛ͋ Β͔͡Ί·ͱΊͨ΋ͷɻ ͲΜͳϑΝΠϧΛͲ͜ʹ഑ஔ͢Δ͔͕ఆΊΒΕ͓ͯΓɺͦ ͷܾ·ΓʹԊͬͯϓϩάϥϜΛॻ͘

Slide 15

Slide 15 text

ϥΠϒϥϦ Α͘࢖͏ػೳʢ࣌ࠁ΍σʔλϕʔεૢ࡞ʣΛ·ͱΊͨ΋ͷɻ Ͳ͏࢖͏͔͸܅࣍ୈɻ

Slide 16

Slide 16 text

BOTTLEͷΠϯετʔϧ PythonͷwebϑϨʔΫϫʔΫͰ͋ΔbottleΛ࢖͓͏ɻ http://bottlepy.org/docs/dev/tutorial.html $ sudo pip3.6 install bottle pip͸pythonͷެࣜύοέʔδϚωʔδϟ

Slide 17

Slide 17 text

ॳΊͯͷαʔό ϗʔϜσΟϨΫτϦʹserverσΟϨΫτϦΛ࡞੒͠ɺͦͷதʹserver.pyΛ࡞੒͠Α͏ɻ # ඞཁͳϞδϡʔϧͷಡΈࠐΈ from bottle import Bottle, run, post, request, redirect # BottleΦϒδΣΫτʢΠϯελϯεʣͷ࡞੒ app = Bottle() @app.route('/') def handle(): return "hello, bottle" run(app, host="your_ip_addr", port=8080)

Slide 18

Slide 18 text

ॳΊͯͷαʔό PCͰ΋εϚϗͰ΋͍͍ͷͰwebϒϥ΢βΛ্ཱͪ͛ͯɺURLೖྗόʔ ʹ http://192.168.111.XX:8080/ ͜ΕΛೖྗ͠Α͏ɻ දࣔ͞Ε·͔ͨ͠ʁ

Slide 19

Slide 19 text

SERVER.PYͰ༡΅͏ @app.route(‘/‘) def handle(): return "hello, bottle” @ʹଓ͘app.routeΛσίϨʔλؔ਺ͱݴ͍·͢ɻ ‘/‘ͷ෦෼͸ԿΛද͍ͯ͠Δ͔Θ͔Γ·͔͢ʁ ͜͜Λมߋ͢ΔͱͲ͏ͳΔͰ͠ΐ͏ʁ ؔ਺໊Λมߋͯ͠ΈΔͱʁ @app.route()Λ૿΍ͯ͠ΈΔͱɾɾɾʁ

Slide 20

Slide 20 text

SERVER.PYͰ༡΅͏ @app.route(‘/‘) def handle(): return "hello, bottle” return͸Ͳ͜ʹԿΛฦ͍ͯ͠ΔͷͩΖ͏͔ʁ ࢼ͠ʹreturn “

hello, bottle

”ͱͯ͠ΈΑ͏ɻ

Slide 21

Slide 21 text

HTTP HTTP͸ৗʹϦΫΤετɺϨεϙϯεͷΩϟονϘʔϧɻ ϒϥ΢βʮ͍ͩ͘͞ʯɹʹʼϦΫΤετɹɹɹɹɹɹɹɹαʔό ϒϥ΢βɹɹɹɹɹɹɹʻʹϨεϙϯεʢhtmlϑΝΠϧʣαʔόʮͲ͏ ͧʯ ϦΫΤετͷதͰɺʮԿΛʯʮͲ͏ͯ͠ཉ͍͠ͷ͔ʯΛ఻͑ΔɻʮԿΛʯ ʹ૬౰͢Δ΋ͷ͕URLͰʮͲ͏ͯ͠ཉ͍͠ͷ͔ʯʹ૬౰͢Δͷ͕HTTPϝ ιουɻ

Slide 22

Slide 22 text

GETϝιου URLʹσʔλΛؚΊͯαʔόʹϦΫΤετΛૹΔɻ ggΔͷ͸ओʹGETϝιουΛ༻͍͍ͯΔɻ

Slide 23

Slide 23 text

POSTϝιου ࢦఆ͞ΕͨURLʹϦΫΤετͱͱ΋ʹɺ σʔλΛαʔό΁ૹ৴͢Δɻ

Slide 24

Slide 24 text

QUIZ Q1ɺઌ΄Ͳhello, bottleΛදࣔͤ͞Δͷʹ࢖ͬͨϝιου͸ͳΜͰ ͠ΐ͏ʁ Q2ɺwebͷϑΥʔϜσʔλΛૹ৴͢Δͱ͖ʹ࢖͏ϝιου͸ͳΜͰ ͠ΐ͏ʁ

Slide 25

Slide 25 text

HTML࠶ೖ໳ Ͱ࢝·ΓͰऴΘΔɻʻʼͰғ·Ε͍ͯΔ෦෼Λλάͱ ͍͏ɻλάͷछྨʹΑͬͯ໾ׂ͕ܾ·Δ

ͳͲͳͲ

Slide 26

Slide 26 text

GETͰϦΫΤετૹΔ GETͰ͸ΫΤϦύϥϝʔλͱ͍͏΋ͷΛ࢖ͬͯɺϦΫΤετσʔλʹ৘ใ ΛՃ͑Δ͜ͱ͕Ͱ͖Δɻ

Slide 27

Slide 27 text

GETͰड͚Δ @app.route('/robo') def recvget(): return "{}".format(request.query.get_foo)

Slide 28

Slide 28 text

POSTͰϦΫΤετૹΔ

Slide 29

Slide 29 text

POSTͰड͚Δ @app.route('/architect', method='POST') def recvpost(): return "{}".format(request.forms.get(‘post_foo’))

Slide 30

Slide 30 text

PYTHONͰGPIOϐϯૢ࡞ ͜ͷલγΣϧεΫϦϓτͰGPIOϐϯૢ࡞Λ͠·ͨ͠Ͷʁ ͜ΕΛpythonͷεΫϦϓτͰ΋΍ͬͯΈ·͠ΐ͏ɻ $ sudo pip3.6 install wiringpi

Slide 31

Slide 31 text

࢖͍ํ؆୯Ͱ͢ɻ import wiringpi wiringpi.wiringPiSetupGpio() # For GPIO pin numbering wiringpi.pinMode(6, 1) # Set pin 6 to 1 ( OUTPUT ) wiringpi.digitalWrite(6, 1) # Write 1 ( HIGH ) to pin 6 wiringpi.digitalRead(6) # Read pin 6

Slide 32

Slide 32 text

LCHIKA.SH࠶དྷ ͜ͷલͷlchika.shͱ·ͬͨ͘ಉ͜͡ͱΛ͠Α͏ɻ import time time.sleep(5) ͰpythonΛ5ඵؒ଴ػͤ͞Δ͜ͱ͕Ͱ͖Δɻ

Slide 33

Slide 33 text

ࠓ೔ͷ͓୊ ϒϥ΢βͷϘλϯΛԡͯ͠LEDΛޫΒͤΑʂ

Slide 34

Slide 34 text

ࣗ༝ʹ࡞Ζ͏ ONϘλϯɺOFFϘλϯΛ྆ํ࡞Δʁ ͦΕͱ΋ONͱOFFͷ૬ޓ੾Γସ͑Λ͢Δʁ LEDͷON,OFF৘ใ͸POSTͰૹΔʁGETͰૹΔʁ ͲͷURLʹσʔλΛૹΔʁ

Slide 35

Slide 35 text

ม਺ͷείʔϓ >>> a = 10 >>> def hoge(): ... a += 1 ... print(a) Traceback (most recent call last): File "", line 1, in File "", line 2, in hoge UnboundLocalError: local variable 'a' referenced before assignment

Slide 36

Slide 36 text

GLOBALม਺Λ࢖͏ >>> a = 10 >>> def hoge(): ... global a ... a += 1 ... print(a)

Slide 37

Slide 37 text

ࢲ͕࡞ͬͨSERVER.PY https://github.com/teru01/Lchika-Server GitHubͱ͍͏αʔϏεΛ࢖͍ͬͯ·͢ɻ

Slide 38

Slide 38 text

͓ർΕ༷Ͱͨ͠ɻ $ sudo poweroff