ESP8266開発 · 2 min read · Jan 20, 2026
LinuxでMongooseを使用してESP8266のネットワークアプリケーションを開発する
ESP8266チップのネットワークアプリケーションをLinuxでMongoose Embedded Web Serverを使用して開発する方法について説明します。私はUbuntuを使用しますが、すべてのことは他のLinuxディストリビューションにも簡単に適応できます。
誰が誰
この記事を読み始めたので、Linux、ESP8266、Mongooseについて知っていると思います。したがって、簡単なイントロだけです。
ESP8266
Expressifによって開発された、統合WiFiを備えた低価格のチップです。詳細を知りたい場合は、公式サイトをチェックしてください。
Mongoose
Mongooseは、Cesantaによって開発された40kB未満のコアを持つ完全なマルチプロトコルライブラリです。Cesantaのサイトで詳細情報を見つけてください。
Linux
本当に? :-)
ESP8266をコンピュータに接続する
まず、ESP8266チップをコンピュータに接続する必要があります。いくつかの方法があります。
NodeMCU
NodeMCUモジュールがある場合、オンボードのUART-USBコンバータを使用して、モジュールをUSB経由でコンピュータに接続するだけです。KISS!
外部UART-USBコンバータで接続
ESPモジュールに内部UART-USBコンバータがない場合は、外部のものが必要です。たくさんのものがあります - グーグルで検索してください。
Linuxで動作するもの(基本的にほとんどのもの)を選択し、3.3Vピンがあることを確認してください。そして、ほとんどのUART-USBコンバータには3.3Vと5Vの両方のピンがありますが、ESPを5Vピンに接続してはいけません。このデバイスは電圧耐性がなく、モジュールが焼き切れる可能性があります。
次に接続します(ESP -> コンバータ):
VCC -> 3.3V
GND -> GND
RX0 -> TX(RXではない)
TX0 -> RX
CH_PD -> 3.3V
Arduinoで接続
UART-USBコンバータがないが、3.3Vピンを持つArduinoがある場合は、それを使用してESPを簡単に接続できます:
- USB経由でArduinoをコンピュータに接続します
- ArduinoのRESETをGNDに接続します:ホストプロセッサを無効にするために必要です。UART-USBモジュールのみが必要です
- ESPを接続します(ESP -> Arduino) 1. VCC -> 3.3V
- GND -> GND
- RX0 -> RX0(TXではない)
- TX0 -> TX
- CH_PD -> 3.3V
接続の確認
接続が正常であれば、ESPは新しいttyデバイスとして表示されるはずです。通常、NodeMCUとUART-USBコンバータ経由で接続されたESPは/dev/ttyUSBx(x = 0, 1, 2など)として表示され、Arduinoのバージョンは/dev/ttyACMx(x = 0, 1, 2など)として表示されます。
dmesg | grep usbコマンドを使用してデバイスを見つけることができます。
たとえば、NodeMCUの接続後に次のようなものが表示されます:
[ 1496.765417] usb 2-3.3: new full-speed USB device number 15 using xhci_hcd[ 1496.867729] usb 2-3.3: New USB device found, idVendor=10c4, idProduct=ea60[ 1496.867736] usb 2-3.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3[ 1496.867740] usb 2-3.3: Product: CP2102 USB to UART Bridge Controller[ 1496.867743] usb 2-3.3: Manufacturer: Silicon Labs[ 1496.867745] usb 2-3.3: SerialNumber: 4202[ 1497.900384] usbcore: registered new interface driver usbserial[ 1497.900423] usbcore: registered new interface driver usbserial_generic[ 1497.900457] usbserial: USB Serial support registered for generic[ 1497.903897] usbcore: registered new interface driver cp210x[ 1497.903989] usbserial: USB Serial support registered for cp210x[ 1497.904382] usb 2-3.3: cp210x converter now attached to ttyUSB0ご覧のとおり、NodeMCUは現在/dev/ttyUSB0として利用可能です。
最終確認として、任意のターミナルを使用して新しいデバイスに接続します。私はpicocomを使用します。これは軽量のターミナルです。Ubuntuでは、次のコマンドでインストールできます:
sudo apt install picocom試してみてください:
picocom /dev/ttyUSB0 -b 115200すべてが正常であれば、picocomの出力に「 Terminal ready 」と表示されるはずです。
「アクセス拒否」エラーの修正
picocomが「アクセス拒否」と表示する場合、通常は現在のユーザーがdialoutグループのメンバーでないことを意味します。Linuxでは、シリアルポートにアクセスするにはユーザーがこのグループのメンバーである必要があります。
次のコマンドを実行します:
sudo usermod -aG docker $USERログアウトして再度ログインし、ESPに再接続してみてください。「アクセス拒否」は解消されるはずです。
Mongooseのビルド
最新のMongooseリリースをここからダウンロードします。
MongooseにはESP8266とRTOS SDKの例が付属しています。チュートリアルとサンプルコードはここにあります。
注意:ESP8266には2つのSDKバージョンがあります。最初は非OSで、2番目はRTOSベースです。この記事では後者を使用します。これらの違いを知りたい場合は、グーグルで検索するか、公式フォーラムのこの回答を読んでください。
例をビルドするには、2つのオプションがあります:
- Dockerを使用し、すぐに使えるDockerイメージを利用する
- SDKとツールチェーンをコンピュータにインストールする
Dockerを使用する
これは簡単で、私はこれがより良い方法だと思います。CesantaのDockerイメージには、ESP用のMongooseをビルドするために必要なすべてが含まれています(Mongooseだけでなく、任意のESPアプリケーションも)。したがって、ローカルにソフトウェアをインストールする必要がなく、友人や同僚とコードを簡単に共有できるため、彼らもあなたのファームウェアをビルドし、正確に同じ結果を得ることができます。
Dockerのインストールガイドはここにあります。試してみてください。本当に簡単です。LinuxにDockerリポジトリを追加し、通常のプログラムとしてaptでインストールするだけです。
Dockerがインストールされたら、mongoose/examples/ESP8266_RTOSフォルダーに移動し、build.shを実行します。
最初のビルドでは、Dockerが必要なイメージをダウンロードします。インターネットの速度によっては、少し時間がかかる場合があります。しかし、build.shが完了すると、./binフォルダーに2つの.binファイルが見つかります。
それがファームウェアです。あなたはこれをやりました!
ローカルSDKを使用する
Dockerが簡単すぎる場合や、何らかの理由でローカルにインストールされたツールを使用したい場合も、それが可能です。
少し難しくて退屈ですが、特にCesantaがあなたのためにいくつかのツールを構築してくれたので、ソースからそれらをビルドする必要はありません。
これがその方法です:
- このリポジトリからESP RTOS SDKをクローンします。例のMakefileは/opt/ESP8266_RTOS_SDKフォルダーを探しますので、クローンしたリポジトリをこのフォルダーに置くか、例をビルドする前にそのパスを変更します(下記参照)。
- この公開フォルダーからxtensa-lx106-elf.tar.bz2をダウンロードします。
- xtensa-lx106-elf.tar.bz2ファイルを解凍します。たとえば、/optフォルダーに:
sudo tar -xvf xtensa-lx106-elf.tar.bz2 -C /opt
- PATH変数を変更します。たとえば、ツールチェーンを/optフォルダーに解凍した場合、次のコマンドを使用します:
export PATH=/opt/xtensa-lx106-elf/bin:$PATH
(このコマンドを.bashrcまたは.profileフォルダーに追加して、システム再起動後も変更を保持することをお勧めします)
次に実行します:
$ export SDK_PATH=/opt/ESP8266_RTOS_SDK # SDKへのパスをここに入力$ export BIN_PATH=./bin; mkdir ./bin$ make clean; make BOOT=none APP=0 SPI_SPEED=40 SPI_MODE=dio SPI_SIZE_MAP=0これで、すべてが正しくインストールされていれば、ファームウェアが./binフォルダーにあります。
あなたは再びそれをやりました!
ESPのフラッシング
ESP8266をフラッシュするためのツールがたくさんあります。私たちはesptoolを使用します。これを使用するには、このリポジトリをクローンし、esptool.pyへのパスをPATH変数に追加します(これはオプションで、便利です)。
次に、まだ接続されている場合はpicocomを切断します(ヒント:Ctrl+A; Ctrl+Dを押して終了します)そして、次を実行します:
esptool.py --port /dev/ttyUSB0 --baud 230400 \
write_flash --flash_mode=dio --flash_size=4m \
0x00000 ${BIN_PATH}/eagle.flash.bin \
0x20000 ${BIN_PATH}/eagle.irom0text.bin \
0x7e000 ${SDK_PATH}/bin/esp_init_data_default.bin重要な注意:モジュールがNodeMCUでない場合、フラッシュする前にGPIO0を接地する必要があります(GPIO0を接地するとモジュールがフラッシュモードに切り替わります)。フラッシュ後は、GPIO0を接地から外し、ESPを再起動します。
エラーが発生しなければ、次のような出力が表示されます:
Connecting...
Erasing flash...
Took 0.58s to erase flash block
Wrote 35840 bytes at 0x00000000 in 1.8 seconds (157.5 kbit/s)...
Erasing flash...
Took 2.02s to erase flash block
Wrote 301056 bytes at 0x00020000 in 15.4 seconds (156.7 kbit/s)...
Erasing flash...
Took 0.11s to erase flash block
Wrote 1024 bytes at 0x0007e000 in 0.1 seconds (163.5 kbit/s)...
Leaving...準備完了!デバイスはあなたのファームウェアでフラッシュされました。
最初の結果
今、「Mongoose」というWiFiネットワークが表示されるはずです。例はAPを設定します。パスワード「Mongoose」を使用して接続し、次にhttp://192.168.4.1/に移動すると、「Hello, world」挨拶ページが表示されます。
おめでとうございます!ESP8266でWebサーバーを実行しました!
次のステップ
次のステップはあなた次第です。説明した例を出発点として使用できます。
そのuser_main.cファイルを見てください。WiFiアクセスポイントを設定し、Webサーバーを起動します。APモードをステーションモードに変更して(あなたのWiFiネットワークに接続)、Mongoose APIを使用して好きなものを実装できます。これはMongooseを使用する一般的な方法ですので、別のMongooseの例を使用してプログラムを構築し、ESPデバイスでhttp、tcp、udp、mqttなどの機能を持つことができます。
Espressifの文書(たとえば、これ)を使用してESP8266 WiFiモジュール(WiFiだけでなく)を制御する方法を学び、Mongooseのドキュメントを使用してMongooseの機能を発見してください。
パンクスは死なない!
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。