NodeMCU之旅(三):響應配置按鈕


引言

在之前的代碼中,要連接的WIFI信息都已寫死在代碼里,這顯然不能適應我們的需求。所以需要想個辦法讓用戶可以配置這些信息。

WIFI工作模式

NodeMCU支持STATION,SOFTAP,STATIONAP,NULLMODE四種模式。

設置WIFI模式
wifi.setmode()

  • wifi.STATION 當設備需要連接到WIFI路由器時使用。常在訪問Internet時使用。
  • wifi.SOFTAP 當設備需要作為熱點時使用。在此模式下你的設備會創建一個本地局域網,並出現在WIFI列表。在默認情況下,NodeMCU在本地局域網地址為192.168.4.1,其他設備將被分配為下一個的可用IP,比如192.168.4.2。
  • wifi.STATIONAP 同時應用以上兩者。在此模式下你可以在創建一個熱點的同時連接到其他WIFI路由器。
  • wifi.NULLMODE 關閉WIFI。

所以可以添加一個按鈕,當按鈕按下時,轉換模式為WIFI.STATIONAP,然后通過手機接入NodeMCU的熱點,進入設置頁面配置WIFI信息。就像配置路由器一樣。

接線

wiring.jpg

  • 綠色的LED就是未來被遠程控制的那顆,正極連接D1。

  • 黃色的LED用於顯示當前的WIFI工作模式,正極連接D2。

  • 白色的按鈕連接D3。

  • 負極連接GND。

接線完成后,定義這些引腳:

IO_LED = 1
IO_LED_AP = 2
IO_BTN_CFG = 3

gpio.mode(IO_LED, gpio.OUTPUT)
gpio.mode(IO_LED_AP, gpio.OUTPUT)
gpio.mode(IO_BTN_CFG, gpio.INT)

注意,IO_BTN_CFG被設置為了gpio.INT模式,也就是中斷模式。

響應按鈕

通過gpio.trig()設置響應中斷的回調函數。

設置響應中斷的回調函數
gpio.trig()

響應按鈕抬起時的事件:

function onBtnEvent()
	print('up~')
end
gpio.trig(IO_BTN_CFG, 'up', onBtnEvent)

上傳代碼。測試按下按鈕,發現輸出正常。

但存在一個問題:有時只按了一次,輸出卻不止一次。因為按鈕的信號會有抖動。

這里提供一種去抖方法:

TMR_BTN = 6

function onBtnEvent()
	gpio.trig(IO_BTN_CFG)
	tmr.alarm(TMR_BTN, 500, tmr.ALARM_SINGLE, function()
		gpio.trig(IO_BTN_CFG, 'up', onBtnEvent)
	end)

	print('up~')
end
gpio.trig(IO_BTN_CFG, 'up', onBtnEvent)

思路是,在首次觸發之后,清除按鈕的回調函數,在0.5秒后,恢復回調。

開始與結束配置

正如之前所講,平常運行時WIFI模式為wifi.STATION,當按下按鈕后,WIFI模式轉為wifi.STATIONAP,再次按下后恢復wifi.STATION

gpio.write(IO_LED_AP, gpio.LOW)

function switchCfg()
	if wifi.getmode() == wifi.STATION then
		wifi.setmode(wifi.STATIONAP)
		gpio.write(IO_LED_AP, gpio.HIGH)
	else
		wifi.setmode(wifi.STATION)
		gpio.write(IO_LED_AP, gpio.LOW)
	end
end

注意,gpio.write(IO_LED_AP, gpio.LOW)在函數外部,目的是在NodeMCU開機時,重置AP信號燈為熄滅狀態。

之后,修改上節按鈕事件函數里的print('up~')為:

switchCfg()

這樣就可以通過按鈕來控制AP的開啟關閉了。

配置熱點信息

print('Setting up WIFI...')后添加下行代碼,來配置熱點名為 'mymcu' ,安全性為開放

wifi.ap.config({ ssid = 'mymcu', auth = AUTH_OPEN })

關於wifi.ap.config()的更多細節,請參閱:

配置熱點信息
wifi.ap.config()

最后,刪去之前寫死在代碼里的WIFI連接配置wifi.sta.config('MY_SSID', 'MY_PASSWORD')

因為隨后,我們將提供操作界面,讓用戶自己來設置它們。

相關資源

你可以在NodeMCU-Tutorial下載到本文的相關資源和代碼。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM