GNU/Linux >> Linux の 問題 >  >> Linux

LinuxでMongooseを使用してESP8266のネットワークアプリケーションを開発する

LinuxでMongooseEmbeddedWebServerを使用してESP8266チップ用のネットワークアプリケーションの開発を開始する方法について説明しましょう。私はUbuntuを使用しますが、すべてのものをLinuxディストリビューションに簡単に適合させることができます。

誰が誰ですか

この記事を読み始めてから、Linux、ESP8266、Mongooseについて知っていると思います。短いイントロだけです。

ESP8266

Expressifによって開発されたWiFiが統合された安価なチップ。詳細については、公式サイトをご覧ください。

マングース

Mongooseは、Cesantaによって開発された40kB未満のコアを備えた完全なマルチプロトコルライブラリです。 Cesantaサイトでそれに関するモード情報を見つけてください。

Linux

本当に? :-)

ESP8266をコンピューターに接続する

さて、最初に行う必要があるのは、ESP8266チップをコンピューターに接続することです。いくつかの方法でそれを行うことができます。

NodeMCU

NodeMCUモジュールがあり、オンボードUART-USBコンバーターを使用している場合は、モジュールをUSB経由でコンピューターに接続するだけです。キス!

外部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
    2. GND-> GND
    3. RX0-> RX0 (TXではない)
    4. TX0-> TX
    5. CH_PD-> 3.3V
接続の確認

接続に問題がない場合、ESPは新しいttyデバイスとして表示されます。通常、UART-USBコンバーターを介して接続されたNodeMCUと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出力に表示します。

「アクセスが拒否されました」エラーの修正

picocomが「アクセス拒否」と表示した場合、これは通常、現在のユーザーがダイヤルアウトのメンバーではないことを意味します。 グループ:Linuxでは、シリアルポートにアクセスするには、ユーザーはこのグループのメンバーである必要があります。

実行:

sudo usermod -aG docker $USER

コマンド、ログアウト、ログインし直して、ESPへの接続を再試行してください。 「アクセスが拒否されました」は削除する必要があります。

マングースの構築

ここから最新のマングースリリースをダウンロードします。

Mongooseには、ESP8266およびRTOSSDKの例が付属しています。ここGitHubにあります。

注:ESP8266には2つのバージョンのSDKがあります。 1つ目は非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は必要なイメージをダウンロードします。インターネットチャネルによっては、時間がかかる場合があります。ただし、./ binフォルダーでbuild.shが完了すると、2つの.binファイルが見つかります。

それがファームウェアです。あなたはこれをしました!

ローカルSDKの使用

Dockerが単純すぎる場合、または何らかの理由でローカルにインストールされたツールを使用したい場合は、それも実行できます。

少し難しくて退屈ですが、それほど複雑なことはありません。特に、Cesantaがあなたのためにいくつかのツールを構築し、ソースからそれらを構築する必要がないことを考えると。

仕組みは次のとおりです:

  1. このリポジトリからESPRTOSSDKのクローンを作成します。サンプルの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

  4. PATH変数を変更します。たとえば、ツールチェーンを/ optフォルダーに解凍した場合は、次のコマンドを使用します。

    export PATH =/ opt / xtensa-lx106-elf / bin:$ PATH

(また、システムの再起動後も変更を保持するために、このコマンドを.bashrcまたは.profileフォルダーに追加することをお勧めします)

今すぐ実行:

$ export SDK_PATH=/opt/ESP8266_RTOS_SDK  # Put your path to SDK here
$ 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を使用します 。これを使用するには、このリポジトリのクローンを作成し、PATH変数にesptool.pyへのパスを追加します(これはオプションであり、便利です)。

ここで、まだ接続されている場合は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…

準備!これで、デバイスがファームウェアでフラッシュされます。

最初の結果

これで、「マングース」WiFiネットワークが表示されるはずです。この例では、APを設定します。パスワード「Mongoose」を使用して接続し、http://192.168.4.1/に移動すると、「Hello、world」グリーティングページが表示されます。

おめでとう! ESP8266でWebサーバーを実行するだけです!

次のステップ

次のステップはあなた次第です。説明した例を出発点として使用できます。

そのuser_main.cを見てください ファイル。 WiFiアクセスポイントを設定し、Webサーバーを起動します。 APモードをステーションモードに簡単に変更して(そしてWiFiネットワークに接続して)、MongooseAPIを使用して必要なものを実装できます。これはMongooseを使用する一般的な方法であるため、別のMongooseの例を使用してプログラムを構築し、ESPデバイスにhttp、tcp、udp、mqttなどの機能を追加できます。

Espressifドキュメント(たとえば、これ)を使用して、ESP8266 WiFiモジュール(WiFiのみではない)をルール化する方法と、Mongooseドキュメントを使用してMongoose機能を検出します。

パンクは死んでいない!


Linux
  1. cronを使用してタスクをスケジュールするためのLinuxのヒント

  2. Linux用のPythonアプリケーションをパッケージ化する方法

  3. ネットワーク診断用の10のLinuxコマンド

  1. LinuxでAsciiDocを使用するための完全ガイド

  2. ネットワークのトラブルシューティングにSSツールを使用する

  3. Linux –現在のプロセスでネットワークの共有を解除する方法は?

  1. Linuxパッケージ管理のためのAppImageの使用

  2. Linuxでの使い捨てcronジョブにatを使用する

  3. Linux 用 SQLCMD での変数の使用