2022年8月23日 星期二

NodeMCU 開發套件/板

 

介紹

NodeMCU 開發套件/板由 ESP8266 wifi 芯片組成。ESP8266芯片具有GPIO引腳、串行通信協議等特性。

ESP8266 是樂鑫開發的一款低成本的 Wi-Fi 芯片,採用 TCP/IP 協議。有關 ESP8266 的更多信息,您可以參考 ESP8266 WiFi 模塊

ESP8266 的特性是在 NodeMCU 開發板上提取的。NodeMCU(基於LUA的固件)與由 ESP8266(啟用 wifi 的芯片)芯片組成的開發板/套件結合了 NodeMCU 開發板,使其成為物聯網應用中的獨立設備。

讓我們看看 NodeMCU 開發套件的第一個版本及其引腳,如下圖所示。

NodeMCU 開發套件 v0.9

NodeMCU 開發套件 v0.9

NodeMCU開發板v0.9(版本1)

NodeMCU 開發板 v0.9 引腳分配

NodeMCU 開發套件 v0.9(V1) 引腳分配

NodeMCU 開發套件的第二版及其引腳如下圖所示。

NodeMCU 開發套件 v1.0

Amica NodeMCU 開發套件 v1.0(Version2)

NodeMCU 開發套件 v1.0 引腳分配

NodeMCU 開發套件 v1.0(V2) 引腳分配

NodeMCU 開發套件 v1.0 引腳說明

GPIO(通用輸入輸出)引腳:

NodeMCU 在其板上具有通用輸入輸出引腳,如上圖所示。我們可以將其設為數字高/低,並控制 LED 之類的東西或打開它。此外,我們可以在這些 GPIO 引腳上生成 PWM 信號。

有關 NodeMCU GPIO 的更多信息,請參閱此鏈接

有關 NodeMCU PWM 的更多信息,請參閱此鏈接

ADC(模數轉換器)通道(A0):

NodeMCU 的板上有一個 ADC 通道/引腳。

有關 NodeMCU ADC 的更多信息,請參閱此鏈接

SPI(串行外設接口)引腳:

基於 NodeMCU 的 ESP8266 具有硬件 SPI (HSPI),其中四個引腳可用於 SPI 通信。它還具有用於 Quad-SPI 通信的 SPI 引腳。通過這個 SPI 接口,我們可以將任何支持 SPI 的設備與 NodeMCU 連接,並使其通信成為可能。

有關 NodeMCU SPI 的更多信息,請參閱此鏈接

I2C(內部集成電路)引腳:

NodeMCU 在 ESP8266 GPIO 引腳上支持 I2C 功能。由於 ESP-12E 的內部功能,我們不能將其所有 GPIO 用於 I2C 功能。因此,在將任何 GPIO 用於 I2C 應用之前進行測試。

有關 NodeMCU I2C 的更多信息,請參閱此鏈接

UART(通用異步收發器)引腳:

基於 NodeMCU 的 ESP8266 有兩個 UART 接口,UART0 和 UART1。由於 UART0 (RXD0 & TXD0) 用於將固件/代碼上傳到開發板,因此在上傳固件/代碼時我們不能在應用程序中使用它們。

有關 NodeMCU UART 的更多信息,請參閱此鏈接

 

第一版和第二版 NodeMCU Board 的區別

我們可以通過其開發板的設計和其上的 ESP 模塊在 NodeMCU 開發板的第 1 版和第 2 版中有所作為。

  • 在 NodeMCU Dev Kit v0.9 的第一個版本中,使用了 CH341SER USB 到串行轉換器,而在 NodeMCU Dev Kit v1.0 的第二個版本中,使用了 CP2102 USB 到串行轉換器。
  • 第一版使用 ESP-12,第二版使用 ESP-12E(增強版)。
  • ESP-12E 版本的 ESP-12 模塊上引出了額外的 6 個引腳(MTDO、MTDI、SD_3、MTMS、MTCK、SD_2),如下圖所示。雖然 Quad SPI 引腳被引出,但它們在內部用於閃存訪問。
  • 此外,ESP12-E 和 ESP-12F 等 ESP-12 版本的天線設計略有不同,如下圖所示。

ESP-12 模塊

ESP-12 模塊

ESP8266 模塊系列

我們還可以查看各種 ESP 模塊及其 FCC 批准的esp8266 模塊系列和摘要,如下圖所示。

ESP 模塊總結

市場中的 NodeMCU 開發套件

NodeMCU 硬件是開源的,任何人都可以編輯/修改/生產它並銷售他們修改後的 NodeMCU 開發板。一般來說,我們可以看到 NodeMCU 開發板

阿米卡

多伊特

Lolin & D1 mini /Wemos 等在市場上。

Amica 生產具有設計硬件規格的 NodeMCU ESP8266 開發板 v1.0(Version2)。大多數 V2 板由 Amica 生產。

DoIt NodeMCU 開發套件

DOIT NodeMCU 開發套件 v1.0(Version2)

NodeMCU 硬件規格

我們可以從以下對所有人開放的鏈接中查看 NodeMCU Dev Kit v0.9 硬件規格和設計。

NodeMCU DevKit v0.9

NodeMCU 開發套件示意圖

NodeMCU 開發套件 v0.9 原理圖

此外,NodeMCU Dev Kit v1.0 硬件規格和設計在以下鏈接中給出

NodeMCU DevKit v1.0

注意: -兩個版本的 ADC 模塊都使用電阻分壓器網絡(220K 和 100K)來調整 ESP8266 ADC 輸入電壓範圍從 0-1V 到 0-3.3V。由於 ESP8266 ADC 引腳的輸入模擬電壓範圍為 0-1.0V(同時讀取外部模擬電壓),NodeMCU 開發板使用此電阻分壓器網絡將其擴展到 0-3.3V。

 

ESP8266 開發板

此外,我們可以看到設計上與上述 NodeMCU 開發板不同的 ESP8266 開發板/分線板,我們可以將它們與 NodeMCU 固件一起用於物聯網應用。

以下是市場上提供的具有不同尺寸、引腳排列和規格的 NodeMCU 替代板。

Adafruit Huzzah

Adafruit Huzzah ESP8266 開發板

Adafruit HUZZAH ESP8266 突破

Adafruit 羽毛 Huzzah

Adafruit 羽毛 huzzah ESP8266 板

帶有 ESP8266 WiFi 的 Adafruit Feather HUZZAH

有趣的東西

Sparkfun 的東西 ESP8266 板

SparkFun ESP8266 東西

RobotDyn NodeM ESP8266

robotsdyn NodeMCU

RobotDyn WIFI NodeM ESP8266

WeMos D1 迷你

WeMos D1 Mini ESP8266 開發板

WeMos D1 迷你

WeMos D1 mini Pro

WeMos D1 mini Pro

WeMos D1 mini Pro

WeMos D1 迷你精簡版

WeMos D1 Mini Lite ESP8266 開發板

WeMos D1 迷你精簡版

還有一些基於應用程序的板的修改設計可用。例如,

  • D-duino V3 板,板載 OLED 顯示屏。
  • AI-Thinker A20 Plus 板帶有 GPRS+Camera 功能。

D-Duino ESP8266 開發套件

D-duino V3 ESP8266 開發套件

 

AI-Thinker A20 Plus GPRS+ESP8266(wifi)+攝像頭

AI-Thinker A20 Plus GPRS + WiFi + 攝像頭

在這裡,我們可以說市場上沒有獨特的 NodeMCU 開發板設計。如果我們遇到他們的官方板,那麼我們可以意識到 Amica 板看起來像官方版本,而其他板則不是(因為它們是應用程序設計的)。

Amica 在其 Twitter 頁面上提供了一些關於改進其開發板的要點,如下圖所示。

amica 的 NodeMCU 開發套件改進


資料來源:https://www.electronicwings.com/nodemcu/nodemcu-development-kitboard

NodeMCU 入門

 

介紹

ESP8266是樂鑫開發的  一款低成本的 Wi-Fi 芯片,採用 TCP/IP 協議。

有關 ESP8266 的更多信息,您可以參考 ESP8266 WiFi 模塊

NodeMCU 是一個基於LUA的固件,我們需要下載到 ESP8266 芯片上。

要下載 NodeMCU 固件,請訪問  https://nodemcu-build.com/

  • 輸入你的電子郵箱。

進入電子郵件窗口

  • 選擇要構建的分支

選擇分支構建窗口

  • 選擇要安裝的模塊。

例如,如果您想在 NodeMCU 中使用模擬傳感器,則選擇將提供對內置 ADC 訪問的 ADC 模型。

選擇要包含窗口的模塊

  • 我們可以為 TLS/SSL 支持、調試以及 FatFS 支持選擇其他選項,如下所示

其他選項窗口

  • 單擊開始構建。

開始構建窗口

  • 構建完成後,您將收到一封電子郵件,其中包含下載自定義固件的鏈接。點擊鏈接下載。
  • 請注意,您將獲得兩個自定義固件鏈接,一個是支持浮動的 NodeMCU,第二個是不支持浮動的 NodeMCU,即整數。
  • 如果不需要浮動支持,請下載整數支持固件 bin 文件,否則,下載浮動支持固件 bin 文件。

我們需要在 ESP8266 芯片上刷入上面下載的自定義固件。有一個名為 ESP8266Flasher 的工具,用於刷寫 ESP8266 芯片。

  • 下載ESP8266Flasher.exe

            32位:https ://github.com/nodemcu/nodemcu-flasher/tree/master/Win32/Release

            64位:https ://github.com/nodemcu/nodemcu-flasher/tree/master/Win64/Release

  • 打開ESP8266Flasher.exe並點擊配置。

安裝 NodeMCU 固件

  • 單擊設置圖標,然後選擇在第一步中下載的固件

安裝 NodeMCU 固件

  • 選擇 COM 端口(在我的情況下是 COM 7)

安裝nodemcu固件

  • 將 USB 線連接到 NodeMCU 模塊,如下圖所示

NodeMCU 與 PC 的連接

NodeMCU 與 PC 的連接

然後點擊 Flash

  • 安裝固件後會出現一個綠色勾號

安裝nodemcu固件

  • 你好!ESP8266 與 Node-MCU 固件的設置已完成!

用 Node-MCU 固件設置 ESP 後,我們來看看開發 NodeMCU 所需的 IDE(集成開發環境)。

帶有 ESPlorer 的 NodeMCU

Lua腳本通常用於對 NodeMCU 進行編碼。Lua 是一種建立在 C 編程語言之上的開源、輕量級、可嵌入的腳本語言。

有關如何為 NodeMCU 編寫 Lua 腳本的更多信息,請參閱 使用 ESPlorerIDE 開始使用 NodeMCU

帶 Arduino 的 NodeMCU

這是使用眾所周知的 IDE(即 Arduino IDE)開發 NodeMCU 的另一種方法。我們還可以使用 Arduino 開發環境在 NodeMCU 上開發應用程序。這使得 Arduino 開發人員比學習 NodeMCU 的新語言和 IDE 更容易。

有關如何為 NodeMCU 編寫 Arduino 草圖的更多信息,請參閱 使用 ArduinoIDE 開始使用 NodeMCU

 

資料來源:https://www.electronicwings.com/nodemcu/getting-started-with-nodemcu

NodeMCU簡介

 

介紹

NodeMCU 是為 ESP8266 wifi 芯片開發的基於LUA的開源固件。通過探索 ESP8266 芯片的功能,NodeMCU 固件隨附 ESP8266 開發板/套件,即 NodeMCU 開發板。

NodeMCU 開發板/套件 v0.9

NodeMCU 開發板/套件 v0.9 (Version1)

由於 NodeMCU 是一個開源平台,它的硬件設計是開放的,可以編輯/修改/構建。

NodeMCU 開發套件/板由支持 ESP8266 wifi 的芯片組成。ESP8266是樂鑫開發的  一款低成本的 Wi-Fi 芯片,採用 TCP/IP 協議。有關 ESP8266 的更多信息,您可以參考 ESP8266 WiFi 模塊

NodeMCU 開發套件有 Version2 (V2),即NodeMCU Development Board v1.0 (Version2),通常採用黑色 PCB。

NodeMCU 開發板 v1.0

NodeMCU 開發板/套件 v1.0 (Version2)

 

有關市場上可用的 NodeMCU 板的更多信息,請參閱 NodeMCU 開發板

NodeMCU 開發套件在其板上具有類似 Arduino 的模擬(即 A0)和數字(D0-D8)引腳。

它支持串行通信協議,即UART、SPI、I2C等。 

使用此類串行協議,我們可以將其與支持 I2C 的 LCD 顯示器、磁力計 HMC5883、MPU-6050 陀螺儀 + 加速度計、RTC 芯片、GPS 模塊、觸摸屏顯示器、SD 卡等串行設備連接。

如何開始使用 NodeMCU?

NodeMCU 開發板具有 wifi 功能、模擬引腳、數字引腳和串行通信協議。

要開始將 NodeMCU 用於 IoT 應用程序,我們首先需要了解如何在 NodeMCU 開發板中編寫/下載 NodeMCU 固件。在此之前,此 NodeMCU 固件將根據我們的要求獲得。

有可用的在線 NodeMCU 定製版本,我們可以根據我們的要求輕鬆獲得我們的定制 NodeMCU 固件。

要了解有關如何在線構建自定義 NodeMCU 固件和下載的更多信息,請參閱 NodeMCU 入門

如何為 NodeMCU 編寫代碼?

用 Node-MCU 固件設置好 ESP8266 後,我們來看看 NodeMCU 開發所需的 IDE(Integrated Development Environment)。

帶有 ESPlorer IDE 的 NodeMCU

Lua腳本通常用於對 NodeMCU 進行編碼。Lua 是一種建立在 C 編程語言之上的開源、輕量級、可嵌入的腳本語言。

有關如何為 NodeMCU 編寫 Lua 腳本的更多信息,請參閱 使用 ESPlorerIDE 開始使用 NodeMCU

帶有 Arduino IDE 的 NodeMCU

這是使用眾所周知的 IDE(即 Arduino IDE)開發 NodeMCU 的另一種方法。我們還可以使用 Arduino 開發環境在 NodeMCU 上開發應用程序。這使得 Arduino 開發人員比學習 NodeMCU 的新語言和 IDE 更容易。

有關如何為 NodeMCU 編寫 Arduino 草圖的更多信息,請參閱 使用 ArduinoIDE 開始使用 NodeMCU

 

使用 ESPlorer 和 Arduino IDE 的區別

好吧,在使用 ESPlorer IDE 和 Arduino IDE 開發 NodeMCU 應用程序時,我們可以說編程語言存在差異。

如果我們使用 Arduino IDE 開發 NodeMCU 應用程序,我們需要使用 C\C++ 編程語言進行編碼,如果我們使用的是 ESPlorer IDE,則需要使用 Lua 語言。

NodeMCU 基本上就是 Lua 解釋器,所以它可以很容易地理解 Lua 腳本。當我們為 NodeMCU 編寫 Lua 腳本並將其發送/上傳到 NodeMCU 時,它們將按順序執行。它不會為 NodeMCU 編寫代碼的二進制固件文件。它將按原樣發送 Lua 腳本到 NodeMCU 以執行。

在 Arduino IDE 中,當我們編寫和編譯代碼時,後台的 ESP8266 工具鏈會創建我們編寫的代碼的二進制固件文件。當我們將它上傳到 NodeMCU 時,它將使用新生成的二進制固件代碼刷新所有 NodeMCU 固件。事實上,它編寫了完整的固件。

這就是為什麼 NodeMCU 在被 Arduino IDE 刷新後不接受進一步的 Lua 腳本/代碼的原因。在被 Arduino 草圖/代碼刷新後,它將不再是 Lua 解釋器,如果我們嘗試上傳 Lua 腳本,則會出現錯誤。要再次使用 Lua 腳本,我們需要使用 NodeMCU 固件對其進行刷新。

由於 Arduino IDE 編譯和上傳/寫入完整的固件,它比 ESPlorer IDE 需要更多的時間。


資料來源:https://www.electronicwings.com/nodemcu/introduction-to-nodemcu

使用 Google 助理控製家電

 

介紹

谷歌助手是基於 AI(人工智能)的語音命令服務。使用語音,我們可以與穀歌助手進行交互,它可以在互聯網上搜索、安排事件、設置警報、控制設備等。

此服務可在智能手機和 Google Home 設備上使用。

我們可以使用 Google 助理控制智能家居設備,包括燈、開關、風扇和恆溫器。

 使用 Google Assistant 實現家庭自動化

我們將構建一個可以控製家用電器的應用程序。在這裡,我們將使用 Google Assistant 服務控制一個 60W 的燈泡。

此應用程序包括 Google 助手以及 Adafruit 服務器和 IFTTT 服務。

使用的硬件

  • NodeMCU – 帶有 Wi-Fi SoC 的 32 位 ESP8266 開發板。
  •  繼電器模塊
  • 一個 100 W 燈泡

為了構建一個家庭自動化應用程序,我使用了三個不同的平台

  • 谷歌助理
  • 阿達果
  • IFTTT

要使用上述服務,我們需要對其進行配置。

阿達果

首先,在www.Adafruit.io創建一個帳戶

 

現在,在 Adafruit 創建儀表板。此儀表板是遠程控制事物的用戶界面。

 

完成上述步驟後,為儀表板提供名稱並保存。我們可以看到我們的儀表板如下,

 

現在,創建一個提要(用戶界面)來控制燈光開關。要創建它,只需單擊 “+”符號並選擇如下所示的切換提要,

 

選擇切換提要後,將出現一個彈出窗口,如下所示。

 

輸入我們的提要的名稱(顯示在紅色框中)並創建它。創建後,選擇創建的提要(這裡我的是light),然後點擊 下一步。

在下一步中配置如下所示的提要,

 

在這裡,我使用0 (OFF) 和1 (ON) 文本作為按鈕,然後單擊創建。這將在您的儀表板上創建一個切換按鈕,可用於遠程控制事物。

 

現在,我的儀表板已準備好用於家庭自動化等物聯網應用程序。

IFTTT如果這樣然後那樣

If This Then That,也稱為 IFTTT,是一項免費的基於 Web 的服務,用於創建稱為小程序的簡單條件語句鏈。小程序由 Gmail、Facebook、Telegram、Instagram 或 Pinterest 等其他 Web 服務中發生的更改觸發。

例如,如果用戶使用主題標籤發布推文,則小程序可以發送電子郵件消息;如果有人在照片中標記用戶,則可以將 Facebook 上的照片複製到用戶的存檔中。

在這裡,我使用 IFTTT 來使用鏈上的谷歌助手服務和 Adafruit 服務。所以,當我使用谷歌助手通過說 Ok Google 來控制我家的燈時,打開或關閉燈。然後 IFTTT 解釋該消息並將其作為可理解的命令發送到 Adafruit 的儀表板以創建的提要。

配置 IFTTT

第一步是在IFTTT上創建一個賬戶

 

注意:使用與 Adafruit 相同的電子郵件 ID在 IFTTT 上創建一個帳戶。

創建帳戶後,單擊我的小程序,然後選擇如下所示的新小程序,

 

選擇一個新的小程序後,我們會得到一個新頁面,我們應該在其中單擊“ This ”,如下圖所示。

 

然後搜索Google Assistant並選擇它。

IFTTT 谷歌助手小程序

 

​​​​​​​​現在,輸入我們將用作谷歌助手命令的語音短語

 

我們可以根據我們的應用程序輸入任何短語。如您所見,在上述字段中輸入的短語是為了讓Light ON。為了使Light OFF,我們必須創建另一個具有不同短語的小程序。

現在,我們得到另一個頁面,我們必須在該頁面上單擊用於連接 Google Assistant 和 Adafruit 的選項

 

然後搜索Adafruit並選擇它。

 

選擇Adafruit後,如下圖選擇action,

​​​​​​​​​

 

現在輸入我們需要將哪些數據發送到 Adafruit 儀表板的哪個提要

 

單擊創建操作。

因此,當我在手機上使用 Google Assistant 並發出語音命令“Ok Google,打開 LED”時,在 IFTTT 中創建的小程序會收到此命令並將數據“1”發送到 Adafruit 提要。這將觸發由微控制器(此處為 NodeMCU)持續監控的 Adafruit 儀表板上的事件。該微控制器將根據 Adafruit 儀表板上的數據變化採取行動。

​​​​​​​​​​​​​​​

接口圖

 

圖書館

在這裡,我使用 Adafruit MQTT 庫從 Adafruit 服務器接收數據。要安裝此庫,請選擇選項Sketch -> Include Library -> Manage Libraries。

在那個庫中,搜索 Adafruit MQTT 並安裝它。

使用 Google Assistant 和 NodeMCU 控製家中的燈光

我構建了一個基於物聯網的家庭自動化應用程序,在該應用程序中,我使用基於 AI 的 Google Assistant 遠程控制 100 W 燈泡。

在這裡,我使用 NodeMCU 從 Adafruit 服務器讀取數據並採取相應措施。100 W 燈泡通過繼電器連接到 NodeMCU,用於使用谷歌助手控制其語音命令。 

程序

 
#include <ESP8266WiFi.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"

#define Relay1            D1

#define WLAN_SSID       "Enter SSID NAME"             // Your SSID
#define WLAN_PASS       "SSID Password"        // Your password

/************************* Adafruit.io Setup *********************************/

#define AIO_SERVER      "io.adafruit.com"
#define AIO_SERVERPORT  1883                   // use 8883 for SSL
#define AIO_USERNAME    "Enter your UserName"            // Replace it with your username
#define AIO_KEY         "Enter you AIO_KEY"   // Replace with your Project Auth Key

/************ Global State (you don't need to change this!) ******************/

// Create an ESP8266 WiFiClient class to connect to the MQTT server.
WiFiClient client;
// or... use WiFiFlientSecure for SSL
//WiFiClientSecure client;

// Setup the MQTT client class by passing in the WiFi client and MQTT server and login details.
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);

/****************************** Feeds ***************************************/


// Setup a feed called 'onoff' for subscribing to changes.
Adafruit_MQTT_Subscribe Light1 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME"/feeds/Enter your Feed Name"); // FeedName

void MQTT_connect();

void setup() {
  Serial.begin(115200);

  pinMode(Relay1, OUTPUT);

  // Connect to WiFi access point.
  Serial.println(); Serial.println();
  Serial.print("Connecting to ");
  Serial.println(WLAN_SSID);

  WiFi.begin(WLAN_SSID, WLAN_PASS);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println();

  Serial.println("WiFi connected");
  Serial.println("IP address: "); 
  Serial.println(WiFi.localIP());
 

  // Setup MQTT subscription for onoff feed.
  mqtt.subscribe(&Light1);
}

void loop() {
 
  MQTT_connect();
  
  Adafruit_MQTT_Subscribe *subscription;
  while ((subscription = mqtt.readSubscription(5000))) {
    if (subscription == &Light1) {
      Serial.print(F("Got: "));
      Serial.println((char *)Light1.lastread);
      int Light1_State = atoi((char *)Light1.lastread);
      digitalWrite(Relay1, !(Light1_State));
      
    }
  }
}

void MQTT_connect() {
  int8_t ret;

  // Stop if already connected.
  if (mqtt.connected()) {
    return;
  }

  Serial.print("Connecting to MQTT... ");

  uint8_t retries = 3;
  
  while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected
    Serial.println(mqtt.connectErrorString(ret));
    Serial.println("Retrying MQTT connection in 5 seconds...");
    mqtt.disconnect();
    delay(5000);  // wait 5 seconds
    retries--;
    if (retries == 0) {
      // basically die and wait for WDT to reset me
      while (1);
    }
  }
  Serial.println("MQTT Connected!");
  
}

 


資料來源:https://www.electronicwings.com/nodemcu/control-home-appliances-using-google-assistant