【ESP8266】在ESP8266上使用JavaScript語言開發(fā)

前言

博主不知在哪聽說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

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了。

加載Espruino Web IDE

啟動該工具,首先進(jìn)入「設(shè)置」頁面,也就是點擊右上角那個「齒輪」圖標(biāo),齒輪圖標(biāo)一般都是設(shè)置的意思。

選擇右邊的「Communications(通信)」,設(shè)置波特率為115200。

修改波特率

最后回到主頁面,點擊左上角的「連接」圖標(biāo)。即可通過串口連接ESP8266。

串口連接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)資料

本教程相關(guān)固件和工具下載


本文首發(fā)于CSDN:http://blog.csdn.net/yannanxiu/article/details/72861216

由于文章發(fā)表之后可能會發(fā)現(xiàn)描述不妥的地方,所以文章發(fā)布后可能會不定期潤色一下。

最后編輯時間:2017年6月

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,835評論 6 534
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,676評論 3 419
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,730評論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,118評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,873評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,266評論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,330評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,482評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,036評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,846評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,025評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,575評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,279評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,684評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,953評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,751評論 3 394
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,016評論 2 375

推薦閱讀更多精彩內(nèi)容