九,ESP8266 判斷是斷電上電(強制硬體復位)之後執行的內部程式還是內部軟體復位之後執行的程式(基...
現在我有一個需求,WIFI模組控制一個繼電器,我要做的是如果內部程式跑亂了,造成了內部程式復位重啟,那麼控制繼電器的狀態不能改變
如果是裝置斷電了,然後又來電了,我需要的是繼電器一定要是斷開才好。不能加額外的電路,只能在程式中做判斷
其實 內部程式跑亂了,造成了內部程式復位重啟 和 裝置斷電了,然後又來電了 然後都是重新執行程式,不知道大家是如何做的
我的思路是。。。
先說一下WIFI模組的一個很大的優點,
大家有沒有注意WIFI模組的引腳,假設配置了一個引腳為高電平,無論內部如何的利用軟體復位,這個引腳都會保持高電平
還有就是,WIFI模組如果是斷電上電那麼引腳一開始一定是低電平,但是必須是這樣配置
local PowerResetPin = 2 gpio.mode(PowerResetPin, gpio.OUTPUT) local PowerReset = false ifgpio.read(PowerResetPin) == 1 then PowerReset = false print("PowerReset = false") else PowerReset = true print("PowerReset = true") end
最終我的方案是:
先讀取引腳是不是低電平,如果是,就是說是斷電上電然後執行的程式,如果不是,就是說內部復位重啟然後執行的程式
其實是自己人為設定的那個引腳輸出的高電平,看下面的程式
local PowerResetPin = 2 gpio.mode(PowerResetPin, gpio.OUTPUT) local PowerReset = false ifgpio.read(PowerResetPin) == 1 then PowerReset = false print("PowerReset = false") else PowerReset = true print("PowerReset = true") end gpio.write(PowerResetPin, 1)
整個程式執行之前先執行上面的程式
如果 PowerReset = false 說明是內部程式復位重啟然後執行的程式
如果 PowerReset = true 說明是斷電上電然後執行的程式
好了就是這麼簡單,主要還是因為WIFI引腳有這個特點,軟體復位可以保持住狀態