Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ESP32でSORACOM Arcつないでみた
Search
Kenta IDA
July 27, 2021
Programming
2
1.4k
ESP32でSORACOM Arcつないでみた
SORACOM UG Online #6 で発表した、ESP32でSORACOM Arcつないでみたの発表資料です。
Kenta IDA
July 27, 2021
Tweet
Share
More Decks by Kenta IDA
See All by Kenta IDA
日本の家電とMatterの世界
ciniml
0
340
Matter開発環境をざっくり眺める
ciniml
0
2.1k
組込みRustでも でかい?JSONを扱いたい!
ciniml
3
1.4k
ATOMDisplay_DisplayModule_M5Stack_UG_2023_Tokyo.pdf
ciniml
1
1.8k
Rusty Stack-chanのすすめ
ciniml
0
680
Raspberry Pi Picoデバッガ使用のすすめ
ciniml
0
2.2k
ベアメタル向けRust stdクレートの実装調査
ciniml
2
800
RustでCMSIS-DAP実装してみた。
ciniml
3
1.1k
技書博初出展してみた
ciniml
0
440
Other Decks in Programming
See All in Programming
俺流レスポンシブコーディング 2025
tak_dcxi
14
8.5k
認証・認可の基本を学ぼう前編
kouyuume
0
190
S3 VectorsとStrands Agentsを利用したAgentic RAGシステムの構築
tosuri13
6
300
大体よく分かるscala.collection.immutable.HashMap ~ Compressed Hash-Array Mapped Prefix-tree (CHAMP) ~
matsu_chara
1
220
CSC509 Lecture 14
javiergs
PRO
0
220
MAP, Jigsaw, Code Golf 振り返り会 by 関東Kaggler会|Jigsaw 15th Solution
hasibirok0
0
230
WebRTC、 綺麗に見るか滑らかに見るか
sublimer
1
160
Rediscover the Console - SymfonyCon Amsterdam 2025
chalasr
2
160
宅宅自以為的浪漫:跟 AI 一起為自己辦的研討會寫一個售票系統
eddie
0
490
Integrating WordPress and Symfony
alexandresalome
0
150
C-Shared Buildで突破するAI Agent バックテストの壁
po3rin
0
380
AIコーディングエージェント(Manus)
kondai24
0
160
Featured
See All Featured
[RailsConf 2023] Rails as a piece of cake
palkan
58
6.1k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
34k
A better future with KSS
kneath
240
18k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
[SF Ruby Conf 2025] Rails X
palkan
0
500
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.1k
Typedesign – Prime Four
hannesfritz
42
2.9k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
70k
Practical Orchestrator
shlominoach
190
11k
GitHub's CSS Performance
jonrohan
1032
470k
Reflections from 52 weeks, 52 projects
jeffersonlam
355
21k
Transcript
ESP32で SORACOM Arcつないでみた SORACOM UG ONLINE #6 2021/07/27 Kenta Ida
(@ciniml)
自己紹介 •井田 健太 (@ciniml) •仕事:FPGAの論理設計 •使用言語:C++, SystemVerilog, Rust, C# •組込みRust本の1割くらい書きました
(サンプルアプリ作ったり、デバッガ試したり)→ 2021/7/27 ESP32 SORACOM Arc で つないでみた 2
SORACOM Discovery 2021 Online 当日 2021/7/27 ESP32 SORACOM Arc で
つないでみた •SORACOM Arcが発表された • WireGuardによるVPNにて インターネットからSORACOMサービスに接続 •ESP32等で接続できるとおもしろいのでは? • ESP32: EspressifのWiFi+BT付きマイコン •ESP32向けWireGuard実装を探したが見つからず放置 3
およそ2週間後くらい facebookにて 2021/7/27 ESP32 SORACOM Arc で つないでみた 4
およそ2週間後くらい facebookにて 2021/7/27 ESP32 SORACOM Arc で つないでみた これは煽りに違いない やれってことですね!
5
もうちょっとくわしく 2021/7/27 ESP32 SORACOM Arc で つないでみた •lwIP(組込み向けIPスタック)向けWireGuard実装あり! • https://github.com/smartalock/wireguard-lwip
• 3条項BSDライセンス •ESP-IDF (ESP32公式フレームワーク) もlwIP使用 • Arduino core for the ESP32も同じ •動かせるのでは? 6
調整してみた結果をTweet 2021/7/27 ESP32 SORACOM Arc で つないでみた 7
やっぱばれた 2021/7/27 ESP32 SORACOM Arc で つないでみた 8
どういうこと? 2021/7/27 ESP32 SORACOM Arc で つないでみた • 100.127.100.127 (pong.soracom.io)
からのping応答 →SORACOM サービスにつながってる ESP-IDFの標準ログフォーマット (つまりESP32で動いている) 9
動かすためにやったこと(1) 2021/7/27 ESP32 SORACOM Arc で つないでみた •WireGuard for lwIPのIPv6有効版lwIP対応
• 基本的に ipaddr_t を使うように修正 • IPv4が必要な部分は適宜変換関数・マクロを呼ぶように修正 10
ビルド通った! 2021/7/27 ESP32 SORACOM Arc で つないでみた •ビルド通ったので動かしてみた •試しに自宅VPN用のWireGuardに接続 •つながった!
• が、Endpointにしかpingが届かない • VPN接続先ネットワーク内のホストに到達できず… •なんでだ? ESP32 スマート フォン WireGuard Endpoint (RPi4) インターネット 他のホスト 11
動かすためにやったこと(2) 2021/7/27 ESP32 SORACOM Arc で つないでみた •アプリ送信データがWiFiに直接流れる… •lwIPはルーティング機構が存在しない •
netif指定でsend: netif経由で送信 • それ以外: デフォルトnetif経由で送信 •WireGuard netifをデフォルトに変更 アプリ WireGuard netif WiFi netif send udp_sendto 修正前: デフォルト=WiFi アプリ WireGuard netif WiFi netif udp_sendto_netif(WiFi) send 修正前: デフォルト=WireGuard 12
動かすためにやったこと(3) 2021/7/27 ESP32 SORACOM Arc で つないでみた •WireGuardのハンドシェークは現在時刻を使用している •要求受信側はハンドシェーク時の時刻が 前回より進んでいない場合ハンドシェーク拒否
• RTCでの時刻保持やNTPでの時刻同期が必要 •今回はNTPで時刻同期するようにして対応 • ESP32 ArduinoではconfigTime関数呼び出すだけ 13
もうちょっと応用例 2021/7/27 ESP32 SORACOM Arc で つないでみた •pingは面白くないのでHarvest Dataにデータ投げる例 ESP32
uptime (起動後経過時間) [ms] count (送信回数) 64[bit] = 8[byte] 2つ =16[byte] バイナリ { "uptime":1016378, "count":201, "imsi":"...", "name":"", "location":null, "timestamp":1627205656599 } OrbitでJSONに変換 Harvest Dataに投入 14
もうちょっと応用例 2021/7/27 ESP32 SORACOM Arc で つないでみた •Harvestで結果確認 15
Arduino Library化 2021/7/27 ESP32 SORACOM Arc で つないでみた •WireGuard IF部分を
ESP32用にArduino Library化 •Arcでuptime送信サンプル付き 16
Arduino Library化 2021/7/27 ESP32 SORACOM Arc で つないでみた • 使い方は簡単
• WireGuard型変数宣言 • NTP時刻調整 • WireGuard::begin呼び出し • ArcのJSONに含まれている 接続情報を引数で渡す • あとはWiFi同様に 通信処理を記述 // WireGuard configuration --- UPDATE this configuration from JSON char private_key[] = "(Private Key) "; // [Interface] PrivateKey IPAddress local_ip(1,2,3,4); // [Interface] Address char public_key[] = "(Public Key)"; // [Peer] PublicKey char endpoint_address[] = "link.arc.soracom.io"; // [Peer] Endpoint int endpoint_port = 11010; // [Peer] Endpoint ... static WireGuard wg; static HTTPClient httpClient; void setup() { Serial.begin(115200); Serial.println("Connecting to the AP..."); WiFi.begin(ssid, password); while( !WiFi.isConnected() ) { delay(1000); } Serial.println("Adjusting system time..."); configTime(9 * 60 * 60, 0, "ntp.jst.mfeed.ad.jp", "ntp.nict.jp", "time.google.com"); Serial.println("Connected. Initializing WireGuard..."); wg.begin( local_ip, private_key, endpoint_address, public_key, endpoint_port); } 17
現状の課題(1/2) 2021/7/27 ESP32 SORACOM Arc で つないでみた •乱数生成処理の妥当性 • WireGuard
for lwIPではサンプルでrand()を使って実装 • 必ず置き換えるようにとコード中にコメントあり • randは容易に推測可能なため •とりあえずESP32のハードウェア乱数 + mbedTLSのCTR-DRBG実装で乱数生成を実装 •専門ではないのでこれでいいのかよくわからん… • だれか詳しい人おしえてください。 18
現状の課題(2/2) 2021/7/27 ESP32 SORACOM Arc で つないでみた •WireGuard接続情報はスケッチにハードコード • 真面目に使うなら暗号化NVSに保存などが必要
19
未確認事項 2021/7/27 ESP32 SORACOM Arc で つないでみた •通信パフォーマンスがどれくらいか不明 • 余裕があったらiperfサンプルあたり動かしたい
• ESP32向け最適化の余地があるかも 20
ソースコードなど 2021/7/27 ESP32 SORACOM Arc で つないでみた •https://github.com/ciniml/WireGuard-ESP32-Arduino •https://github.com/ciniml/ESP32_WireGuard 21
おしまい 2021/7/27 ESP32 SORACOM Arc で つないでみた 22