SlideShare una empresa de Scribd logo
1 de 17
Descargar para leer sin conexión
Raspberry Pi + Go で IoT した話
2019-09-25 Takeshi Yaegashi
golang.tokyo #26
自己紹介
八重樫 剛史 Takeshi Yaegashi
● 株式会社バンダイナムコスタジオ所属
● Linux・Unix・OSS・低レベルなことが好きなエンジニア
● ホームページ・ブログ https://l0w.dev
● Go のお仕事
○ Raspberry Pi を使った IoT 案件
○ スマホゲームアプリのサーバ
● Go のお話
○ golang.tokyo #25「golang binary hacks」
○ Go Conference 2019 Autumn「MS Graph API Library for Go (仮)」
Raspberry Pi + Go で IoT した事例を紹介します
※ 2018年の事例です。案件について具体的なお話はできません。申しわけありません。
本日のお話
Wi-Fi Router Cloud Services
Edge DevicesThings
IoT エッジデバイス・組み込みシステムの開発に適した Go 言語
● マイコン用のクロスコンパイルが驚くほど簡単
$ GOARCH=arm GOARM=6 go get ./cmd/hello
● シングルバイナリが扱いやすい
● 言語レベルの並行処理サポート: goroutine, chan
● システム構築に使えるライブラリ、パッケージの充実
○ 様々なネットワークプロトコルのサポート
○ Linux カーネルなどのシステムプログラミング
本日のお話の背景
Raspberry Pi の GPIO・ストレージ・Wi-Fi を使ったデータ収集システム
● エッジデバイス (Raspberry Pi 0/1/2/3)
○ Wi-Fi によるインターネット接続
○ GPIO などでイベント発生を監視、サーバに逐次送信 (MQTT)
○ サーバ接続不良時は発生イベントをMicroSDに蓄積、復旧時に再送
○ ソフトウェアアップデートに対応
● サーバ (AWS)
○ IoT + Lambda + DynamoDB (イベントデータ蓄積)
○ API Gateway + Lambda (デバイス登録APIなど)
○ S3 + CloudFront (アップデート配信)
事例紹介:システム概要
事例紹介:エッジデバイス (Raspberry Pi) のシステム構成
pigpiod
MQTT
wpa_
supplicant
I/O System
Event Queue
(LevelDB)
AWS IoT
dhcpcd
GPIO EthernetWi-Fi
timedated
timesyncd
ClockMicroSD
System
Daemons
Go Process
Hardware
💡💡💡
Goroutine
Library
mutex
chan
named pipe unix socketD-Bus
TLS
組み込み Linux システムを Go で動かす
● 組み込みシステム向けに改造した Raspbian stretch 上で動作
○ 圧縮・耐障害ファイルシステム (squashfs + overlayfs)
○ 圧縮後のシステムイメージサイズは 100MB 程度
● システムコンポーネントと仲良く
○ systemd, dhcpcd, wpa_supplicant などのデーモンを活用
○ IPC (named pipe, unix socket, D-Bus) を利用して Go から制御
● goroutine, chan の活用
○ 基本はリソース専用 goroutine 割り当てと chan による相互通信・同期
○ イベントキューは DB ライブラリ関数内部の mutex 同期を活用
事例紹介:エッジデバイスのシステム設計のポイント
コンポーネント紹介:MQTT
Eclipse Paho MQTT Go client
● https://github.com/eclipse/paho.mqtt.golang
● 定番の MQTT 通信ライブラリ
● X.509 証明書によりクライアントの認証
● QoS=1 でサーバへのデータ到達を保証
コンポーネント紹介:イベントキュー
LevelDB によるイベントキューの実装
● goleveldb - https://github.com/syndtr/goleveldb
○ LevelDB の Go による実装
● goque - https://github.com/beeker1121/goque
○ goleveldb による stack/queue/priority queue
○ イベントキュー実装において参考にした
● DB 障害対策
○ Micro SD に専用のパーティション・ファイルシステム (ext4) を作る
○ DB が壊れたら Recover() で修復、だめなら mkfs して初期化
コンポーネント紹介:Wi-Fi 制御
wpa_supplicant / dhcpcd
● wpasupplicant - https://github.com/dpifke/golang-wpasupplicant
○ wpa_supplicant と unix socket で通信するライブラリ
○ WPAのSSID/PSKの設定やAPスキャンなどができる
● dhcpcd - WPA 接続が確立すると自動的に IP アドレスを取得してくれる
● この他、エッジデバイスの設置と運用を支援するため、定期的にAPスキャンを行い
Wi-Fi電波情報をイベントキューに入れてサーバに送信している
コンポーネント紹介:システム時刻設定
systemd-timedated / systemd-timesyncd
● システム時刻、タイムゾーン、NTP 設定は
systemd により管理されている
● 基本的な NTP クライアントは systemd に内
蔵されている
● timedatectl - CLI
○ タイムゾーンや時刻設定に使用
● godbus - https://github.com/godbus/dbus
○ D-Bus で制御することもできる
$ timedatectl
Local time: Wed 2019-09-25 05:03:11 JST
Universal time: Tue 2019-09-24 20:03:11 UTC
RTC time: n/a
Time zone: Asia/Tokyo (JST, +0900)
Network time on: yes
NTP synchronized: yes
RTC in local TZ: no
$ timedatectl set-timezone Japan
$ timedatectl set-ntp false
$ timedatectl set-time "2019-09-25 19:00:00"
コンポーネント紹介:GPIO 制御
pigpio による GPIO 制御
● pigpio - http://abyz.me.uk/rpi/pigpio/
○ Raspberry Pi の GPIO を内蔵ハードで制御する C 言語のライブラリ
○ PCM/PWM クロックと GPU DMA で高速・高精度・低負荷な入出力
○ スクリプティングエンジン搭載
● pigpiod - pigpio デーモン
○ 名前つきパイプやソケットで別プロセスから制御
● pigs - pigpiod のクライアント CLI
● apt-get install pigpio でインストール可能
コンポーネント紹介:GPIO 制御
# GPIO 5 状態読み取り
$ pigs "R 5"
0
# GPIO 4 出力モード 500ms "1" パルス出力
$ pigs "M 4 W W 4 0"
$ pigs "W 4 1 MILS 500 W 4 0"
# GPIO 0-3 状態変化を /dev/pigpio0 に通知
$ pigs "NO"
0
$ pigs "NB 0 0x0000000F"
$ cat /dev/pigpio0
@?2$8??!@*??;??!@9DK???!@B??B??!@QWrF??!
pigpio スクリプト http://abyz.me.uk/rpi/pigpio/pigs.html
コンポーネント紹介:GPIO 制御
pin, err := os.OpenFile("/dev/pigpio", os.O_RDWR, 0)
if err != nil { return err}
defer pin.Close()
pout, err := os.Open("/dev/pigout")
if err != nil { return err }
defer pout.Close()
pin.Write([]byte("W 4 1 MILS 500 W 4 0")) // 3命令のスクリプトを実行
buf := make([]byte, 128) // 3命令の実行結果を取得
n, err := pout.Read(buf)
if err != nil { return err }
fmt.Printf("%sn", string(buf[:n])) // "0n0n0n"を表示(成功×3)
Go + pigpiod:named pipe (文字列) や socket (バイナリ)で制御可能
コンポーネント紹介:GPIO 制御
Go + pigpiod:用途を選ぶが、はまれば非常に便利
● 利点
○ Go だけでは難しいレベルのリアルタイム I/O が可能になる
○ 全 GPIO 端子で解像度 5μs (200kHz) の入出力を実現
○ 強力なスクリプトで様々な機能を実装可能
■ チャタリング除去つきの入力パルス検出
■ プロシージャによるインジケータLED自動点滅制御
● 欠点
○ 遅延が大きい (スクリプト制御は必ずコンテキストスイッチを伴う)
○ pigpiod の CPU 負荷が高い (3B+ で 7〜10%)
コンポーネント紹介:GPIO 制御
その他の Go I/O ライブラリの紹介
● gobot.io - https://gobot.io
○ Raspberry Pi 以外もサポートする汎用のライブラリ
○ メモリマップ I/O による低遅延な入出力
● periph.io - https://periph.io
○ gobot.io と同様な汎用ライブラリ
○ 徹底した高速化・最適化
○ pigpio のような GPU DMA 入出力を pure Go で実装
○ 開発が活発、現時点で一番おすすめできるライブラリ
まとめ
Raspberry Pi + Go で IoT エッジデバイスを作った事例を紹介しました
IoT や組み込みの分野で Go をもっと活用していきましょう!

Más contenido relacionado

La actualidad más candente

Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Akihiro Suda
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話Kumazaki Hiroki
 
低レイヤー入門
低レイヤー入門低レイヤー入門
低レイヤー入門demuyan
 
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?Takuya Ueda
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Kohei Tokunaga
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...NTT DATA Technology & Innovation
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方Yoshiyasu SAEKI
 
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...NTT DATA Technology & Innovation
 
Apache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once SemanticsApache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once SemanticsYoshiyasu SAEKI
 
失敗から学ぶAndroid設計話
失敗から学ぶAndroid設計話失敗から学ぶAndroid設計話
失敗から学ぶAndroid設計話chigichan24
 
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?TEE (Trusted Execution Environment)は第二の仮想化技術になるか?
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?Kuniyasu Suzaki
 
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)mosa siru
 
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜 リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜 Yugo Shimizu
 
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールこんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールdcubeio
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるpospome
 
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTakuto Wada
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021Hiroshi Tokumaru
 
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)NTT DATA Technology & Innovation
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 

La actualidad más candente (20)

Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
低レイヤー入門
低レイヤー入門低レイヤー入門
低レイヤー入門
 
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
 
今さら聞けない人のためのCI/CD超入門
今さら聞けない人のためのCI/CD超入門今さら聞けない人のためのCI/CD超入門
今さら聞けない人のためのCI/CD超入門
 
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
 
Apache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once SemanticsApache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once Semantics
 
失敗から学ぶAndroid設計話
失敗から学ぶAndroid設計話失敗から学ぶAndroid設計話
失敗から学ぶAndroid設計話
 
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?TEE (Trusted Execution Environment)は第二の仮想化技術になるか?
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?
 
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
 
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜 リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
 
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールこんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツール
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
 
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 

Similar a Raspberry Pi + Go で IoT した話

GoでEPC作って本番運用している話
GoでEPC作って本番運用している話GoでEPC作って本番運用している話
GoでEPC作って本番運用している話雄也 日下部
 
レベルを上げて物理で殴る 16x9
レベルを上げて物理で殴る 16x9レベルを上げて物理で殴る 16x9
レベルを上げて物理で殴る 16x9Knit Tiger
 
Google IoT Core × SORACOM(補足:PrivateGarden機能の部分は、PublicGate機能の間違えです)
Google IoT Core × SORACOM(補足:PrivateGarden機能の部分は、PublicGate機能の間違えです)Google IoT Core × SORACOM(補足:PrivateGarden機能の部分は、PublicGate機能の間違えです)
Google IoT Core × SORACOM(補足:PrivateGarden機能の部分は、PublicGate機能の間違えです)Yuji Chino
 
AppGameKit on raspberry pi概概要
AppGameKit on raspberry pi概概要AppGameKit on raspberry pi概概要
AppGameKit on raspberry pi概概要SI系、ゲーム系
 
Google IoT Core × SORACOM
Google IoT Core × SORACOMGoogle IoT Core × SORACOM
Google IoT Core × SORACOMYuji Chino
 
Node-RED のフローを isaax で配信してみた
Node-RED のフローを isaax で配信してみたNode-RED のフローを isaax で配信してみた
Node-RED のフローを isaax で配信してみたTomoyuki Sugita
 
Modernization of Factory Automation with Elixir based systems and communities
Modernization of Factory Automation with Elixir based systems and communitiesModernization of Factory Automation with Elixir based systems and communities
Modernization of Factory Automation with Elixir based systems and communitiesYutaka Kikuchi
 
『自走プログラマー』 が我々に必要だった理由
『自走プログラマー』 が我々に必要だった理由『自走プログラマー』 が我々に必要だった理由
『自走プログラマー』 が我々に必要だった理由Takayuki Shimizukawa
 
20191113 python raspberry_pi_gpio
20191113 python raspberry_pi_gpio20191113 python raspberry_pi_gpio
20191113 python raspberry_pi_gpioKioto Hirahara
 
Singularityで分散深層学習
Singularityで分散深層学習Singularityで分散深層学習
Singularityで分散深層学習Hitoshi Sato
 
Datadog Agent on CloudRunによるGCPトレービリティ向上
Datadog Agent on CloudRunによるGCPトレービリティ向上Datadog Agent on CloudRunによるGCPトレービリティ向上
Datadog Agent on CloudRunによるGCPトレービリティ向上Ryo Sasaki
 
今話題のいろいろなコンテナランタイムを比較してみた
今話題のいろいろなコンテナランタイムを比較してみた今話題のいろいろなコンテナランタイムを比較してみた
今話題のいろいろなコンテナランタイムを比較してみたKohei Tokunaga
 
ロボットシステム学2015年第7回
ロボットシステム学2015年第7回ロボットシステム学2015年第7回
ロボットシステム学2015年第7回Ryuichi Ueda
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践Yoshifumi Kawai
 
GoBGP活用によるSD-WANプラクティス
GoBGP活用によるSD-WANプラクティスGoBGP活用によるSD-WANプラクティス
GoBGP活用によるSD-WANプラクティスToshiki Tsuboi
 
gcpug_okinawa_#2_hiroshi_kawakami
gcpug_okinawa_#2_hiroshi_kawakamigcpug_okinawa_#2_hiroshi_kawakami
gcpug_okinawa_#2_hiroshi_kawakamiHiroshi Kawakami
 

Similar a Raspberry Pi + Go で IoT した話 (20)

GoでEPC作って本番運用している話
GoでEPC作って本番運用している話GoでEPC作って本番運用している話
GoでEPC作って本番運用している話
 
レベルを上げて物理で殴る 16x9
レベルを上げて物理で殴る 16x9レベルを上げて物理で殴る 16x9
レベルを上げて物理で殴る 16x9
 
【初心者向け】API を使ってクラウドの管理を自動化しよう
【初心者向け】API を使ってクラウドの管理を自動化しよう【初心者向け】API を使ってクラウドの管理を自動化しよう
【初心者向け】API を使ってクラウドの管理を自動化しよう
 
Google IoT Core × SORACOM(補足:PrivateGarden機能の部分は、PublicGate機能の間違えです)
Google IoT Core × SORACOM(補足:PrivateGarden機能の部分は、PublicGate機能の間違えです)Google IoT Core × SORACOM(補足:PrivateGarden機能の部分は、PublicGate機能の間違えです)
Google IoT Core × SORACOM(補足:PrivateGarden機能の部分は、PublicGate機能の間違えです)
 
AppGameKit on raspberry pi概概要
AppGameKit on raspberry pi概概要AppGameKit on raspberry pi概概要
AppGameKit on raspberry pi概概要
 
IKEv2-VPN PyHackCon2023
IKEv2-VPN PyHackCon2023IKEv2-VPN PyHackCon2023
IKEv2-VPN PyHackCon2023
 
Google IoT Core × SORACOM
Google IoT Core × SORACOMGoogle IoT Core × SORACOM
Google IoT Core × SORACOM
 
Node-RED のフローを isaax で配信してみた
Node-RED のフローを isaax で配信してみたNode-RED のフローを isaax で配信してみた
Node-RED のフローを isaax で配信してみた
 
JTAGを使ってみよう
JTAGを使ってみようJTAGを使ってみよう
JTAGを使ってみよう
 
Modernization of Factory Automation with Elixir based systems and communities
Modernization of Factory Automation with Elixir based systems and communitiesModernization of Factory Automation with Elixir based systems and communities
Modernization of Factory Automation with Elixir based systems and communities
 
『自走プログラマー』 が我々に必要だった理由
『自走プログラマー』 が我々に必要だった理由『自走プログラマー』 が我々に必要だった理由
『自走プログラマー』 が我々に必要だった理由
 
20191113 python raspberry_pi_gpio
20191113 python raspberry_pi_gpio20191113 python raspberry_pi_gpio
20191113 python raspberry_pi_gpio
 
Deploy TypeScript Application by CodePipeline
Deploy TypeScript Application by CodePipelineDeploy TypeScript Application by CodePipeline
Deploy TypeScript Application by CodePipeline
 
Singularityで分散深層学習
Singularityで分散深層学習Singularityで分散深層学習
Singularityで分散深層学習
 
Datadog Agent on CloudRunによるGCPトレービリティ向上
Datadog Agent on CloudRunによるGCPトレービリティ向上Datadog Agent on CloudRunによるGCPトレービリティ向上
Datadog Agent on CloudRunによるGCPトレービリティ向上
 
今話題のいろいろなコンテナランタイムを比較してみた
今話題のいろいろなコンテナランタイムを比較してみた今話題のいろいろなコンテナランタイムを比較してみた
今話題のいろいろなコンテナランタイムを比較してみた
 
ロボットシステム学2015年第7回
ロボットシステム学2015年第7回ロボットシステム学2015年第7回
ロボットシステム学2015年第7回
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
 
GoBGP活用によるSD-WANプラクティス
GoBGP活用によるSD-WANプラクティスGoBGP活用によるSD-WANプラクティス
GoBGP活用によるSD-WANプラクティス
 
gcpug_okinawa_#2_hiroshi_kawakami
gcpug_okinawa_#2_hiroshi_kawakamigcpug_okinawa_#2_hiroshi_kawakami
gcpug_okinawa_#2_hiroshi_kawakami
 

Más de yaegashi

Terraforming Windows Virtual Desktop Infrastructure on Azure
Terraforming Windows Virtual Desktop Infrastructure on AzureTerraforming Windows Virtual Desktop Infrastructure on Azure
Terraforming Windows Virtual Desktop Infrastructure on Azureyaegashi
 
Azure DevOps で実現する Unity アプリのハイパフォーマンス CI/CD
Azure DevOps で実現する Unity アプリのハイパフォーマンス CI/CDAzure DevOps で実現する Unity アプリのハイパフォーマンス CI/CD
Azure DevOps で実現する Unity アプリのハイパフォーマンス CI/CDyaegashi
 
Customazed CLI: カスタムVMイメージ作成支援ツール
Customazed CLI: カスタムVMイメージ作成支援ツールCustomazed CLI: カスタムVMイメージ作成支援ツール
Customazed CLI: カスタムVMイメージ作成支援ツールyaegashi
 
Goで作って配布するAzureコマンドラインユーティリティ
Goで作って配布するAzureコマンドラインユーティリティGoで作って配布するAzureコマンドラインユーティリティ
Goで作って配布するAzureコマンドラインユーティリティyaegashi
 
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築yaegashi
 
msgraph: Terraform provider for Microsoft Graph
msgraph: Terraform provider for Microsoft Graphmsgraph: Terraform provider for Microsoft Graph
msgraph: Terraform provider for Microsoft Graphyaegashi
 
go generate 完全入門
go generate 完全入門go generate 完全入門
go generate 完全入門yaegashi
 
msgraph.go: Go言語で Microsoft Graph プログラミング
msgraph.go: Go言語で Microsoft Graph プログラミングmsgraph.go: Go言語で Microsoft Graph プログラミング
msgraph.go: Go言語で Microsoft Graph プログラミングyaegashi
 
AnsibleでAzureの インフラを管理する話 + α
AnsibleでAzureの インフラを管理する話 + αAnsibleでAzureの インフラを管理する話 + α
AnsibleでAzureの インフラを管理する話 + αyaegashi
 
msgraph-sshpubkey
msgraph-sshpubkeymsgraph-sshpubkey
msgraph-sshpubkeyyaegashi
 
Microsoft Graph API Library for Go
Microsoft Graph API Library for GoMicrosoft Graph API Library for Go
Microsoft Graph API Library for Goyaegashi
 
golang binary hacks
golang binary hacksgolang binary hacks
golang binary hacksyaegashi
 
StackExchangeで見たシステムプログラミング案件
StackExchangeで見たシステムプログラミング案件StackExchangeで見たシステムプログラミング案件
StackExchangeで見たシステムプログラミング案件yaegashi
 
Ansible モジュール 作成・配布・貢献
Ansible モジュール 作成・配布・貢献Ansible モジュール 作成・配布・貢献
Ansible モジュール 作成・配布・貢献yaegashi
 

Más de yaegashi (14)

Terraforming Windows Virtual Desktop Infrastructure on Azure
Terraforming Windows Virtual Desktop Infrastructure on AzureTerraforming Windows Virtual Desktop Infrastructure on Azure
Terraforming Windows Virtual Desktop Infrastructure on Azure
 
Azure DevOps で実現する Unity アプリのハイパフォーマンス CI/CD
Azure DevOps で実現する Unity アプリのハイパフォーマンス CI/CDAzure DevOps で実現する Unity アプリのハイパフォーマンス CI/CD
Azure DevOps で実現する Unity アプリのハイパフォーマンス CI/CD
 
Customazed CLI: カスタムVMイメージ作成支援ツール
Customazed CLI: カスタムVMイメージ作成支援ツールCustomazed CLI: カスタムVMイメージ作成支援ツール
Customazed CLI: カスタムVMイメージ作成支援ツール
 
Goで作って配布するAzureコマンドラインユーティリティ
Goで作って配布するAzureコマンドラインユーティリティGoで作って配布するAzureコマンドラインユーティリティ
Goで作って配布するAzureコマンドラインユーティリティ
 
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
 
msgraph: Terraform provider for Microsoft Graph
msgraph: Terraform provider for Microsoft Graphmsgraph: Terraform provider for Microsoft Graph
msgraph: Terraform provider for Microsoft Graph
 
go generate 完全入門
go generate 完全入門go generate 完全入門
go generate 完全入門
 
msgraph.go: Go言語で Microsoft Graph プログラミング
msgraph.go: Go言語で Microsoft Graph プログラミングmsgraph.go: Go言語で Microsoft Graph プログラミング
msgraph.go: Go言語で Microsoft Graph プログラミング
 
AnsibleでAzureの インフラを管理する話 + α
AnsibleでAzureの インフラを管理する話 + αAnsibleでAzureの インフラを管理する話 + α
AnsibleでAzureの インフラを管理する話 + α
 
msgraph-sshpubkey
msgraph-sshpubkeymsgraph-sshpubkey
msgraph-sshpubkey
 
Microsoft Graph API Library for Go
Microsoft Graph API Library for GoMicrosoft Graph API Library for Go
Microsoft Graph API Library for Go
 
golang binary hacks
golang binary hacksgolang binary hacks
golang binary hacks
 
StackExchangeで見たシステムプログラミング案件
StackExchangeで見たシステムプログラミング案件StackExchangeで見たシステムプログラミング案件
StackExchangeで見たシステムプログラミング案件
 
Ansible モジュール 作成・配布・貢献
Ansible モジュール 作成・配布・貢献Ansible モジュール 作成・配布・貢献
Ansible モジュール 作成・配布・貢献
 

Último

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 

Último (9)

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 

Raspberry Pi + Go で IoT した話

  • 1. Raspberry Pi + Go で IoT した話 2019-09-25 Takeshi Yaegashi golang.tokyo #26
  • 2. 自己紹介 八重樫 剛史 Takeshi Yaegashi ● 株式会社バンダイナムコスタジオ所属 ● Linux・Unix・OSS・低レベルなことが好きなエンジニア ● ホームページ・ブログ https://l0w.dev ● Go のお仕事 ○ Raspberry Pi を使った IoT 案件 ○ スマホゲームアプリのサーバ ● Go のお話 ○ golang.tokyo #25「golang binary hacks」 ○ Go Conference 2019 Autumn「MS Graph API Library for Go (仮)」
  • 3. Raspberry Pi + Go で IoT した事例を紹介します ※ 2018年の事例です。案件について具体的なお話はできません。申しわけありません。 本日のお話 Wi-Fi Router Cloud Services Edge DevicesThings
  • 4. IoT エッジデバイス・組み込みシステムの開発に適した Go 言語 ● マイコン用のクロスコンパイルが驚くほど簡単 $ GOARCH=arm GOARM=6 go get ./cmd/hello ● シングルバイナリが扱いやすい ● 言語レベルの並行処理サポート: goroutine, chan ● システム構築に使えるライブラリ、パッケージの充実 ○ 様々なネットワークプロトコルのサポート ○ Linux カーネルなどのシステムプログラミング 本日のお話の背景
  • 5. Raspberry Pi の GPIO・ストレージ・Wi-Fi を使ったデータ収集システム ● エッジデバイス (Raspberry Pi 0/1/2/3) ○ Wi-Fi によるインターネット接続 ○ GPIO などでイベント発生を監視、サーバに逐次送信 (MQTT) ○ サーバ接続不良時は発生イベントをMicroSDに蓄積、復旧時に再送 ○ ソフトウェアアップデートに対応 ● サーバ (AWS) ○ IoT + Lambda + DynamoDB (イベントデータ蓄積) ○ API Gateway + Lambda (デバイス登録APIなど) ○ S3 + CloudFront (アップデート配信) 事例紹介:システム概要
  • 6. 事例紹介:エッジデバイス (Raspberry Pi) のシステム構成 pigpiod MQTT wpa_ supplicant I/O System Event Queue (LevelDB) AWS IoT dhcpcd GPIO EthernetWi-Fi timedated timesyncd ClockMicroSD System Daemons Go Process Hardware 💡💡💡 Goroutine Library mutex chan named pipe unix socketD-Bus TLS
  • 7. 組み込み Linux システムを Go で動かす ● 組み込みシステム向けに改造した Raspbian stretch 上で動作 ○ 圧縮・耐障害ファイルシステム (squashfs + overlayfs) ○ 圧縮後のシステムイメージサイズは 100MB 程度 ● システムコンポーネントと仲良く ○ systemd, dhcpcd, wpa_supplicant などのデーモンを活用 ○ IPC (named pipe, unix socket, D-Bus) を利用して Go から制御 ● goroutine, chan の活用 ○ 基本はリソース専用 goroutine 割り当てと chan による相互通信・同期 ○ イベントキューは DB ライブラリ関数内部の mutex 同期を活用 事例紹介:エッジデバイスのシステム設計のポイント
  • 8. コンポーネント紹介:MQTT Eclipse Paho MQTT Go client ● https://github.com/eclipse/paho.mqtt.golang ● 定番の MQTT 通信ライブラリ ● X.509 証明書によりクライアントの認証 ● QoS=1 でサーバへのデータ到達を保証
  • 9. コンポーネント紹介:イベントキュー LevelDB によるイベントキューの実装 ● goleveldb - https://github.com/syndtr/goleveldb ○ LevelDB の Go による実装 ● goque - https://github.com/beeker1121/goque ○ goleveldb による stack/queue/priority queue ○ イベントキュー実装において参考にした ● DB 障害対策 ○ Micro SD に専用のパーティション・ファイルシステム (ext4) を作る ○ DB が壊れたら Recover() で修復、だめなら mkfs して初期化
  • 10. コンポーネント紹介:Wi-Fi 制御 wpa_supplicant / dhcpcd ● wpasupplicant - https://github.com/dpifke/golang-wpasupplicant ○ wpa_supplicant と unix socket で通信するライブラリ ○ WPAのSSID/PSKの設定やAPスキャンなどができる ● dhcpcd - WPA 接続が確立すると自動的に IP アドレスを取得してくれる ● この他、エッジデバイスの設置と運用を支援するため、定期的にAPスキャンを行い Wi-Fi電波情報をイベントキューに入れてサーバに送信している
  • 11. コンポーネント紹介:システム時刻設定 systemd-timedated / systemd-timesyncd ● システム時刻、タイムゾーン、NTP 設定は systemd により管理されている ● 基本的な NTP クライアントは systemd に内 蔵されている ● timedatectl - CLI ○ タイムゾーンや時刻設定に使用 ● godbus - https://github.com/godbus/dbus ○ D-Bus で制御することもできる $ timedatectl Local time: Wed 2019-09-25 05:03:11 JST Universal time: Tue 2019-09-24 20:03:11 UTC RTC time: n/a Time zone: Asia/Tokyo (JST, +0900) Network time on: yes NTP synchronized: yes RTC in local TZ: no $ timedatectl set-timezone Japan $ timedatectl set-ntp false $ timedatectl set-time "2019-09-25 19:00:00"
  • 12. コンポーネント紹介:GPIO 制御 pigpio による GPIO 制御 ● pigpio - http://abyz.me.uk/rpi/pigpio/ ○ Raspberry Pi の GPIO を内蔵ハードで制御する C 言語のライブラリ ○ PCM/PWM クロックと GPU DMA で高速・高精度・低負荷な入出力 ○ スクリプティングエンジン搭載 ● pigpiod - pigpio デーモン ○ 名前つきパイプやソケットで別プロセスから制御 ● pigs - pigpiod のクライアント CLI ● apt-get install pigpio でインストール可能
  • 13. コンポーネント紹介:GPIO 制御 # GPIO 5 状態読み取り $ pigs "R 5" 0 # GPIO 4 出力モード 500ms "1" パルス出力 $ pigs "M 4 W W 4 0" $ pigs "W 4 1 MILS 500 W 4 0" # GPIO 0-3 状態変化を /dev/pigpio0 に通知 $ pigs "NO" 0 $ pigs "NB 0 0x0000000F" $ cat /dev/pigpio0 @?2$8??!@*??;??!@9DK???!@B??B??!@QWrF??! pigpio スクリプト http://abyz.me.uk/rpi/pigpio/pigs.html
  • 14. コンポーネント紹介:GPIO 制御 pin, err := os.OpenFile("/dev/pigpio", os.O_RDWR, 0) if err != nil { return err} defer pin.Close() pout, err := os.Open("/dev/pigout") if err != nil { return err } defer pout.Close() pin.Write([]byte("W 4 1 MILS 500 W 4 0")) // 3命令のスクリプトを実行 buf := make([]byte, 128) // 3命令の実行結果を取得 n, err := pout.Read(buf) if err != nil { return err } fmt.Printf("%sn", string(buf[:n])) // "0n0n0n"を表示(成功×3) Go + pigpiod:named pipe (文字列) や socket (バイナリ)で制御可能
  • 15. コンポーネント紹介:GPIO 制御 Go + pigpiod:用途を選ぶが、はまれば非常に便利 ● 利点 ○ Go だけでは難しいレベルのリアルタイム I/O が可能になる ○ 全 GPIO 端子で解像度 5μs (200kHz) の入出力を実現 ○ 強力なスクリプトで様々な機能を実装可能 ■ チャタリング除去つきの入力パルス検出 ■ プロシージャによるインジケータLED自動点滅制御 ● 欠点 ○ 遅延が大きい (スクリプト制御は必ずコンテキストスイッチを伴う) ○ pigpiod の CPU 負荷が高い (3B+ で 7〜10%)
  • 16. コンポーネント紹介:GPIO 制御 その他の Go I/O ライブラリの紹介 ● gobot.io - https://gobot.io ○ Raspberry Pi 以外もサポートする汎用のライブラリ ○ メモリマップ I/O による低遅延な入出力 ● periph.io - https://periph.io ○ gobot.io と同様な汎用ライブラリ ○ 徹底した高速化・最適化 ○ pigpio のような GPU DMA 入出力を pure Go で実装 ○ 開発が活発、現時点で一番おすすめできるライブラリ
  • 17. まとめ Raspberry Pi + Go で IoT エッジデバイスを作った事例を紹介しました IoT や組み込みの分野で Go をもっと活用していきましょう!