ESP8266 NodeMCUでFreeRTOSを始める――初心者向け実践ガイド
筆者は最近、AliExpressで約4ドルのNodeMCUを購入しました。購入のきっかけは、「ESP8266がなぜこれほど話題になっているのか」を実際に自分の目で確かめてみたかったからです。
NodeMCUはオープンソースのIoTプラットフォームです。Espressif Systems製のWi-Fi SoC「ESP8266」上で動作するファームウェアと、ESP-12モジュールをベースとしたハードウェアで構成されています。

出典:ESP8266 Datasheet
Arduino UNOと比較すると、ESP8266はCPU性能と価格の両面で圧倒的な優位性があります。なんとArduinoより500%高速で、82%も安価です。さらにWi-Fi接続機能まで標準で備えています。
Espressifの公式サイトを訪れたときは、豊富なドキュメントやリソースが揃っていることに驚かされました。たとえば、AndroidアプリからESP8266をWi-Fiに接続させる仕組みもあります。アプリがSSIDとパスワードをパケットとして送信し、ESP8266がそれを検知して自動的に接続するというものです。これは「SmartConfig」と呼ばれ、Texas Instrumentsによって考案された技術です。
本記事では、Espressif RTOS SDKに含まれるSmartConfigサンプルのセットアップから実行までの手順を丁寧に解説します。
必要なもの
- ある程度スペックのあるPC
- ESP12-E搭載のNodeMCUボード
- VirtualBox(https://www.virtualbox.org/wiki/Downloads)
- Ubuntu Server LTS(https://www.ubuntu.com/download/server)
開発用にVirtualBoxを構成する
VirtualBoxのダウンロードとUbuntu Serverのインストール: 特別に難しい作業ではありませんが、不安であれば検索エンジンで調べるか、図解付きの手順ガイドを参照してください。OSインストールは覚えておいて損のないスキルです。(ヒント:VirtualBoxが仮想ディスクの選択を求めたら、「可変サイズ(Dynamically allocated)」を選び、50GB以上を割り当てておくと後々の手間を大幅に減らせます。)
仮想マシンからインターネットへアクセスできることを確認し、DNSサーバーを設定します。

マシンを右クリック → 設定 → ネットワーク
DNSサーバーの設定は、以下の例を参考にしてください。
例:dns-nameservers 8.8.8.8 8.8.4.4
Googleにpingが通れば準備完了です!
(任意)OpenSSHとSambaサーバーのインストール: 導入しておくと日々の作業が格段に楽になります。
(任意)ポートフォワーディングの有効化: 仮想マシンに直接SSH接続したい場合は設定しておきましょう。たとえば、ホストマシンの2222番ポートを仮想マシンの22番ポートにマッピングします。

ポートフォワーディングの有効化:設定 → ネットワーク → ポートフォワーディング
ポートフォワーディングを有効にすれば、ホストマシンから仮想マシンへ直接SSH接続できるようになります。

FIG1: ssh -p 2020 denis@localhost
注意:Windows環境の場合は、SSH接続にPuTTYが必要です。
NodeMCUを接続して認識を確認: NodeMCUを接続し、以下のコマンドを実行します。
tail -f /var/log/kern.log
デバイスが /dev/ttyUSB0 として認識されたことがログに表示されるはずです。何も表示されない場合は、USBデバイスを仮想マシンに追加する必要があります。追加後、デバイスを抜き差ししてください。

USBの追加:設定 → ポート → USB
ここまで順調に進んでいるならおめでとうございます!SDKのコンパイルとSmartConfigサンプルの実行準備が整いました。
SDKのコンパイルとボードへの書き込み
必要なパッケージのインストール: 以下のコマンドを実行します(この情報はSDKのreadme.mdにも記載されています)。
sudo apt-get install make unrar-free autoconf automake libtool gcc g++ gperf flex bison texinfo gawk ncurses-dev libexpat-dev python-dev python python-serial sed git unzip bash help2man wget bzip2 libtool-bin
作業フォルダを作成して移動:
mkdir Development && cd DevelopmentOpen SDKのクローン: https://github.com/pfalcon/esp-open-sdk
git clone --recursive https://github.com/pfalcon/esp-open-sdk.git
makeの実行:
make
注意:このステップは時間がかかるため、辛抱強く待ちましょう。 筆者の仮想マシンでは50分ほどかかりました。環境によって所要時間は前後しますが、実行前にインターネットに接続していることとDNSが正しく設定されていることを必ず確認してください。確認にはGoogleへのpingが最も簡単です(地域によってGoogleがブロックされている場合は、他のサイトで試してください)。

ping成功例:$ ping medium.com
pingが成功したら、ウィンドウを最小化してお気に入りのドラマでも楽しんでいましょう。約40分後に戻ってくればOKです(ただし、PCがスリープモードに入らないよう注意してください)。
SDKのビルドが成功すると、PATHに何かを追加するよう促すメッセージが表示されます。以下のコマンドを実行してください。
echo 'export PATH=/home/denis/Development/esp-open-sdk/xtensa-lx106-elf/bin:$PATH' >> ~/.profile
このコマンドは指定した文字列を~/.profileファイルに追記します。続けて以下を実行します。
xtensa-lx106-elf-gcc --version
バージョン情報が正しく表示されれば、ツールチェーンの導入は完了です!
ボードの動作テスト: NodeMCUを接続し、lsusbでデバイスが認識されているか確認します。その後、esptool.py chip_idを実行すると、ボードのチップIDが表示されます。

esptool.py chip_id の実行例
ESP8266_RTOS_SDKのクローン:
git clone https://github.com/espressif/ESP8266_RTOS_SDK.git
SDKパスとBINパスのエクスポート: 以下のコマンドを実行します。
echo 'export SDK_PATH=/home/denis/Development/ESP8266_RTOS_SDK' >> ~/.profile
echo 'export BIN_PATH=/home/denis/Development/ESP8266_RTOS_SDK/bin' >> ~/.profile
SmartConfigサンプルのコンパイル:
cd /home/denis/Development/ESP8266_RTOS_SDK/examples/smart_config/
chmod +x ./gen_misc.sh
./gen_misc.sh
スクリプトからの質問には、すべてデフォルト値のままEnterを押して進み、SPI_SIZE_MAPを尋ねられたら4を選択してください。NodeMCUのフラッシュサイズは32Mbit(=4MB)だからです。SPI_SPEEDは3(80MHz)を選んでも問題ありません。
以下のような出力が表示されれば成功です:
!!!SDK_PATH: /home/denis/Development/ESP8266_RTOS_SDK
BIN_PATH: /home/denis/Development/ESP8266_RTOS_SDK/bin
No boot needed.
Generate eagle.flash.bin and eagle.irom0text.bin successully in BIN_PATH
eagle.flash.bin — — — →0x00000
eagle.irom0text.bin — →0x20000!!!
ボードへの書き込み(フラッシュ):
cd $BIN_PATH
esptool.py erase_flash
esptool.py write_flash 0x00000 $BIN_PATH/eagle.flash.bin 0x20000 $BIN_PATH/eagle.irom0text.bin 0x3FC000 $BIN_PATH/esp_init_data_default.bin
書き込み後、ボードをリセットするとLEDの点滅が止まります。これでファームウェアが正常に動作しています。
スマートフォンアプリで接続する
- Androidアプリ
- iPhoneアプリ

Android端末でのスクリーンショット
アプリを開き、スマートフォンがWi-Fiアクセスポイントに接続していることを確認します。パスワードを入力して「確認」を押すと、数秒後にESP8266があなたのAPへ自動接続します。これで完成です。最後まで読み進めていただき、おめでとうございます!
ESP8266-RTOS-SDKを使ってさらに開発を進めたい方は、ぜひ公式サイトをチェックしてみてください。役立つリソースやドキュメントが数多く公開されています。また、SDKフォルダ内にある他のサンプルコードにも目を通すことで、学びが大きく広がるでしょう。
最後までお読みいただき、ありがとうございました。ご質問やご連絡はTwitter(MetonymyQT)までお気軽にどうぞ。
参考リソース
- ESP8266 Overview
- ESP8266 Resources
- FreeRTOS Website
freeCodeCampのオープンソースカリキュラムは、これまで40,000人以上の方が開発者として就職するきっかけとなっています。無料で学習をスタートしましょう。
-
古いWi-Fiルーターを中継機(リピーター)として再利用する方法|設定手順を徹底解説
テクノロジーの進化は止まることがなく、毎日のように新製品が登場し、インターネットへの接続といった日常的な作業をより快適にしてくれます。 そのため、すでに同じ機能を十分に果たしている機器が手元にあるにもかかわらず、新しい製品を購入してしまうのは珍しいことではありません。特にWi-Fiルーターは、より広いカバレッジと通信範囲を備えた新型モデルが定期的に発売されるため、買い替えの機会が多い製品です。 ここで問題になるのは、「古くなったけれどまだ使えるルーターをどうすればいいのか?」という点です。捨てる必要も、箱に入れて眠らせる必要もありません。むしろ、新しいルーターの性能を最大限に引き出すために大い
-
WiFi中継器(アンプ)とは?仕組み・種類・おすすめ製品を徹底解説【購入ガイド】
現代において、WiFiネットワークに常時接続しておくことは欠かせないものとなっています。しかし、自宅のWiFiネットワークに負荷がかかると、インターネットの速度が期待どおりに出ず、日常生活が不便になってしまうことがあります。そんな悩みを解決してくれるのが「WiFi中継器(アンプ)」です。 この記事では、WiFi中継器とは何か、どんな用途があるのか、どのような仕組みで動作するのか、種類とおすすめ製品まで、わかりやすく解説します。これを読めば、あなたのWiFi環境を手軽に最大限に活用できるようになるでしょう。 WiFi中継器とは何か?その役割は? 多くの人々の日常生活を便利にし、快適に向上させて