2019年2月24日 星期日

模組介紹 : faya Wi-FI模組


學習目標 : 認識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>;
            模擬串列界面(UART)時,務必指示SoftwareSerial.h函式

    • SoftwareSerial 物件名稱(RxDPin, TxDPin);
            此指令用來建構SoftwareSerial物件並定義模擬的UART腳位

            物件名稱 : 可自行命名
            RxDPin : 連接到Arduino模擬的RxD腳位,對於Wi-Fi模組而言是TxD
            TxDPin : 連接到Arduino模擬的TxD腳位,對於Wi-Fi模組而言是RxD

           (例) 當建構物件名稱為"fayaWiFi",RxD設到第4腳,TxD設到第5腳時,需宣告:

                 SoftwareSerial fayaBluetooth(4,5);

    • 物件名稱. begin(BaudSpeed);
          此指令用來定義UART的速度 (鮑率:baud rate)

          物件名稱 : 可自行命名
          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
    - L29~L33: 讓兩個UART介面互相溝通,Serial.read 和 Serial.write是Arduno對電腦超級終端機的讀取和寫入,fayaWiFi.read和fayaWiFi.write是Arduino對Wifi模組的讀取和寫入
    ~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本篇留言版

    沒有留言:

    張貼留言