學習目標 : 認識faya WI-FI 模組的功能及使用方式
學習時間 : 45mins
示範模組 : (1) fayaduino Nano
(2) faya Wi-Fi模組
其他工具 : (1) 樂高積木底板 (相容)
(2) 無線基地台
====================功能介紹====================
faya Wi-Fi模組採用了ESP-8266無線模組,它是一款超低功耗的 UART-WiFi 傳輸模組,專為移動裝置和物聯網應用設計,可將用戶的物理裝置連線到 Wi-Fi 無線網路上,進行互聯網或區域網路通訊,實現聯網功能。 ESP8266 可廣泛應用於智能電網、智能交通、智能家具、手持裝置、工業控制等網域。
產品特徴 (取自ESP8266模組使用手冊)
- 支援無線 802.11 b/g/n支援 STA/AP/STA+AP 三種工作型態
- 內建 TCP/IP 協定堆疊,支援多路 TCP Client 連線
- 支援豐富的 Socket AT 指令
- 支援 UART/GPIO 資料通訊介面
- 支援 Smart Link 智能聯網功能
- 支援遠端韌體升級(OTA)
- 內建 32 位 MCU,可兼作應用處理器
- 超低能耗,適合電池電源供應應用
WiFi為常見的無線通訊設備,假如你手邊有行動裝置如:智慧型手機、平板電腦,絕大部分都有這功能。傳輸方式從簡單到難都有,使用UART資料傳輸,只需將模組上的TxD(資料傳送)、RxD(資料接收)連接到Arduino板,並將通訊速度(鮑率:baud rate)設定完成後,就可以傳送資料。
faya Wi-Fi模組將ESP8266的接腳轉換成排母,方便和Arduino或faya的電子積塊互相連接。
Arduino板的UART: TxD(1)、RxD(0)腳是用來燒錄程式用的,如果用來連接WIFI模組,會無法燒錄程式,所以必須使用程式指令(SoftwareSerial)模擬其他的UART腳位。
- #include<SoftwareSerial.h>;
- SoftwareSerial 物件名稱(RxDPin, TxDPin);
物件名稱 : 可自行命名
RxDPin : 連接到Arduino模擬的RxD腳位,對於Wi-Fi模組而言是TxD
TxDPin : 連接到Arduino模擬的TxD腳位,對於Wi-Fi模組而言是RxD
(例) 當建構物件名稱為"fayaWiFi",RxD設到第4腳,TxD設到第5腳時,需宣告:
SoftwareSerial fayaBluetooth(4,5);
- 物件名稱. begin(BaudSpeed);
物件名稱 : 可自行命名
BaudSpeed : 設定以下常用的鮑率:2400、4800、9600、19200、38400、115200,ESP8266
內建的baudrate為115200,但新的韌體版本為9600,因此連不上時,可以兩種
速率都試試看。
(例) 當我們建構一物件名稱為"fayaWiFi",鮑率為9600bps時,程式中需宣告
fayaBluetooth.begin(9600);
以上舉了幾個模擬的串列連接埠使用範例,基本上用法和一般的串列連接埠使用方式 相同,有興趣的人可以參考官方網站
====================原理知識====================
無線網路的傳輸原理相當繁雜,無法靠一篇文章就能通盤理解,幸運的是複雜的動作都已經交由硬體晶片(ESP8266)來完成,使用者只要了解如何讓資料正確地透過網路傳送和接收即可即可,因此我們這一篇教學希望能夠用邊做邊解釋的方式,讓大家能夠順利地初步控制wi-fi模組,在下一篇教學才能銜接進階的應用。
有興趣深入了解ESP8266的使用者,可以參照模組資料集。faya Wi-Fi模組電路圖如下,模組單純地將ESP8266腳位引出,並將電壓轉成3.3V。
====================範例實作(一)=================
了解模組功能(原理)後,我們用以下範例來展示模組的功能:
目標:
(1) 利用Arduoino Serial Monitor手動輸入AT Command讓Wi-Fi模組與無線基地台連線
接線:
(1) 電源線連接如下圖所示,連接的說明請看這篇文章或簡易版(2) 訊號線連接:
Arduino ==> faya Wi-Fi 模組
D4 ==> TX
D5 ==> RX
範例程式:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 2019/2/25 | |
// Faya-Nugget 範例程式 (wifi_1.ino) | |
// 單元: 模組介紹:faya Wi-Fi模組 | |
// 網址: https://fayalab.blogspot.com/2019/02/WiFi.html | |
// 目標: (1) Arduino和Wi-Fi模組連線 | |
// (2) 透過Arduino串列傳輸介面對Wi-Fi模組傳出指令 | |
// 接線: Arduino ==> faya模組 | |
// 4 ==> TxD (Wi-Fi 模組) | |
// 5 ==> RxD (Wi-Fi 模組) | |
#include <SoftwareSerial.h> | |
// Wi-Fi腳位設定 | |
int RxDPin = 4; // Arduino Rx 連到Wi-Fi模組 Tx | |
int TxDPin = 5; // Arduino Tx 連到Wi-Fi模組 Rx | |
//定義Arduino連接到Wi-Fi模組的串列腳位 | |
SoftwareSerial fayaWiFi(RxDPin, TxDPin); | |
void setup() { | |
Serial.begin(9600); // Arduino串列埠baurRate = 9600 | |
Serial.println("Arduino = 9600bps...Done"); | |
fayaWiFi.begin(115200); // ESP8266預設baudrate = 115200 | |
fayaWiFi.write("AT+UART_DEF=9600,8,1,0,0\r\n"); //將baudrate 改成9600 | |
delay(1500); // 等待修改時間 | |
fayaWiFi.begin(9600); // baudrate 改成9600,和Arduino傳輸介面一致,降低緩衝而產生顯示錯誤問題 | |
Serial.println("ESP8266 = 9600bps...Done"); | |
} | |
void loop() { | |
if (fayaWiFi.available()) { // 當WiFi串列埠可接收到資料時 | |
Serial.write(fayaWiFi.read()); // 將Wi-Fi串列埠所讀到的寫到Adruino串列埠 | |
} | |
if (Serial.available()) { // 當Adruino串列埠可接收到資料時 | |
fayaWiFi.write(Serial.read()); // 將Adruino串列埠所讀到的寫到Wi-Fi串列埠 | |
} | |
} |
備註:
- L22~25:將wifi模組baudrate設為9600,方便和Arduino的9600 baudrate傳輸,避免兩邊速度不一致,造成讀取資料時會有誤碼產生。
- L22~25: ESP82662預設的baud rate為115200,最新的版本為9600,使用這四行的程式可以將baudrate強制轉為9600 (無論原始baudrate為多少)。L22先設定baudrate為115200:
- 假設使用者的模組baudrate為115200,此時就會繼續執行L23~25,將baudrate轉成9600。
- 假設使用者的模組baudrate為9600,此時由於baudrate不正確,無法讀取L22的指令,因此L23和L24的指令也會失效,但L25的指令是會執行的,因此同樣得到9600bps 的baudrate
~L30: Arduino讀到WiFi傳來的字串,會顯示在電腦終端機上
~L32: Arduino獨到電腦終端傳來的字串,會送給WiFi執行
範例結果:
程式下載完成,開啟終端機,右下角的地方選擇[Both NL & CR] / [9600 baud],出現以下畫面後,我們就可以對WiFi模組輸入AT指令了
關於ESP8266 AT指令,大家可以參考這邊
首先輸入[AT] ,看是否獲得[OK]的回應,以確認連線已建立
輸入[AT+GMR],取得韌體版本
輸入[AT+CWMODE=1],將WiFi模組設成Station 模式
輸入[AT+CWLAP],顯示附近的無線基地台
上圖列了4個無線基地台,我們用指令[AT+CWJAP="TECH4F","xxxxxxxxxx"]加入TECH4F基地台,其中的xxxxxxxxxx是無線基地台的密碼
連上無線基地台後,我們用[AT+CIFSR]指令查看ESP8266的IP位址和MAC位址
完成了以上動作後,我們就可以透過WiFi模組和其他的裝置連線,我們會在下一次的教學中介紹。
討論:
- ESP8266中很多的設定只要下一次指令,就會把設定永久存在ESP8266模組中,例如我們在程式中把baudrate設定成9600bps,下次開機時,模組就直接變成9600bps,我們又手動將模組設定成Station模式,並且設定了無線基地台的帳號和密碼,這些動作讓下次開基的時候,模組就會搜尋此基地台並且進行連線。
- 在範例中我們介紹如何手動設定指令讓WiFi連線,那麼如何自動的設定指令已達成自動連線個功能呢? 只要利用println指令即可,請參考下面的程式,將手動連線的動作轉成程式碼,連線成功後,一樣可以利用終端機手動下[AT+CIFSR]指令查詢是否連到基地台。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 2019/2/25 | |
// Faya-Nugget 範例程式 (wifi_2.ino) | |
// 單元: 模組介紹:faya Wi-Fi模組 | |
// 網址: https://fayalab.blogspot.com/2019/02/WiFi.html | |
// 目標: (1) Arduino和Wi-Fi模組連線 | |
// (2) 自動連線WiFi | |
// 接線: Arduino ==> faya模組 | |
// 4 ==> TxD (Wi-Fi 模組) | |
// 5 ==> RxD (Wi-Fi 模組) | |
#include <SoftwareSerial.h> | |
String ssid = "TECH4F"; // ""內輸入wifi基地台的名稱 | |
String password = "1234567890"; // ""內輸入wifi基地台的密碼 | |
// Wi-Fi腳位設定 | |
int RxDPin = 4; // Arduino Rx 連到Wi-Fi模組 Tx | |
int TxDPin = 5; // Arduino Tx 連到Wi-Fi模組 Rx | |
//定義Arduino連接到Wi-Fi模組的串列腳位 | |
SoftwareSerial fayaWiFi(RxDPin, TxDPin); | |
void setup() { | |
Serial.begin(9600); | |
Serial.println("Arduino = 9600bps...Done"); // Arduino串列埠baurRate = 9600 | |
fayaWiFi.begin(115200); // ESP8266預設baudrate = 115200 | |
fayaWiFi.write("AT+UART_DEF=9600,8,1,0,0\r\n"); //將baudrate 改成9600 | |
delay(1500); // 等待修改時間 | |
fayaWiFi.begin(9600); // baudrate 改成9600,和Arduino傳輸介面一致,降低緩衝而產生顯示錯誤問題 | |
Serial.println("ESP8266 = 9600bps...Done"); | |
fayaWiFi.println("AT+CWMODE=1"); // 設定成Station模式 | |
delay(1000); | |
fayaWiFi.println("AT+CWJAP=\"" + ssid + "\",\"" + password + "\""); //與設定的wifi連線 | |
} | |
void loop() { | |
if (fayaWiFi.available()) { // 當WiFi串列埠可接收到資料時 | |
Serial.write(fayaWiFi.read()); // 將Wi-Fi串列埠所讀到的寫到Adruino串列埠 | |
} | |
if (Serial.available()) { // 當Adruino串列埠可接收到資料時 | |
fayaWiFi.write(Serial.read()); // 將Adruino串列埠所讀到的寫到Wi-Fi串列埠 | |
} | |
} |
====================================
fayalab 粉絲團
FB本篇留言版
沒有留言:
張貼留言