一、ESP8266入門(基於LUA開發)
序
一入坑便停不下來。。。
還挺有意思的哈,233,,,,
資料雜,自己一個一個去找確實浪費了不少時間,而且大多還都是英文的,需要硬著頭皮看。
這次實踐入門,更是對英語的重要確信無疑。Github必須要玩的6了,多好的東西啊,就那麽放到你的眼前就因為你的不懂英文把人家拒之門外,可悲可憐可嘆~
另外還對API文檔也感悟頗深,多麽詳細的資料。多麽好的教程,可惜自己以前就是不會用。哎~ >
不扯淡了,分享自己探索歷程希望你可以少走彎路。
Lua初識
NodeMCU自帶LUA的解釋器,所以可以用LUA語言給其編寫控制程序,LUA是一個輕量級的腳本語言,用C語言編寫,編譯後解釋器大小僅僅100多K。LUA旨在針對內存有很大限制的嵌入式系統。NodeMCU還提供交互命令行環境,比Arduino的編程調試環境友好
NodeMCU還可以支持Arduino的IDE對其編程,簡介參見這篇
Blog:https://lifeinplaintextblog.wordpress.com/nodemcu-arduino-ide-2/
首先你要知道它是一個腳本語言,如果你有學過腳本語言比如JS、python的話,直接看API文檔就差不多了。
突然有那麽點感悟,腳本語言似乎大同小異,雖然我還是個渣渣。腳本語言真的好寫好用,好玩,哈哈哈哈哈~~~
當然了呢,如果你未曾學過任何腳本語言的話這個當然也可以作為你的第一門腳本語言來學習,入門個人感覺也是相當快的,不會了再記得查API文檔就行了。
(在NodeMCU的學習更新中還會再開一個專題來記錄下Lua)
NodeMCU的兩種開發方式一種是AT命令,
另一種就是基於Lua的開發了。(目前自己是這麽理解的)
所以呢,入門NodeMCU第一步當然是入門Lua了。
NodeMCU
像 Arduino 一樣操作硬件 IO 提供硬件的高級接口,可以將應用開發者從繁復的硬件配置、寄存器操作中解放出來。
用交互式 Lua 腳本,像 Arduino 一樣編寫硬件代碼!
用 Nodejs 類似語法寫網絡應用 事件驅動型 API 極大的方便了用戶進行網絡應用開發,使用類似 Nodejs 的方式編寫網絡代碼,並運行於 5mm*5mm 大小的 MCU 之上,加快物聯網開發進度。
超低成本的 WIFI 模塊 用於快速原型的開發板,集成了售價低於 10 人民幣 WIFI 芯片 ESP8266,提供性價比最高的物聯網應用開發平臺。
基於樂鑫 ESP8266 的 NodeMCU 開發板,具有 GPIO、PWM、I2C、1-Wire、ADC 等功能,結合 NodeMCU 固件為開發提供最快速的途徑。
這個開發板的名字叫 NodeMCU DevKit 別問我為啥,樂鑫爸爸起的好名字。
NodeMCU —> 節點微控制單元
ESP8266也只是一款芯片而已,ESP 12E是用ESP8266做的WiFi模塊
刷固件
怎麽樣?固件!!
牛逼不?哈哈哈,,,
其實呢?不然,當你習慣它的叫法就好了。不就是個底層嘛,有啥了不起嘞!:)tao
什麽叫固件?
就是ESP8266芯片內部預先寫入的程序,可以簡單記憶為:固定在芯片裏的軟件叫固件。
固件是基礎程序,本事再大的芯片也需要固件的支持才能運行高級程序。 固件是硬件的命根子。刷固件的軟件這裏取:
https://github.com/nodemcu/nodemcu-flasher
-註意下載的系統位數要對應
然後呢,開始我們的表演:
第一步
選擇現有的固件:
固件去哪搞嘞?
你可以自己寫SDK,當然對於我們新手一般上不了那種高度。
巧了,人家有個自定義模塊固件!!
https://nodemcu-build.com/
選擇master
自定義模塊提供了各種各樣的模塊,包括
傳感器,LED驅動,通信協議等等,選擇自己感興趣的模塊。 默認已經選擇了一些模塊。
提交後,過一會就會收到郵件。 郵件裏面有兩個bin文件的下載地址,一個是float,一個是integer。
float的比較大,下載那個任君選擇,區別是帶不帶float。
我選擇了
adc,bit,,coap,crypto,enduser_setup,file,
rtcfifo,rtcmem,rtctime,sjson,sntp,tmr,uar,
twebsocket,wifi,ws2812
雜項(不選也沒啥事)
對了關於上面的郵箱(不支持QQ,可以申請微軟的OutLook)
註意輸入兩次,並且第二次不能復制,完了之後稍等片刻,就可以收到編譯好的bin文件直接用就行。
如果采用SDK開發的話,直接可以用eclipse編譯的Bin文件就行
第二步:
打開刷固件的軟件,“Config”下選擇你要的bin 文件
然後“Operation”中點擊Flash就可以開始刷了
更新:
不知道啥時候這個固件上面加了新選項功能:
關於那個第二個的 ‘Debug On’倒是對於調試挺好用的!
第三個現在沒試過,歡迎在下面占坑評論!
ESPlorer編寫程序
下載:https://esp8266.ru/esplorer/
一般自動選擇COM口,如果沒有選擇再手動來一下就OK。
編寫第一個小程序“HelloWorld”
tmr.alarm(0, 1000, tmr.ALARM_AUTO, function()
print("Hello NodeMCU!\n")
end
)
- 1
- 2
- 3
- 4
lua補充:
tmr.alarm(1,2,3,4)
4個參數的含義分別為定時器×、定時間ms、模式、回調函數
模式有三個可供選擇:
tmr.ALARM_AUTO –>自動重置
tmr.ALARM_SINGLE–>單次觸發
tmr.ALARM_SEMI –>手動重置
今天遇到幾個問題記錄一下:
也許你也會遇到:
①固件燒完之後,怎麽下程序都下不進去的問題解決
其實也不是程序的問題,更不是固件的問題。而是波特率的選擇問題,查閱的網上的說法,沒有一個標準的,實踐也沒有發現固定的,也許超出自己的知識體系吧。一般而言,所謂的一般從雲編譯下載的固件,波特率選擇115200
而我在實驗楊大神的這個實驗的時候發現,115200不行,必須改為9600才行。
傳送門:http://www.cnblogs.com/yangfengwu/p/6243619.html
更新:
隨著理解的加深,這裏對固件稍寫不進去的情況進行個人認知層面的簡單分析。
首先呢,要知道程序的下載是通過串口的,當然你如果之前的程序是有關操作串口的話,如果模塊一上電,就開始執行我們之前的程序,我們新寫的程序也得通過串口燒錄,那麽結果可想而知了!怎麽辦呢?
莫急。。。。。。
解決方案:
1. 多次重復燒寫固件
無奈中的無奈之舉,效果然而也並不是非常好,這種辦法能不能治好看你運氣了!
2.刷寫LUA固件和AT交叉進行
3. 進行地址改寫(這個方法我覺得應該是最實用的!!!)
怎麽個改寫地址法呢?看圖,一切都明白了!
就是想法把原來的lua操作串口的程序給破壞掉,而我們的程序又是在FLASH中,那麽多次改變燒錄地址,不就很有可能給刷掉嗎?!!!
像這種情況怎麽避免呢?
簡單,你想啊,為了留有時間下載程序,哦不,應該講清除你之前的程序,你完全可以用定時器進行定時,等多久後再執行你現在的程序啊。
在這期間,可以瘋狂地進行
file.remove("init.lua");
②部分固件的更新導致語句有所變化
後來也是楊大神幫忙解決的,非常感謝。
具體的修改楊大神也在它的博客寫了。
傳送門:http://www.cnblogs.com/yangfengwu/p/6407727.html
記錄一下兩次的代碼
old:
wifi.setmode(wifi.STATIONAP)
wifi.sta.config("ACLAY","wange903")
wifi.sta.connect()
new:
wifi.setmode(wifi.STATION)
APConfig={}
APConfig.ssid="ACLAY"
APConfig.pwd="wange903"
wifi.sta.config(APConfig)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
一、ESP8266入門(基於LUA開發)