現在のNodeMCUデバイスブランチファームウェアでフラッシュしたESP-12Fモジュールがあります。このモジュールは2A以上の電源で動作します。私は小さなステッパーモーター(this is the combo)のドライバーを制御するために4つのGPIOを使用します。ESP8266 NodeMCUファームウェアを搭載したESP-12Fは、ループGPIOを使用して再起動します。
私はモーターを制御するためにESPlorerではほとんどのLuaスクリプト(partially based on the arduino version described here)を書き、プログラムが作業を行い、モータはそれに応じて変わるが、私はあまりにも多くのステップで機能turn
を呼び出すときには、モジュールを再起動します。制限は約180ステップで、場合によっては少し上に、時にはその数より少し下にある場合もあります。
私はこの種のモジュールをプログラミングするのが本当に新しいですし、私もLuaを学んでいます。誰がここで何が起こるのか想像できますか?ところで、私はまた、ドライバボードに外部5ボルトを供給しようとしましたが、何も変わっていませんでした。
これは私のスクリプトです:ここでは
gpio.mode(5, gpio.OUTPUT)
gpio.mode(6, gpio.OUTPUT)
gpio.mode(7, gpio.OUTPUT)
gpio.mode(0, gpio.OUTPUT)
sg = function (n,v) gpio.write(n, (v == 0 and gpio.LOW or gpio.HIGH)) end
stepRight = function()
sg(5,0);sg(6,0);sg(7,0);sg(0,1);
sg(5,0);sg(6,0);sg(7,1);sg(0,1);
sg(5,0);sg(6,0);sg(7,1);sg(0,0);
sg(5,0);sg(6,1);sg(7,1);sg(0,0);
sg(5,0);sg(6,1);sg(7,0);sg(0,0);
sg(5,1);sg(6,1);sg(7,0);sg(0,0);
sg(5,1);sg(6,0);sg(7,0);sg(0,0);
sg(5,1);sg(6,0);sg(7,0);sg(0,1);
sg(5,0);sg(6,0);sg(7,0);sg(0,0);
end
turn = function (dir, steps)
if dir == 'right' then
for i=0,steps,1 do
stepRight()
end
end
end
は、モジュールおよびファームウェアについてのいくつかの詳細は以下のとおりです。
NodeMCU custom build by frightanic.com
branch: dev
commit: c54bc05ba61fe55f0dccc1a1506791ba41f1d31b
SSL: true
modules: adc,cjson,crypto,dht,file,gpio,hmc5883l,http,i2c,l3g4200d,mqtt,net,node,ow,pwm,spi,tmr,tsl2561,uart,wifi
build built on: 2016-11-21 19:02
powered by Lua 5.1.4 on SDK 1.5.4.1(39cb9a32)
これは私が高すぎるとturn
関数を呼び出すとき、それは次のようになります値:
turn('right',200)
ets Jan 8 2013,rst cause:2, boot mode:(3,7)
load 0x40100000, len 26144, room 16
tail 0
chksum 0x95
load 0x3ffe8000, len 2288, room 8
tail 8
chksum 0xa8
load 0x3ffe88f0, len 8, room 0
tail 8
chksum 0x66
csum 0x66
����o�r��n|�llll`��r�l�l��
NodeMCU custom build by frightanic.com
branch: dev
commit: c54bc05ba61fe55f0dccc1a1506791ba41f1d31b
SSL: true
modules: adc,cjson,crypto,dht,file,gpio,hmc5883l,http,i2c,l3g4200d,mqtt,net,node,ow,pwm,spi,tmr,tsl2561,uart,wifi
build built on: 2016-11-21 19:02
powered by Lua 5.1.4 on SDK 1.5.4.1(39cb9a32)
lua: cannot open init.lua
>
更新:うまくいく解決策を見つけましたが、理由を説明できません。たぶん誰かがこれについていくつかの光を当てることができますか?
for i=0,steps,1 do
stepRight()
tmr.delay(10)
end
これは速度には影響しません:私はいつ、どのように再起動が発生する見つけることによって問題にアプローチしなければならなかったと思ったので、私は、forループに少しタイマー遅延を追加
私が望むように数字を簡単に増やすことができます; turn('right',200000)
を使用することができます。再起動は完全に消えてしまいます。遅延を1回だけ設定しても、再発しませんでした。 1μs。それは素晴らしいことですが、なぜそれが役立つのかを知りたいですか?
これは乾式モード、右(ドライバーボードが取り外されている)でも発生しますか?あなたのファームウェアにコンパイルされたモジュールの数を見ると、私は実際にはこれまでにも驚いています。本当に必要なものに減らしてみてください。それはいくらかの記憶を解放するでしょう。 –
あなたが正しいです、私はドライバを切断し、それは同じ動作です。あなたのコメントを読んだ後、私は次に何をするのかを知っています - 私はどのくらい私がファームウェアに入れてもいいかわかりませんでした(明らかに、あらかじめコンパイルされたバイナリはもう利用できません)。私はちょうどこれらの小さなマシンで作業する方法のための気持ちを取得し始めている。ありがとうございました! – Robert
また、 'node.heap()'に注目したいかもしれません。もちろん、[NodeMCU Luaの開発者のFAQ](http://nodemcu.readthedocs.io/en/latest/en/lua-developer-faq/)のフットプリントを減らす方法のヒント: –