Slide 1

Slide 1 text

Golang+RaspiͰझຯత IoTೖ໳తͳ࿩ @y_matsuwitter

Slide 2

Slide 2 text

ࣗݾ঺հ • ։ൃຊ෦ࣥߦ໾һࡶ༻໾ • iOS, Android, Infrastructure, Web • Golang෍ڭ໾ • ਖ਼࠲ • ࠷ۙؾʹͳΔ΋ͷ: MQTT

Slide 3

Slide 3 text

ࠓ೔ͷ࿩ • GolangͰݸਓझຯతʹIoTʹ৮Εͨ࿩ w/RaspberryPi • Gobotͱembdͷ঺հ

Slide 4

Slide 4 text

஫: ిࢠ޻࡞ૉਓͷ࿩Ͱ͢

Slide 5

Slide 5 text

IoT(Internet of Things) • ༷ʑͳϞϊ͕ΠϯλʔωοτΛհͯ͠ܨ͕Δٕज़ͷ૯শ • ࠷᷿ۙͰେਓؾ

Slide 6

Slide 6 text

RaspberryPiͱ͸

Slide 7

Slide 7 text

Spec • খܕɾ҆Ձͳڭҭ޲͚LinuxϚγϯ • RaspberryPi Foundation͕։ൃ • CPU: ARM • Memory: 256 ~ 1GB • USB microBͰڅి • GPIOϐϯ͕༻ҙ͞Ε͍ͯΔ

Slide 8

Slide 8 text

ARMͳͷͰ Golang͕ಈ͘ʂʂ GOARCH=arm go build

Slide 9

Slide 9 text

GPIO(General Purpose Input/ Output)ͱ͸ʁ • ଞσόΠεɺճ࿏౳ͱೖग़ྗΛߦ͏ͨΊͷΠϯλʔϑΣʔε • ιϑτ΢ΣΞଆͷࢦఆͰಈ࡞Λ੾Γସ͑Δࣄ͕Ͱ͖Δ

Slide 10

Slide 10 text

ࠓճ࢖ͬͨ΋ͷ • SHT21 ... Թ౓ɾ࣪౓ηϯα • I2Cͱ͍͏ํࣜͰԹ౓ɺ࣪౓Λ΍Γͱ Γ͢Δ

Slide 11

Slide 11 text

I2Cͱ͸ • ૊ΈࠐΈػث౳Ͱར༻͞ΕΔγϦΞϧ௨৴ن֨ͷҰͭ • ௿଎ͳ௨৴͕ڐ͞ΕΔ༻్޲͚ • Ұͭͷܦ࿏্Ͱෳ਺ͷػثͱ΍ΓͱΓͰ͖Δ

Slide 12

Slide 12 text

GolangͰI2C • Gobot΍embdͷར༻ਪ঑

Slide 13

Slide 13 text

Gobot

Slide 14

Slide 14 text

About Gobot • GolangͰϋʔυ΢ΣΞϓϩάϥϛϯάશൠΛߦ͏ͨΊͷϑϨ ʔϜϫʔΫ • RaspberryPi, Arduino, AR.DroneͳͲͷαϙʔτ • MQTT·ΘΓͷΞμϓλΛॳظ͔Βαϙʔτ • ͍͔ͭ͘ͷηϯαྨ͸͙͢ʹ࢖͑ΔΑ͏υϥΠό༻ҙ͞Εͯ ͍Δ

Slide 15

Slide 15 text

Sample: ArduinoͰLEDͷ఺໓ package main import ( "time" "github.com/hybridgroup/gobot" "github.com/hybridgroup/gobot/platforms/firmata" "github.com/hybridgroup/gobot/platforms/gpio" ) func main() { gbot := gobot.NewGobot() firmataAdaptor := firmata.NewFirmataAdaptor("arduino", "/dev/ttyACM0") led := gpio.NewLedDriver(firmataAdaptor, "led", "13") work := func() { gobot.Every(1*time.Second, func() { led.Toggle() }) } gbot.AddRobot(gobot.NewRobot("bot", []gobot.Connection{firmataAdaptor}, []gobot.Device{led}, work, )) gbot.Start() }

Slide 16

Slide 16 text

kidoman/embd

Slide 17

Slide 17 text

About embd • ૊ΈࠐΈϓϩάϥϛϯά޲͚ϑϨʔϜϫʔΫ • Gobotͱൺ΂Δͱ΋͏গ͠௿ϨΠϠ? • ରԠ୺຤͸গͳ͍ • ֤छBusΛ௚઀৮Γ΍͍͢ • Ұ෦ηϯα౳ͷυϥΠό΋༻ҙ͞Ε͍ͯΔ

Slide 18

Slide 18 text

Sample: RasPiͰLED఺໓ package main import ( "time" "github.com/kidoman/embd" _ "github.com/kidoman/embd/host/rpi" // This loads the RPi driver ) func main() { for { embd.LEDToggle("LED0") time.Sleep(250 * time.Millisecond) } }

Slide 19

Slide 19 text

embdͰSHT21͔ΒԹ౓Λऔಘ • ࠓճ͸EmbdͷI2CBusΛ௚઀ར༻ // Busʢܦ࿏ʣͷ࡞੒ bus := embd.NewI2CBus(1) // ॳظԽ bus.WriteByte(addr, byte(softreset)) // ॳظԽ׬ྃ଴ͪ time.Sleep(500 * time.Millisecond)

Slide 20

Slide 20 text

ଓ͖ // Թ౓Λૹͬͯ΋Β͏Α͏৴߸ૹ৴ bus.WriteByte(addr, triggerTemperatureNoHold) // ϋʔυ΢ΣΞଆͷ৴߸଴ͪ time.Sleep(temperatureWait * time.Millisecond) // 1όΠτ໨ಡΈग़͠ first, _ := bus.ReadByte(addr) // 2όΠτ໨ಡΈग़͠ second, _ := bus.ReadByte(addr) // ̎ͭͷ஋Λݩʹηϧγ΢ε౓ʹม׵ temp := (175.72*float64((int64(first)<<8+int64(second))&statusBitMusk))/float64(1<<16) - 46.85

Slide 21

Slide 21 text

੒Ռ෺ ఆظతʹࣨԹΛChatʹ౤͛ͯ͘ΕΔBot

Slide 22

Slide 22 text

ײ૝ • Golangࣗମ͕ܰྔͳͷͰݸਓ޻࡞Ͱͷ૊ΈࠐΈʹ͸࢖͍΍͢ ͦ͏ • ίʔσΟϯάΑΓ΋֤छηϯαͷ࢓༷ॻͱͷ֨ಆ • ֤छϑϨʔϜϫʔΫ͕༻ҙ͍ͯ͠ΔυϥΠό࢖͑ΔηϯαΛ બͿํָ͕

Slide 23

Slide 23 text

ࢀߟ • RaspberryPi https://www.raspberrypi.org/ • Gobot http://gobot.io/ • embd http://embd.kidoman.io/