前言
博主不知在哪聽說ESP8266支持很多種語言開發(fā)的消息,其中包括原生的C語言、Python(MircoPython)、NodeMCU的Lua、JavaScript等等。MircoPython,前面有一篇入門教程了,這一篇則是嘗試在ESP8266上使用JavaScript開發(fā)。
開發(fā)環(huán)境
- Windows 10 x64
- NodeMCU(4MB Flash)
- Espruino 1v92
關(guān)于Espruino
Espruino的Logo,咖啡杯代表JavaScript,杯底的引腳代表開源硬件。
Espruino是一種運(yùn)行在微控制器上的交互式Javascript解釋器,借助這一利器,你可以輕松快速地對微控制器進(jìn)行編程。
燒寫固件
與使用MircoPython一樣,在ESP8266上使用JavaScript也需要燒寫相關(guān)固件。
相關(guān)固件可以到這里下載,選擇頁面上的「Download Espruino」即可。
目前最新版本1v92固件下載地址:http://www.espruino.com/files/espruino_1v92.zip
解壓縮后到主目錄下找到「espruino_1v92_esp8266_4mb_combined_4096.bin」,燒寫到0x0地址即可。
之后打開串口工具調(diào)到波特率115200,重啟ESP8266,看到打印下面的信息即打印成功。
_____ _
| __|___ ___ ___ _ _|_|___ ___
| __|_ -| . | _| | | | | . |
|_____|___| _|_| |___|_|_|_|___|
|_| http://espruino.com
1v92 Copyright 2016 G.Williams
Espruino is Open Source. Our work is supported
only by sales of official boards and donations:
http://espruino.com/Donate
Flash map 4MB:512/512, manuf 0xe0 chip 0x4016
>
安裝Web IDE
由于使用串口工具開發(fā)不太方便,接下來可以安裝相關(guān)的IDE。
首先到Github下載Espruino Web IDE壓縮包。(如果不會Github下載,后面也有網(wǎng)盤下載)
EspruinoWebIDE:https://github.com/espruino/EspruinoWebIDE
EspruinoTools:https://github.com/espruino/EspruinoTools
分別將上述兩個壓縮包解壓縮,然后把EspruinoTools壓縮包解壓之后的文件拷貝到Espruino Web IDE解壓目錄的「EspruinoWebIDE-gh-pages\EspruinoTools」,之后就可以在Chrome瀏覽器的擴(kuò)展程序設(shè)置里加載這個Espruino Web IDE了。
啟動該工具,首先進(jìn)入「設(shè)置」頁面,也就是點擊右上角那個「齒輪」圖標(biāo),齒輪圖標(biāo)一般都是設(shè)置的意思。
選擇右邊的「Communications(通信)」,設(shè)置波特率為115200。
最后回到主頁面,點擊左上角的「連接」圖標(biāo)。即可通過串口連接ESP8266。
測試
接下來可以進(jìn)行測試。
打印內(nèi)存信息,輸入process.memory()
:
>process.memory()
={ "free": 1534, "usage": 66, "total": 1600, "history": 53 }
>
打印HelloWorld,可以使用console.log
或者print
:
>console.log("Hello World!")
Hello World!
=undefined
>print("Hello World!")
Hello World!
=undefined
>
點燈
接下來嘗試控制芯片的引腳,點一下LED燈。
根據(jù)LED「長正短負(fù)」的口訣,為了讓芯片低電平能點亮LED燈,把LED短引腳與NodeMCU的D3引腳短接,LED長引腳接在外面與一個電阻(1K、4.7K或者10K)串聯(lián),該電阻另一端短接3V3。因為有電阻限流,所以LED不小心接反也沒關(guān)系。
接好之后,在IDE處輸入digitalWrite(D0,0)
即可看到LED燈點亮了,再次輸入digitalWrite(D0,1)
LED燈滅了。
為什么前面接的引腳是
D3
,這里輸入的是D0
這是因為代碼里的D0是指下圖ESP8266的D0,正好對應(yīng)NodeMCU引腳的D3。
ESP8266引腳當(dāng)然為了開發(fā)方便,Espruino引入的NodeMCU的引腳,使用
NodeMCU.D3
即可對相關(guān)引腳操作,例如輸入digitalWrite(NodeMCU.D3,0)
可以點亮LED燈。
連接WiFi
ESP8266作為一款WiFi芯片,不連接WiFi和咸魚有什么區(qū)別?下面嘗試連接WiFi,直接上代碼。
掃描WiFi
首先是掃描WiFi,很奇怪,雖然我的代碼是掃描到了WiFi,但是打印出來的WiFi沒有我手機(jī)看到的那么多,不知道是我的代碼問題還是固件的問題。
wifi.scan(function(msg){console.log(msg);}));
連接WiFi
連接WiFi代碼如下。
var wifi = require("Wifi");
wifi.connect("<my-ssid>", {password: "<my-password>"},
function(err){if(err)console.log(err);else console.log("connected!");})
把<my-ssid>
和<my-password>
字段修改為你要連的WiFi即可。過了一段時間就會打印connected!
。
這里也有BUG,不知道是我使用錯誤還是固件的問題。
第一次連接WiFi沒有問題,再連接一次就會出現(xiàn)bad password
信息,可是SSID和密碼都沒有動過,有知道內(nèi)情的朋友可以告訴我,感謝。
查看WiFi信息
可以輸入wifi.getStatus()
和wifi.getIP()
查看WiFi狀態(tài)和IP地址。
>wifi.getStatus()
={
"mode": "sta+ap",
"station": "off",
"ap": "enabled",
"phy": "11n",
"powersave": "ps-poll",
"savedMode": "off"
}
>
保存WiFi信息
據(jù)說調(diào)用wifi.save()
可以掉電保存WiFi信息,并且可以上電自動連接。我實際測試了一下,沒有達(dá)到預(yù)期效果。這里固件可能有BUG。
Socket連接實例
連接上了WiFi,下面就要嘗試Socket連接了,我看了一下文檔,似乎只支持TCP Socket,不支持UDP,太可惜了!
下面相關(guān)代碼,由于是阿秀自己寫的實例所以可能會寫得不太好,湊合看一下吧。
var net = require('net');
s = net.connect({host:"192.168.0.50", port:12345}) // 配置host和port
s.write("Hello World!"); // 發(fā)送數(shù)據(jù)
s.read(); // 讀取數(shù)據(jù)
s.end("Bye bye!"); // 發(fā)送數(shù)據(jù)并關(guān)閉連接
寫個小插曲,很坑的是我一開始不知道是用net
這個模塊,明明有Socket
模塊為什么沒有配置host和port的接口呢,害得我找了很久很久,終于找到了net
。
掉電存儲代碼
其它相關(guān)API可以去查看文檔,不過有一點很重要的就是我們還需要知道如何把自己的代碼寫入芯片,這樣每次重啟芯片后都會運(yùn)行自己的代碼。
要實現(xiàn)這樣的效果,可以使用全局函數(shù):function onInit()
+save()
。
下面放上示例代碼,每次上電都會打印Hello onInit!
字符串。
function onInit() {
console.log("Hello onInit!");
}
save();
點擊截圖的左邊那個「Send ti Espruino」按鈕,就可以上傳代碼到芯片,之后會打印下面的信息,表示寫入Flash。
Erasing Flash..................
Writing....
Compressed 25600 bytes to 1743
Checking...
重啟下芯片試試,看看是不是出現(xiàn)Hello onInit!
字符串了~
關(guān)于Espruino的評價
在瀏覽Espruino官網(wǎng)教程的時候發(fā)現(xiàn)了這么一句:「Currently 12KB of flash are reserved to save JS code to flash using the save() function.」很有意思,這句話的意思是說save()
函數(shù)保留了12KB Flash空間,用來保存JS代碼。當(dāng)然我這么截取句子可能會造成斷章取義,英文好的可以去看下原文(《Espruino on ESP8266 WiFi》的Saving code to flash小節(jié),末尾有鏈接)。
除了能保存12KB的代碼以外,不能使用UDP是一個非常大的缺點(也有可能是我閱讀文檔不仔細(xì)沒找到),MicroPython都能使用UDP,為什么JS不可以呢?
當(dāng)然,Espruino基本的通信接口UART、IIC、SPI、OneWire都支持了,用起來還是比較方便的。TCP Socket客戶端上面代碼也簡單嘗試了一下,當(dāng)然也可以建立TCP Socket服務(wù)器、HTTP服務(wù)器和HTTP請求。JSON是肯定支持的,JSON全稱就是JavaScript對象標(biāo)記語言嘛,本身就屬于JS。
和MicroPython一樣,Espruino與原生SDK C語言開發(fā)相比,在接口方面依舊不能比。不支持SmartConfig和sniffer,不支持IR Control等等。計算性能方面暫時不知道相差多少。
以上僅僅是個人對基于ESP8266的Espruino不完全評價。
相關(guān)資料
- Espruino官網(wǎng):http://www.espruino.com/
- Espruino中文論壇:http://www.espruino.cn/
- Espruino on ESP8266 WiFi
本教程相關(guān)固件和工具下載
- CSDN:http://download.csdn.net/detail/u012163234/9860600
- 百度網(wǎng)盤:鏈接: https://pan.baidu.com/s/1bpaSoTh 密碼: h5ex
本文首發(fā)于CSDN:http://blog.csdn.net/yannanxiu/article/details/72861216
由于文章發(fā)表之后可能會發(fā)現(xiàn)描述不妥的地方,所以文章發(fā)布后可能會不定期潤色一下。
最后編輯時間:2017年6月