Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Swiftで広がるIoTの世界:Embedded Swiftを試してみよう!
Search
tussy5969
December 06, 2024
0
63
Swiftで広がるIoTの世界:Embedded Swiftを試してみよう!
tussy5969
December 06, 2024
Tweet
Share
More Decks by tussy5969
See All by tussy5969
Embedded Swift & Matterでスマートホーム対応デバイスを操作してみよう!
tussy5969
0
60
Featured
See All Featured
Automating Front-end Workflow
addyosmani
1371
200k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Embracing the Ebb and Flow
colly
88
4.8k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.1k
A designer walks into a library…
pauljervisheath
209
24k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Visualization
eitanlees
148
16k
Side Projects
sachag
455
43k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.2k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.6k
How to Ace a Technical Interview
jacobian
280
24k
The Cost Of JavaScript in 2023
addyosmani
53
9k
Transcript
宮地 篤 士 / @tussy5969 Chiba.swift #2 Swiftで広がるIoTの世界: Embedded Swiftを試してみよう!
自 己 紹介 宮地 篤 士 / @tussy5969 • LINEヤフー株式会社
iOSエンジニア • マップサービスの開発 • 船橋市在住 • 高 知→奈良→埼 玉 →千葉と移ってきました • 趣味: 弓 道、DIY、登 山
IoT(デバイス)開発したことありますか?
IoT(デバイス)開発するときはどんな 言 語を使いますか? Python C 言 語 Java
Swiftでも可能! Python C 言 語 Java IoT(デバイス)開発するときはどんな 言 語を使いますか?
Embedded Swift
Embedded Swift • 組み込み開発向けのSwiftサブセット 言 語 • WWDC2024のSwiftの新機能で紹介されている
Embedded Swift • 組み込み開発向けのSwiftサブセット 言 語 • メモリが限られているデバイス上でSwiftコードを動作させることが可能 • Swiftの
一 部の 言 語機能や標準ライブラリの使 用 を制限して、コードサイズを 大 幅に縮 小 Swift Embedded Swift メモリ使 用 量 多い(MB単位) 少ない(KB単位) ランタイム依存 あり(動的機能をサポート) ない、または極 小 化 使 用 可能な標準ライブラリ 全て 一 部制限されている
• Embedded Swiftで使える🙆 • Array、Bool、Integer、Dictionary、Collection、Setなど • Embedded Swiftで使えない🙅 • Mirror
API(ランタイムリフレクション) 、Any(プロトコル型)、 Lazy Collections、weak referencesなど 詳しくは以下を参照👇 https://github.com/swiftlang/swift/blob/main/docs/EmbeddedSwift/ EmbeddedSwiftStatus.md Embedded Swiftでの使 用 制限
実際に動かしてみよう • 今回は公式が提供している「swift-embedded-examples」を参考 • https://github.com/apple/swift-embedded-examples • 使 用 するデバイス: ESP32C6
• 2.4GHz Wi-Fi6、Bluetooth5などとの接続が可能 • Matter対応 • 秋 月 電 子 で 税込 1,040円 • https://akizukidenshi.com/catalog/g/g129481/
実際に動かしてみよう • Lチカをやってみます • GPIO0ピンにLEDを接続 • 抵抗を経由してGNDに繋げる GPIO0 GND
実際に動かしてみよう 事前準備(ダウンロード) • ESP-IDF • ESP32向けの公式の開発フレームワーク • Swift Toolchain •
Embedded Swiftをビルドするために必要 • 通常のSwiftツールチェーンではなく、組み込みシステム向けに最適化され たものを使 用 する
実際に動かしてみよう ビルドをするために必要なファイル • BridgingHeader.h(変更なし) • C 言 語で書かれたベンダー製SDKを使うためのブリッジヘッダー • CMakeLists.txt
(変更なし) • Swiftコードをビルドするための、CMakeロジック • Main.swift 👈 • 今回の実装を記述しているSwiftコード
実際に動かしてみよう • Main.swiftのコード ESP32のフレームワークで 用 意 されている関数を使 用 • gpio_reset_pin
• gpio_set_direction • gpio_set_level • vTaskDelay
実際に動かしてみよう • ビルドから実 行 まで Lチカ💡
Matterを使ってホームアプリから制御してみる Matterとは? • スマートホーム機器向けのオープンソース共通規格 • WWDC2021で紹介されている • プラットフォーム超えてIoT機器間のシームレスな通信を可能にする • Matter対応のデバイスはAppleのホームアプリから操作可能
• (ただ、 日 本のスマートホーム機器では対応機種がまだ少ない状況…
Matterを使ってホームアプリから制御してみる Matterとは? • スマートホーム機器向けのオープンソース共通規格 • WWDC2021で紹介されている • プラットフォーム超えてIoT機器間のシームレスな通信を可能にする • Matter対応のデバイスはAppleのホームアプリから操作可能
• (ただ、 日 本のスマートホーム機器では対応機種がまだ少ない状況…) • ESP32C6はMatter対応! → ホームアプリからESP32C6に接続されているLEDを制御できる
Matterを使ってホームアプリから制御してみる
Matterを使ってホームアプリから制御してみる こちらも公式がチュートリアルを提供している • やること • デバイスをWi f に接続 • Toolchain,
ESP-IDFのインストール • ESP-Matterのインストール • Matterプロトコルをサポートするフレームワーク • Dockerで環境構築も可能 • 30GB程度使 用 😇
Matterを使ってホームアプリから制御してみる Main.swiftのコード
• ビルドの流れは先ほどと同様 Matterを使ってホームアプリから制御してみる
Matterを使ってホームアプリから制御してみる • 初回はアクセサリを登録する必要がある(登録済み) • 明るさを制御することも可能になった!
まとめ • Embedded Swiftの紹介 • まずはチュートリアルにあるLED制御を試してみた • 他のセンサ類とかも試していきたい • Embedded
Swiftは登場したばかりなので今後の発展に期待しましょう!
参考 文 献 • https://developer.apple.com/videos/play/wwdc2024/10197 • https://github.com/swiftlang/swift/blob/main/docs/EmbeddedSwift/ EmbeddedSwiftStatus.md • https://github.com/apple/swift-embedded-examples
• https://github.com/apple/swift-matter-examples • https://speakerdeck.com/yochidros/raspberry-pi-pico-woswiftdecao-zuo- suru
ありがとうございました
補 足 コード
PWM制御によるLEDの明るさ設定
Matterのノードとエンドポイント設定(サンプルコードより)