nodemcu固件介紹

大家可以用Google瀏覽器頁面翻譯瀏覽NodeMCU官方API來獲取最新的API

一、PWM模塊

在我的項(xiàng)目開發(fā)中我用到了PWM模塊來操作SG90舵機(jī),我來分享一下我的經(jīng)驗(yàn)。

  • PWM的函數(shù)
序號 函數(shù)名 參數(shù) 返回值 作用
1 pwm.close() pin nil 退出指定GPIO引腳的PWM模式
2 pwm.getclock() pin number 獲取引腳的選定PWM頻率
3 pwm.getduty() pin number 獲取引腳的選定占空比
4 pwm.setclock() pin, clock nil 設(shè)置PWM頻率
5 pwm.setduty() pin, duty nil 設(shè)置引腳的占空比
6 pwm.setup() pin, clock, duty nil 將引腳設(shè)置為PWM模式
7 pwm.start() pin nil PWM啟動,波形應(yīng)用于GPIO引腳
8 pwm.stop() pin nil 暫停PWM波形的輸出

注:
pwm的頻率范圍1~1000
pwm的占空比范圍0~1024

  • SG90介紹
    舵機(jī)的控制一般需要一個(gè)20ms左右的時(shí)基脈沖,該脈沖的高電平部分一般為0.5ms-2.5ms范圍內(nèi)的角度控制脈沖部分,總間隔為2ms。以180度角度伺服為例,那么對應(yīng)的控制關(guān)系是這樣的:
    0.5ms------------0度;

    1.0ms------------45度;

    1.5ms------------90度;

    2.0ms-----------135度;

    2.5ms-----------180度;

  • 計(jì)算
    如果要使用PWM就必須計(jì)算出頻率和占空比

  1. 頻率:以SG90為例,它的時(shí)基脈沖為20ms也就是周期為20ms,則頻率=周期的倒數(shù)為50HZ,也就是1秒鐘內(nèi)可以轉(zhuǎn)動50次。注意SG90 脈沖周期為20毫秒(millisecond) 不是20微秒(Microsecond),兩者差1000倍呢!

  2. 占空比:以SG90為例,占空比的計(jì)算方法為=脈寬/周期,由此可以得出
    0.5ms------------0度---------------2.5%;

    1.0ms------------45度--------------5%;

    1.5ms------------90度--------------7.5%;

    2.0ms-----------135度--------------10%;

    2.5ms-----------180度--------------12.5%;

  • 實(shí)踐
    實(shí)際上在操作中我們最常用到的函數(shù)為
    pwm.setup(pin, clock, duty)--------------初始化pwm
    pwm.start(pin)---------------------------啟動pwm
    pwm.close(pin)--------------------------退出pwm
    pwm.stop(pin)---------------------------暫停pwm
    pwm.setclock(pin,clock)-----------------設(shè)置pwm的頻率1~1000
    pwm.setduty(pin,duty)-------------------設(shè)置pwmd占空比0~1024
    廢話不多說,上代碼
pin = 1                    --輸出引腳
pwm.setup(pin,50,77)       --初始化引腳為50HZ,占空比為77=1024*7.5為90度
pwm.start(pin)
tmr.delay(1000000)           --延時(shí)1秒
pwm.setduty(pin,52)         --重新設(shè)置占空比為52=1024*5%為45度
tmr.delay(1000000)
pwm.setduty(pin,77)         --返回初始化狀態(tài)
pwm.stop(pin)              --停止PWM
  • 番外-呼吸燈程序
例子:呼吸燈
pin = 4
pwm.setup(pin,500,512)--初始化頻率為500,占空比為512
pwm.start(pin)--啟動pwm輸出
while true do
    for var=0,1023,1 do
         pwm.setduty(pin, var)--調(diào)整占空比
         tmr.delay(1000)
         tmr.wdclr()--喂狗
    end
    for var=1023,0,-1 do
         pwm.setduty(pin, var)
         tmr.delay(1000)
         tmr.wdclr()
    end
end

注:
SG90有兩個(gè)角度選擇,一個(gè)是360度一個(gè)是180度,如果要控制角度就選擇180度的舵機(jī),如果要控制速度就選擇360度的舵機(jī)

二、encoder模塊

這個(gè)模塊應(yīng)該很不起眼,但是在我的項(xiàng)目開發(fā)中我非常需要它。我在使用nodemcu串口時(shí)發(fā)現(xiàn),我別的模塊向nodemcu發(fā)送hex數(shù)據(jù)時(shí),nodemcu顯示為亂碼,這應(yīng)該就是nodemcu串口不支持讀取hex數(shù)據(jù),所以我們需要將讀取到的文件轉(zhuǎn)換成hex在進(jìn)行輸出就可以了,現(xiàn)在我們先來看看encoder里都有什么函數(shù)。

序號 函數(shù)名 參數(shù) 返回值 作用
1 encoder.toBase64() binarystr Base64str 提供(二進(jìn)制)Lua字符串的Base64表示。
2 encoder.fromBase64() b64str binarystr 將(二進(jìn)制)Lua字符串的Base64表示形式解碼回原始字符串。
3 encoder.toHex() binarystr hexstr 提供(二進(jìn)制)Lua字符串的ASCII十六進(jìn)制表示。
4 encoder.fromHex() hexstr Decodedstr 返回ASCII十六進(jìn)制字符串的Lua二進(jìn)制字符串解碼。

注:
encoder函數(shù)的參數(shù)和返回值都為字符串?。?!,例子比較簡單就不寫出來了,可以點(diǎn)開對應(yīng)的函數(shù)進(jìn)行學(xué)習(xí)。

三、Timer模塊

由于tmr模塊中alarm發(fā)送改變,所以我這里寫出最新的使用方法。alarm使用方法官方API

  1. 句法
    tobj:alarm(interval_ms, mode, func())
  2. 參數(shù)
    • interval_ms計(jì)時(shí)器間隔,以毫秒為單位。最大值為6870947(1:54:30.947)。
    • mode 定時(shí)器模式:
      • tmr.ALARM_SINGLE一次性報(bào)警(無需撥打電話unregister()
      • tmr.ALARM_SEMI手動重復(fù)報(bào)警(調(diào)用start()重啟)
      • tmr.ALARM_AUTO 自動重復(fù)報(bào)警
    • func(timer) 使用timer對象作為參數(shù)調(diào)用的回調(diào)函數(shù)
  3. 返回值
    true如果計(jì)時(shí)器啟動,false則出錯(cuò)
  4. 例子
if not tmr.create():alarm(5000, tmr.ALARM_SINGLE, function()
  print("hey there")
end)
then
  print("whoopsie")
end

四、小貼士

  1. 直接使用init.lua寫代碼時(shí)若出現(xiàn)死循環(huán)或者無法進(jìn)行操作時(shí)可以重新燒入固件(缺少代碼中所用到的模塊)就可以進(jìn)行操作了。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容