ESP8266 & NodeMCU 開發入門 (Part 1) - Hello World

這個系列的教學,將會帶領初學者使用 ESP8266 打造物聯網應用。本系列教學使用 NodeMCU 開發套件,這是一款以 ESP8266 做為基礎的開發板。ESP8266(以及 NodeMCU)都是屬於 IoT 開發平臺中的 WiFi MCU 類型。

IoT 開發平臺的類型

WoT.City 將 IoT 開發平臺區分為三大類型:

  1. Single Board Computer-例如:Intel Edison
  2. High Performance MCU-例如:ARM mbed
  3. WiFi MCU-例如:ESP8266 與 NodeMCU

理論上,不同類型的 IoT 開發平臺,也會有不同的 IoT Cloud 架構,以及不同的 IoT Diagram(Use Scenario)。WoT.City 的 Web of Things Framework 就是依據不同的 IoT 類型,設計出不同的 WoT Server 架構。

IoT Node (Device Type) Solution Platform IoT Diagram (Use Scenario)
Single Board Computer (SBC) Intel Edison、Qualcomm Dragonboard 410c 等 IoT Router 等
High Performance MCU ARM mbed OS、Neuclio 等 Sensor hub (Time-series Data Type) 等
WiFi MCU ESP8266、NodeMCU、EMW3165 等 Sensor hub (Interrupt Type)、Network controller 等

表 1.1:Device Types of IoT Node

這一系列的教學文章,正好涵蓋了這三大類的 IoT 裝置。

NodeMCU 開發環境

NodeMCU 與 ESP8266 的主要差異:

  • NodeMCU 包含一個 USB to serial 晶片,可隨插即用
  • NodeMCU firmware 可使用 Lua script 撰寫程式

本系列學,將以 NodeMCU 開發板,以及 Lua 程式設計為主。ESP8266 的使用者,可以更新為 NodeMCU firmware ,即可使用 Lua 撰寫程式。

以下步驟帶領初學者使用 Lua 來點亮 NodeMCU 上的 LED 燈。

Step 1:準備 NodeMCU 開發板

將 NodeMCU 開發板連接至 PC,如圖 1.1。

圖 1.1:使用 Node MCU 開發板 圖 1.1:使用 Node MCU 開發板

使用 NodeMCU 必須另外安裝 CP210x 驅動程式。請由此處下載:

https://www.silabs.com/products/mcu/Pages/USBtoUARTBridgeVCPDrivers.aspx  

Step 2:使 ESPlorer

下載並安裝 ESPlorer。ESPlorer 支援 Windows、Linux 與 Mac OS X 環境,ESPlorer 需要 JAVA SE 7 或以上的環境。

圖 1.2:使用 ESPlorer 開發環境 圖 1.2:使用 ESPlorer 開發環境

啟動 ESPlorer 後,設定 UART 通訊的 Baudrate 為 9600。裝置檔名稱,依不同的作業系統環境,以及電腦硬體環境而有所不同。例如,在 Ubuntu Linux 上,NodeMCU 的裝置檔可能是 /dev/ttyUSB0,在 Mac OS X 上,裝置檔名稱可能是 /dev/tty.SLAB_USBtoUART

設定完成後,按下 Open 與 NodeMCU 連線,如圖 1.3。在訊息視窗中,可以看到連線訊息。其中「Can't autodetect firmware, because proper answer not received.」的訊息可忽略。

圖 1.3:成功與 NodeMCU 連線 圖 1.3:成功與 NodeMCU 連線

Step 3:第一個 Lua 程式

NodeMCU 的主要特色,就是能使用 Lua 來撰寫程式。在 ESPlorer 左方的編輯區,輸入第一個 Hello World 程式碼如下:

print("hello world")  

完成後,按下 Send to ESP 按紐,即可將程式碼傳送至 NodeMCU 上執行。執行畫面如圖 1.4。

圖 1.4:Hello World 圖 1.4:Hello World

Step 4:開始學習 NodeMCU API

NodeMCU 提供非常豐富的 Lua API 模組,包含:WiFi 模組、GPIO 模組、Timer 模組、I2C 模組、Net 模組等。NodeMCU API 參考手冊:

https://github.com/nodemcu/nodemcu-firmware/wiki/nodemcu_api_en  

Step 5:燈亮 LED 燈

NodeMCU 開發板上有一個 LED 燈,連接至 ESP8266 的 GPIO16 腳位,這個腳位對應至 NodeMCU 電路板上的 D0 接腳,如圖 1.5。

圖 1.5:NodeMCU 的 IO Index 名稱 圖 1.5:NodeMCU 的 IO Index 名稱

因此,如果把 D0 的腳位設定成 GPIO Output,就能點亮 LED 燈。

Lua 的 gpio 模組裡,有一個 mode() 函數,可用來設定 GPIO 的腳位功能。根據手冊上的說明,撰寫程式如下:

print("hello world")  
gpio.mode(0, gpio.OUTPUT)  

執行後,就能點亮 NodeMCU 上的 LED 燈。

小結:Node.js Style Network API

NodeMCU 使用的 Lua 程式語語,語法簡單易學,可在實作的過程透過範例學習 Lua 語法即可。

NodeMCU 的內建 API 模組,可以用 Lua 呼叫,寫出類似 Node.js 風格的程式碼,例如:

tmr.alarm(0, 1000, 1, function()  
    print("hello world")
    end)

這段程式碼,包含了 Callback 函數的觀念。此外,網路(Network)相關的 API,更提供 Lua 大量的 Node.js 風格寫法,例如:

require("http").createServer(80, function(req, res)  
    print(req.url)
    end)

這就是 NodeMCU 的重要特色「Node.js style network API」。

Revision

  • 2015.09.13: 修改 USB to UART Bridge 驅動程式的說明(由 Noah 反饋)

其它