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.4k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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(ソラコム)
基調講演:人とAIをつなぐIoTの今と未来 ー 「フィジカル」と「デジタル」が出会うその先へ【SORACOM Discovery 2026】
soracom
PRO
0
430
CTOキーノート:AI時代の「つなぐ」を再定義 ― 真のIoTとリアルワールドAI【SORACOM Discovery 2026】
soracom
PRO
0
440
カメラ×AIで挑む「ホワイト物流」― 車両管理、自動化の壁と突破口【SORACOM Discovery 2026】
soracom
PRO
0
210
AIと人が繋ぐ顧客体験:チカクが実践するLINE×Wisora活用事例【SORACOM Discovery 2026】
soracom
PRO
0
120
サイズと機能の壁を打破!みてねGPSが挑むiSIM活用秘話【SORACOM Discovery 2026】
soracom
PRO
0
120
人手不足への挑戦:車両保全を支えるIoTとクラウド内製化の道【SORACOM Discovery 2026】
soracom
PRO
0
200
GMOフィナンシャルゲートが挑む、「止まらない」決済インフラ構築の裏側【SORACOM Discovery 2026】
soracom
PRO
0
140
害獣害虫を自動判別! ペストコントロール支援ビジネス成功のヒント【SORACOM Discovery 2026】
soracom
PRO
0
150
移動の壁をなくし、ボーダレスな社会へ!UNI-ONE開発秘話と実践【SORACOM Discovery 2026】
soracom
PRO
0
120
Other Decks in Technology
See All in Technology
FORENSIA: ローカルLLMフォレンジックハーネス
sumeshi
2
380
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
4
24k
AWS ネットワーク構築でハマった(ハマりかけた) 5選とそこから得た教訓
nagisa53
4
210
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
19k
MIRU 2026 チュートリアル
keisuke198619
0
910
Forza Horizon 6 のテレメトリ機能で 自動運転に使えそうな学習データを集める話
henjin0
0
170
SO-101×VLAによる3色キューブのピック&プレース
abeja
0
190
PLATEAU で バーチャル花火大会
tatsuya1970
0
150
JavaScript 研修 (2026)
recruitengineers
PRO
2
530
LanceDB入門
mocobeta
7
410
サイバー捜査員研修(後半)
nomizone
1
860
Service Connect 上のサービスに ECS Service の外側から到達できなかった話
ota1022
1
230
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.5k
RailsConf 2023
tenderlove
30
1.5k
How GitHub (no longer) Works
holman
316
150k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
400
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
Designing for Timeless Needs
cassininazir
1
440
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
My Coaching Mixtape
mlcsv
0
220
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
460
Statistics for Hackers
jakevdp
799
230k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
490
Marketing to machines
jonoalderson
1
5.7k
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.