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を簡単に接続できます:

  1. USB経由でArduinoをコンピュータに接続します
  2. ArduinoのRESETをGNDに接続します:ホストプロセッサを無効にするために必要です。UART-USBモジュールのみが必要です
  3. ESPを接続します(ESP -> Arduino) 1. VCC -> 3.3V
  4. GND -> GND
  5. RX0 -> RX0(TXではない)
  6. TX0 -> TX
  7. 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つのオプションがあります:

  1. Dockerを使用し、すぐに使えるDockerイメージを利用する
  2. 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があなたのためにいくつかのツールを構築してくれたので、ソースからそれらをビルドする必要はありません。

これがその方法です:

  1. このリポジトリからESP RTOS SDKをクローンします。例のMakefileは/opt/ESP8266_RTOS_SDKフォルダーを探しますので、クローンしたリポジトリをこのフォルダーに置くか、例をビルドする前にそのパスを変更します(下記参照)。
  2. この公開フォルダーからxtensa-lx106-elf.tar.bz2をダウンロードします。
  3. xtensa-lx106-elf.tar.bz2ファイルを解凍します。たとえば、/optフォルダーに:

sudo tar -xvf xtensa-lx106-elf.tar.bz2 -C /opt

  1. 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の機能を発見してください。

パンクスは死なない!

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。