「モノのインターネット」用にNODEMCU ESP8266でプログラムを作成する機能

数か月前に、ESP8266チップの機能の研究を始めました。 当初、ほとんどのESP-01モジュールと同様に購入しましたが、その時点で、DEVKITおよびnodeMCUファームウェアの形式のESD-12モジュールに基づいて、VM LUAバージョン5.1.4が組み込まれた新しいソリューションをほぼ即座に見つけました(デバッグおよびOS *モジュールなし)

画像

美の世界に参加するには、いくつかの方法があります-「モノのインターネット」。 512 Kバイトのフラッシュ、UARTインターフェイス、ESPコンタクトのペアがあるESP-01モジュールを使用し、USBインターフェイスを追加してから、フラッシュをより大きなボリュームに再はんだ付けできます。 モジュールを完成させる欲求や能力はないが、すぐにプログラミングに参加してプログラミングを開始したい場合は、上記のDEVKITボードがあります。

10ドルのソリューション価格の違いを考慮すると、選択はあなた次第です。

このDEVKITモジュールの優れている点は何ですか?


まず 、マイクロUSBコネクタを備えたUART-USBインターフェイスが既に含まれています。 したがって、コンピューターに接続するには、USB-microUSBケーブルのみが必要です。

次に 、ESP8266で利用可能なすべての信号の出力があります。 さまざまなセンサーをモジュールに接続するための図を次に示します。



センサーをDEVKITボードの接点に接続するために、古いコンピューターのケーブルを使用して周辺機器(ディスク、CDROM、ポートなど)を接続しました。 プロジェクトでは-エンジンの周波数制御と発電所(ヒーターとスイッチ)のPID規制。

第三に、モジュールにはすでに4 MBのフラッシュがあり、NODEMCUには組み込みのspiffsファイルシステムがあります。

第4に 、クラウドから、またはUSB経由でファームウェアを更新できます。

5番目に、LUA上に多くのスクリプトを作成し、それらをファイルシステムに書き込むことができます。

次に、WIFIを介して、実行に必要なスクリプトを呼び出すことができます。

LUA拡張ライブラリには、次のモジュールが含まれています。

json、ファイル、タイマー、pwm、i2c、spi、1-wire、net、mqtt、coap、gpio、wifi、adc、uart、およびシステムapi。

ボード契約は、gpio、i2c、pwm向けにプログラムできます
整数または実数の形式の2つのファームウェアバージョンが利用可能です。

SIで開発をプログラムできることに注意してください。
しかし問題は、プログラムの各変更をデバッグするために、200 KBのファームウェアを収集し、約1分間モジュールにロードする必要があることです。 つまり どのくらいの間違い-非常に多くの分。

別の方法は、LUA上のモジュールをデバッグし、続いて(必要に応じて)LUAのC APIを使用してそれらをSIに転送することです(実際にこれを行います)。

1つのエラーは約1〜2 KBで、ロードは1〜2秒です。 つまり ミスの数-非常に多くの秒。

このモジュールの欠点は何ですか?


主な欠点は、VM LUAがチップのメインメモリにのみあるLUAスクリプトを実行することです。 また、スクリプト用のこのメモリはわずか20 Kバイトです。 このメモリ量は、約110行でスクリプトを実行するのに十分です。
したがって、このモジュール用の比較的大きなスクリプトの作成には独自の特性があります。

まず 、アルゴリズムを線形ブロックに分割する必要があります。
次に 、これらのブロックをモジュールファイルシステムの個別のファイルに書き込みます
3番目に 、dofile演算子を使用してこれらのモジュールを実行します。

モジュールを作成するときは、次の規則に従う必要があります。
-各モジュールの最後で、ガベージコレクターを明示的に呼び出します。
-グローバル変数を使用してモジュール間でデータを交換し、モジュール内の計算にローカル変数を使用します。

その結果、メインのluaプログラムは次のようになります(有効なオプションの1つ)。

-dofile( 'nk_start.lc') -センサー初期化モジュールを呼び出します
- 関数cb() -センサー読み取り値の定期的な測定のコールバック関数
collectgarbage() -ガベージコレクターを呼び出す
ip == nilの場合
dofile( 'wifi_1.lua') -wifiステーションまたはサーバーの初期化関数
終わり
-ip〜= nilで、== nilの場合
dofile( 'srv_1.lua'); -この実施形態では、ウェブサーバーが実装される
is = 1;
終わり
-dofile( 'cbAM2302.lc'); -湿度および温度センサーAM2302からのデータの受信
dofile( 'cb18b20.lua'); -温度センサーDS18B20からの読み取り値の取得(3つあります)
dofile( 'get_tp.lc'); dofile( 'norm.lc'); -圧力および温度センサー(BMP180)からの読み取り値の取得
終わり
tmr.alarm(3,1000,1、cb) -サンプリングタイマー-コールバック関数を呼び出します。 サンプリングレート1 Hz

このプログラムでは、各モジュールが前のモジュールの代わりになるため、このようなモジュールが多数存在する可能性があります。 それらはすべてファイルシステムに保存されます。

モジュールへの内訳を使用せずにこのプログラムのアルゴリズムを実装すると、プログラムは1つのセンサー(AM2302、18b20、またはBMP180のいずれか)のプログラムのみに対応できます。

Source: https://habr.com/ru/post/J255625/


All Articles