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
AWS Lambda と Amazon SQS で「わかった気になれる」FreeRTOS 入門
Search
SORACOM
PRO
October 12, 2024
Technology
2
780
AWS Lambda と Amazon SQS で「わかった気になれる」FreeRTOS 入門
2024年10月12日開催『
JAWS FESTA 2024 in 広島
』で、ソラコム松下(max)が発表した資料です。
SORACOM
PRO
October 12, 2024
Tweet
Share
More Decks by SORACOM
See All by SORACOM
投資家様向けビジネス概要
soracom
PRO
0
79
IoT でできること・取り組み方「後付け IoT」「組み込み IoT」と、IoTやSORACOMの仲間が共に学び交流するコミュニティ「SORACOM UG」
soracom
PRO
0
330
APIファーストで実現する運用性の高い IoT プラットフォーム: SORACOMのアプローチ
soracom
PRO
0
1.5k
IoTシステムの運用効率化に取り組もう! ― 回線管理とデバイス設定を自動化するための SORACOM API とプラットフォーム機能の活用
soracom
PRO
0
110
SORACOM のアーキテクチャと挑戦のフィールド
soracom
PRO
1
990
Technical Writing Meetup vol.39
soracom
PRO
2
980
今だからこそ振り返る、生成AIの基礎とこれからの使い道 ― デバイスから生成AIを使うには
soracom
PRO
0
72
【SORACOM UG】SORACOM におけるユーザーコミュニティの重要性とこれから
soracom
PRO
2
600
IoT とは?IoTプラットフォーム「SORACOM」の役割
soracom
PRO
0
460
Other Decks in Technology
See All in Technology
タイミーのデータモデリング事例と今後のチャレンジ
ttccddtoki
6
2.3k
モバイル界のMCPを考える
naoto33
0
410
SmartNewsにおける 1000+ノード規模 K8s基盤 でのコスト最適化 – Spot・Gravitonの大規模導入への挑戦
vsanna2
0
120
敢えて生成AIを使わないマネジメント業務
kzkmaeda
1
270
How Community Opened Global Doors
hiroramos4
PRO
1
140
「良さそう」と「とても良い」の間には 「良さそうだがホンマか」がたくさんある / 2025.07.01 LLM品質Night
smiyawaki0820
1
490
整頓のジレンマとの戦い〜Tidy First?で振り返る事業とキャリアの歩み〜/Fighting the tidiness dilemma〜Business and Career Milestones Reflected on in Tidy First?〜
bitkey
1
13k
怖くない!はじめてのClaude Code
shinya337
0
360
AI導入の理想と現実~コストと浸透〜
oprstchn
0
190
2025-07-06 QGIS初級ハンズオン「はじめてのQGIS」
kou_kita
0
150
Lambda Web Adapterについて自分なりに理解してみた
smt7174
6
160
Core Audio tapを使ったリアルタイム音声処理のお話
yuta0306
0
180
Featured
See All Featured
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
Music & Morning Musume
bryan
46
6.6k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
2.9k
Bash Introduction
62gerente
614
210k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Navigating Team Friction
lara
187
15k
Thoughts on Productivity
jonyablonski
69
4.7k
The Pragmatic Product Professional
lauravandoore
35
6.7k
How STYLIGHT went responsive
nonsquared
100
5.6k
Adopting Sorbet at Scale
ufuk
77
9.4k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
5
260
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.8k
Transcript
AWS Lambda と Amazon SQS で 「わかった気になれる」FreeRTOS 入門 Oct. 12,
2024 JAWS FESTA 2024 in 広島 株式会社ソラコム テクノロジー・エバンジェリスト 松下 享平 (Max / @ma2shita)
株式会社ソラコム テクノロジー・エバンジェリスト 松下 享平 (まつした こうへい) "Max" • 静岡県民 新幹線通勤族
• 講演や執筆を中心に活動、登壇数600以上/累計 • 経歴: 東証二部ハードウェアメーカーで情シス、 EC 事業、IoT 事業開発を経て2017年より現職 • 好きな言葉「論よりコード」 • X(旧Twitter): @ma2shita • 好きなサービス: • SORACOM Funnel • AWS IoT Core • Pixel 9 Pro にしました WiJG?, Public domain, via Wikimedia Commons NEW!! NEW!!
運営の皆さん、ありがとうです! はじめましての人も (^^)/ #jawsfesta2024 #jawsfesta #jawsug
bus.jawsfesta2024.jaws-ug.jp は IoT ! GPS マルチユニット SORACOM Edition IoT の仲間が集まるコミュニティ
#SORACOMUG
19 < 43 そげんこげんにいる お気軽に話してみて、喜ぶから!
【このセッションは】 を知っていれば 20分後に このコードが読める ※しらんけど ※端折ったコードです AWS Lambda Amazon Simple
Queue Service (Amazon SQS) #include <FreeRTOS.h> struct QUEUE_DATA { uint8_t count; }; void readTask(void *pvParameters) { QueueHandle_t xQueue = pvParameters; struct QUEUE_DATA queue_data; for (;;) { int32_t data = _incoming_data(); if (data > 0) { queue_data.count = data; xQueueSend(xQueue, queue_data); } } } void sendTask(void *pvParameters) { QueueHandle_t xQueue = pvParameters; struct QUEUE_DATA queue_data; for (;;) { xQueueReceive(xQueue, queue_data); int16_t cId = Wio.SocketOpen("uni.soracom.io"); Wio.SocketSend(cId, queue_data.count); } } void setup() { QueueHandle_t xQueue = xQueueCreate(1); xTaskCreate(readButtonTask, xQueue); xTaskCreate(senddataTask, xQueue); vTaskStartScheduler(); } void loop () {} ※ コードは簡略化してます。正しい引数は調べてくださいね
FreeRTOS オープンソースの 組み込みシステム向け OS • OS(カーネル)名でもあり、 プロジェクト名でもある ライセンスは MIT #include
<FreeRTOS.h> struct QUEUE_DATA { uint8_t count; }; void readTask(void *pvParameters) { QueueHandle_t xQueue = pvParameters; struct QUEUE_DATA queue_data; for (;;) { int32_t data = _incoming_data(); if (data > 0) { queue_data.count = data; xQueueSend(xQueue, queue_data); } } } void sendTask(void *pvParameters) { QueueHandle_t xQueue = pvParameters; struct QUEUE_DATA queue_data; for (;;) { xQueueReceive(xQueue, queue_data); int16_t cId = Wio.SocketOpen("uni.soracom.io"); Wio.SocketSend(cId, queue_data.count); } } void setup() { QueueHandle_t xQueue = xQueueCreate(1); xTaskCreate(readButtonTask, xQueue); xTaskCreate(senddataTask, xQueue); vTaskStartScheduler(); } void loop () {} ※ コードは簡略化してます。正しい引数は調べてくださいね
改めて問おう、OS の機能とは? リソース 管理 入力、出力、記憶、 演算、制御 利用者の代わりに やってくれる
setup() {} loop() { int32_t data = _incoming_from_sensor(); if (data
> 0) { int16_t cId = Wio.SocketOpen("uni.soracom.io"); Wio.SocketSend(cId, data); } } センサーからデータを 読み出し (データがあったら) データを送信 え?明らかに簡潔で、 こっちの方が良くね? OS が無いと、どうなる? #include <FreeRTOS.h> struct QUEUE_DATA { uint8_t count; }; void readTask(void *pvParameters) { QueueHandle_t xQueue = pvParameters; struct QUEUE_DATA queue_data; for (;;) { int32_t data = _incoming_data(); if (data > 0) { queue_data.count = data; xQueueSend(xQueue, queue_data); } } } void sendTask(void *pvParameters) { QueueHandle_t xQueue = pvParameters; struct QUEUE_DATA queue_data; for (;;) { xQueueReceive(xQueue, queue_data); int16_t cId = Wio.SocketOpen("uni.soracom.io"); Wio.SocketSend(cId, queue_data.count); } } void setup() { QueueHandle_t xQueue = xQueueCreate(1); xTaskCreate(readButtonTask, xQueue); xTaskCreate(senddataTask, xQueue); vTaskStartScheduler(); } void loop () {} Arduino 初学者が書くと…? ※ コードは簡略化してます。正しい引数は調べてくださいね
OS が無いと、どうなる? じゃあ、どうする? センサーの読み出しと、 データ送信を 非同期(マルチタスク) 化とか? setup() {} loop()
{ int32_t data = _incoming_data(); if (data > 0) { int16_t cId = Wio.SocketOpen("uni.soracom.io"); Wio.SocketSend(cId, data); } } 通信に時間がかかっちゃったら そこで試合終了(この間のデータが読めない)だよ! ※ コードは簡略化してます。正しい引数は調べてくださいね
AWS なら、簡単なのに Amazon SQS AWS Lambda 《受付処理》 AWS Cloud AWS
Lambda 《API 呼び出し処理》 読み取りタスク 送信タスク プロセス間通信 センサー マイコン こうならないかなぁ? なんやかんやのデータ 横道: Lambda Web Adapter 便利っすよね
そこで FreeRTOS #include <FreeRTOS.h> struct QUEUE_DATA { uint8_t count; };
void readTask(void *pvParameters) { QueueHandle_t xQueue = pvParameters; struct QUEUE_DATA queue_data; for (;;) { int32_t data = _incoming_data(); if (data > 0) { queue_data.count = data; xQueueSend(xQueue, queue_data); } } } void sendTask(void *pvParameters) { QueueHandle_t xQueue = pvParameters; struct QUEUE_DATA queue_data; for (;;) { xQueueReceive(xQueue, queue_data); int16_t cId = Wio.SocketOpen("uni.soracom.io"); Wio.SocketSend(cId, queue_data.count); } } void setup() { QueueHandle_t xQueue = xQueueCreate(1); xTaskCreate(readButtonTask, xQueue); xTaskCreate(senddataTask, xQueue); vTaskStartScheduler(); } void loop () {} このコードが、 すでに Amazon SQS + AWS Lambda なコード ※ コードは簡略化してます。正しい引数は調べてくださいね
書き換えてみよう! #include <FreeRTOS.h> struct QUEUE_DATA { uint8_t count; }; void
readTask(void *pvParameters) { queue_url = pvParameters; struct QUEUE_DATA queue_data; for (;;) { int32_t data = _incoming_data(); if (data > 0) { queue_data.count = data; xQueueSend(queue_url, queue_data); } } } void sendTask(void *pvParameters) { queue_url = pvParameters; struct QUEUE_DATA queue_data; for (;;) { xQueueReceive(queue_url, queue_data); int16_t cId = Wio.SocketOpen("uni.soracom.io"); Wio.SocketSend(cId, queue_data.count); } } void setup() { SQS MyQueue = xQueueCreate(1); xTaskCreate(readButtonTask, MyQueue); xTaskCreate(senddataTask, MyQueue); vTaskStartScheduler(); } void loop () {} キュー作成 1 (データがあったら) キューへ送信 3 Queue 着信の トリガー設定 2 readTask sendTask MyQueue マイコン おめでとうございます! もう、読めるようになりましたね! ※ コードは簡略化してます。正しい引数は調べてくださいね
どこが “OS” なの? xTaskCreate() は fork(3) vTaskStartScheduler() は fg(1) xHoge
vBar 等の関数は #include <FreeRTOS.h> = “組み込む” ことで、 OS の機能が使えるから 組み込み OS !! #include <FreeRTOS.h> struct QUEUE_DATA { uint8_t count; }; void readTask(void *pvParameters) { queue_url = pvParameters; struct QUEUE_DATA queue_data; for (;;) { int32_t data = _incoming_data(); if (data > 0) { queue_data.count = data; xQueueSend(queue_url, queue_data); } } } void sendTask(void *pvParameters) { queue_url = pvParameters; struct QUEUE_DATA queue_data; for (;;) { xQueueReceive(queue_url, queue_data); int16_t cId = Wio.SocketOpen("uni.soracom.io"); Wio.SocketSend(cId, queue_data.count); } } void setup() { SQS MyQueue = xQueueCreate(1); xTaskCreate(readButtonTask, MyQueue); xTaskCreate(senddataTask, MyQueue); vTaskStartScheduler(); } void loop () {} ※ コードは簡略化してます。正しい引数は調べてくださいね
実は、SORACOM Discovery 2024 の 「心が動いたボタン」の実装に使ってました!
AWS Lambda と Amazon SQS で わかった気になれる FreeRTOS Disclaimer: 雰囲気での紹介だからね
FreeRTOS の 25% くらい こんなもんじゃない! IoT に興味があったり、 「実はハードウェア屋だぜ」な方、 ぜひ声かけてくださいね! FreeRTOS
IoT の「つなぐ」を簡単に You Create. We Connect.