Amazon FreeRTOSをざっくり説明すると…。

※この記事にはリアルタイムＯＳとはなにかといった技術的な話は少なめです。
# はじめに
ESP32には乗るけど、ESP8266には乗らないもの、なーんだ？

低電力小型エッジデバイスのプログラミング、デプロイ、管理を簡単にするマイコン向けのオープンソースのリアルタイムオペレーティングシステムで、IoT Core などのAWSクラウドサービスや、Linuxの乗った高性能Greengrassデバイスにセキュアに接続させることができるもの、これなんだ？

(参考：https://aws.amazon.com/jp/freertos/)

答えはFreeRTOSだ。

2021年現在すでに数十億台（！）世に出回っているといわれているIoTデバイスだが、そのほとんどはLinux等の高級OSが乗らないマイコン（マイクロコントローラー）だ。

# Amazon FreeRTOS誕生の歴史

今後拡大していくといわれているIoT市場でかれら「ちいさい奴ら」を押さえておく必要がある。FreeRTOSは彼らマイコンがAWSクラウドにセキュアに接続する方法としてはゼロからCやC++でプログラムを書いていくのに比べてより抽象化された、より扱いやすいOSを提供した（FreeRTOSで使える組込み関数：https://docs.aws.amazon.com/freertos/latest/lib-ref/index.html ）。ただ弱点だったのが

・サポートがなく詰まったらどうしようもないこと

・製品化したらソースコードを公開しなくてはいけないGPL V2というライセンス形式だった

ということだ。

参考：https://ameblo.jp/mongol-sky/entry-12339822220.html

そんな中でAmazonが2017年にFreeRTOSを買収してTCP/IPスタックを改良してAWSクラウドに繋ぎやすくし、Amazon Free RTOSとしてMITライセンスで無償公開したことは大きなニュースになった（※Greengrass発表と同じ年だ）。

参考：https://www.udemy.com/course/exploring-aws-iot/learn/lecture/10595108#overview

またマイコン大手Espressif社のESP32が2020年にFreeRTOSに対応してFreeRTOSはより手が届きやすい存在になった。

# AWSとAmazon FreeRTOSの関係

Amazon FreeRTOSに関して現在2021年6月30日の段階で気を付けるポイントは以下だ。

・対応しているボードがまだ少ない

・学習リソースがまだまだ充実していない

・そもそもメモリの制限等でFreeRTOSさえ乗らないマイコンも多い

### 学習リソースがまだまだ充実していない
Amazon FreeRTOSチームの開発者がYoutubeのAWS TechTalkで「マイコンでベアメタルCで開発したのは僕の中でworst nightmareだ」というような趣旨のことを言っていたが、じゃあAmazon FreeRTOSは簡単にESP32に乗ってすぐ動かせるのかというとまったくそんなことはない。ESP-IDFやらToolchainやらCMAKEやら、組込み系初心者にはハマりどころが結構ある（近いうちにまとめて記事にするつもりだ）。

ESP32の場合今のところ公式のドキュメントを読みながら、そして途中Espressif社の難解なドキュメントを読みながら一歩ずつ進めていくしかない（Espressif社の方は日本語対応していない）。
https://docs.aws.amazon.com/ja_jp/freertos/latest/userguide/getting_started_espressif.html
https://docs.espressif.com/projects/esp-idf/en/v3.3/get-started-cmake/windows-setup.html

いまのところ把握しているハマりどころは、ざっと上げただけで

・ESP-IDF v3.3でやる必要がある（v4.2ではだめ）
・途中でIDF_PATHを初期化する必要がある（これはAWS公式ドキュメントにも記載がある）
・無線LANを使う場合idf.pyやArduinoのモニタリング機能を使うと無線LANにつながらなくなる
・Python2でやる必要がある（MacOSでやる場合）
・Windowsでやる場合ESP-IDF3.3コマンドプロンプトでやる必要がある（GitBASH等ではだめ）

これくらいある。

AWS Forumを見るとまだ100件ほどしか質問がなく、なかなかの過疎っぷりだ…。
https://forums.aws.amazon.com/search.jspa?q=FreeRTOS&dateRange=all&searchID=13279987&rankBy=10001&start=0

ちなみに[こちら](https://forums.aws.amazon.com/thread.jspa?messageID=946645&#946645)の投稿を見ると、FreeRTOSチームが日常的にみているのは
https://forums.freertos.org/
と
https://github.com/aws/amazon-freertos
らしい。

こちらがFreeRTOSのForum。うむ、こちらも「おらこんな村いやだ」並みに過疎っている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001699/2e353ec8-293f-c3e4-67a7-55690995a8a1.png)

Githubのissueページ。ここでは少なくとも同じく心破れた同志たちには出会える。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001699/485f1628-96d9-67de-969a-14dbc24b5d43.png)


※ちなみにMacOS限定ではあるが、最近発売されたAWSJから出たIoTの本にはビルド法が割とわかりやすく載っていた。

https://www.amazon.co.jp/gp/product/4798064289/ref=ppx_yo_dt_b_asin_title_o00_s02?ie=UTF8&psc=1

### そもそもメモリの制限等でFreeRTOSさえ乗らないマイコンも多い
記事の最初にESP32（1000円マイコン）には乗ってESP8266（500円マイコン）には乗らないと書いたが、ESP32は「ちいさい奴ら」の世界では「大きいほう」で、FreeRTOSがそもそも性能的に乗りえないマイコンがたくさんあるということは覚えておいて損はない。

### FreeRTOSとAmazon Free RTOS
AWSのFree RTOS買収時はAmazon Free RTOSと読んでいたみたいだが、現在は呼び方を統一しているようだ。

>Q:Amazon FreeRTOS と FreeRTOS はどのような関係ですか?
2017 年以来、Amazon FreeRTOS は FreeRTOS プロジェクトの拡張であるため、顧客の混乱を減らすために 2 つの名前を統一しました。FreeRTOS プロジェクトには、追加の接続ライブラリ、セキュリティライブラリ、および IoT リファレンス統合が含まれるようになりました。

参考：https://aws.amazon.com/jp/freertos/faqs/

# 本当に必要なのか？
今のところFreeRTOSが輝くIoTのユースケースを見たことがなく、いまだにそのポテンシャルがよくわかっていないというのが、正直な感想だ。IoTでキーになるセキュリティスタックが最初から実装されている、コネクティビティスタックも云々…とよく書いてあるのをよく見るが、FreeRTOSを使うと省エネとセキュリティというIoTにおけるもっとも重要な2つの機能をどれくらい最適化できるのか？ただ単にセンサーデータを（例えばLoRa等のLPWA通信で）Greengrass Coreデバイス等のゲートウェイデバイスに送るだけなのにとても奥が深い。。このIoTにおける省エネとセキュリティをいかに「ちいさい奴ら」で実現するか、一番欲しい情報なのにいまいち情報が見つからないジレンマ。今後進展があり次第また記事にする予定でおります。

※ちなみにESP32の中でも自分はDevKitCを使っております。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001699/946a1bd7-3ec7-867f-2218-1cfa8c540ea3.png)