學習目標 : 認識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
範例程式:
備註:
- 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]指令查詢是否連到基地台。
====================================
fayalab 粉絲團
FB本篇留言版
沒有留言:
張貼留言