2016-11-21 18 views
0

我有一個ESP-12F模塊,它使用當前的NodeMCU dev-branch固件進行閃存。該模塊由> 2A電源供電。我使用4個GPIO來控制小步進電機的驅動器(this is the combo)。ESP8266使用環形GPIO寫入時帶有NodeMCU固件的ESP-12F重新啓動

我在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循環:

for i=0,steps,1 do 
    stepRight() 
    tmr.delay(10) 
end 

這並不影響速度的電機,但現在我可以很容易地將數字調高到我想要的高度;)我可以使用turn('right',200000),重啓完全消失,即使只將延時設置爲僅一次也不會再次發生1μs。這太棒了 - 但我很想知道爲什麼這會有所幫助?

+0

這種情況也發生在幹模式,右側(驅動板斷開)?看看編譯到你的固件中的模塊數量,我真的很驚訝,你甚至有這麼多。嘗試減少到​​你真正需要的。它會釋放一些內存。 –

+0

你是對的,我斷開了驅動程序,這是相同的行爲。在閱讀你的評論後,我知道接下來會做什麼 - 我不知道我可以保存到我的固件中多少錢(因爲顯然沒有可用的預編譯二進制文件)。我剛剛開始感覺如何使用這些小型機器。謝謝! – Robert

+0

您可能還想關注'node.heap()'。當然,[NodeMCU Lua開發者常見問題](http://nodemcu.readthedocs.io/en/latest/en/lua-developer-faq/)提示如何減少足跡:) –

回答

0

您正在使用單迴轉功能呼叫sg() 7,200次。您必須打破處理以避免超時。這只是ESP8266 SDK所需的方式。

閱讀my FAQ在文檔中進行更詳細的討論。