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
1.3k
2
Share
AWS Lambda と Amazon SQS で「わかった気になれる」FreeRTOS 入門
2024年10月12日開催『
JAWS FESTA 2024 in 広島
』で、ソラコム松下(max)が発表した資料です。
SORACOM(ソラコム)
PRO
October 12, 2024
More Decks by SORACOM(ソラコム)
See All by SORACOM(ソラコム)
益田のみんなにも知ってもらいたい!IoT と SORACOM【SORACOM UG 広島 #11 × IWAMI TECH COMMONS】
soracom
PRO
0
97
Business Overview for Investors [May 2026 Edition]
soracom
PRO
0
73
投資家様向けビジネス概要<2026年5月版>
soracom
PRO
0
220
IoT活用の今を知る!現場の最新事例20選を紹介
soracom
PRO
0
400
15分でわかる「フィジカルAI」今知っておきたい基礎と今後の活用のカギとは
soracom
PRO
0
450
モノ売りとコト売りを両立!成功事例に学ぶ、顧客接点を生むビジネス変革とIoTの関係
soracom
PRO
0
320
セルラー通信に不可欠な「SIM」を知ろう!
soracom
PRO
0
41
事例で知る位置情報活用の今とAI×IoTがひらく社会の変化 | 人流データ活用普及イベント~人流データから始まる、まちづくりの新しい一歩~
soracom
PRO
0
35
投資家様向けビジネス概要<2026年2月版>
soracom
PRO
0
490
Other Decks in Technology
See All in Technology
AI-DLCを活用した高品質・安全なAI駆動開発実践 / AI Driven Development
yoshidashingo
1
350
さきさん文庫の書籍ができるまで
sakiengineer
0
360
ChatworkとBPaaS 異なる特性で学んだAI機能開発の ベストプラクティス
kubell_hr
2
2.7k
LLMを「主役」にしないための 3つの原則
techtekt
PRO
0
110
ITエンジニアを取り巻く環境とキャリアパス / A career path for Japanese IT engineers
takatama
4
1.8k
探して_入れて_作って_使う_Agent_Skills___LT.pdf
peintangos
2
160
Platform Engineering as a Product: Criteria for Improvement and Multi-Tenant Design
kumorn5s
0
500
美味しいスイスチーズを作ろう🧀🐭
taigamikami
1
230
Javaコミュニティをもっと楽しむための9箇条
takasyou
0
1.3k
TypeScript Compiler APIとPHP-Parserを活用し、TypeScriptとPHPで型を共有する
shuta13
0
360
【Gen-AX】20260530開催_JJUG CCC 2026 Spring
genax
0
420
ルールやカスタム機能、どう使う?理想の出力を引き出すために今知りたいIBM Bob 5つの機能
muehara
1
330
Featured
See All Featured
WCS-LA-2024
lcolladotor
0
620
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
240
Designing Powerful Visuals for Engaging Learning
tmiket
1
400
Chasing Engaging Ingredients in Design
codingconduct
0
210
Faster Mobile Websites
deanohume
310
31k
Technical Leadership for Architectural Decision Making
baasie
3
400
Heart Work Chapter 1 - Part 1
lfama
PRO
7
36k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
720
For a Future-Friendly Web
brad_frost
183
10k
Optimising Largest Contentful Paint
csswizardry
37
3.7k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
How to Ace a Technical Interview
jacobian
281
24k
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.