13-ESP8266

  • ESP8266 是一個超便宜的 wifi 晶片

  • ESP8266 有分成一大堆 ESP01 ~ ESP12..,晶片是樂鑫出的,這些不同型號是由 ai-thinker 製造的,依照不同用途有不同的規格

  • 且不一樣的型號還有不同的 flash size,可以看板子上面的 flash 晶片有寫(看到脫窗就會看到上面的字了),為什麼要注意 flash size 呢?會影響韌體可以更新的版本,ESP01 黑色的(上)是新版 flash size 會比較大喔!我的是藍色的是舊版的

  • ESP01接腳

  • 圖中的GND代表 Ground,即電源負極接腳。VCC則代表電源正極接腳。ESP8266需要 3.3V (可接受範圍1.7~3.6V)的電源輸入,若使用 5V電源會把它燒毀!要特別注意的是,ESP8266的電流消耗可達200~300mA,電源必須能提供足夠的電流,以確保它正常運作。圖中的UTXD 和 URXD,是主要用來與電腦連接通訊的兩個接腳,TX表示它是用來發送訊號,RX則表示它是用來接收訊號。

  • 要特別注意的是,你所買到的 ESP8266中所安裝的韌體是哪一個版本的。對於較舊的版本,他們的 Baud Rate一般是設置為 115200 或 57600,只有最新版(通常需要手動更新)的韌體(版本0018000902)的預設 Baud Rate才會是9600。所以,我們就必須拿這幾個數值去嘗試,看看能否與 ESP8266通訊。

(2017/01/21測試新購買esp-01

第一次使用的相關資訊,_

  • 參考資料

    • http://lets-make-games.blogspot.tw/2015/04/wifi-esp8266-wifi.html

    • http://ruten-proteus.blogspot.tw/2014/12/esp8266-at-command.html

    • http://ruten-proteus.blogspot.tw/2014/12/esp8266-firmware-burning.html

    • 以下資料取自http://lets-make-games.blogspot.tw/2015/04/wifi-esp8266-wifi.html

    • (三)透過指令(AT Command)去操作 ESP8266

    • 如我前面所述,當 ESP8266完成韌體更新之後,它的 Baud Rate就會自動變成 9600。因此接下來我們要重新與 ESP8266連接時,就需要使用 9600的 Baud Rate設定去與它連接。

    • 我們一樣可以先使用 Realterm軟體,輸入「AT」與「AT+GMR」這兩個基本指令去測試它。

    • 測試成功後,我們可以繼續用其他指令,來測試 ESP8266的核心網路功能。

    • 以下會先把 ESP8266進行網路連線的流程和概念介紹一遍。實際的操作範例會放在最後面。

    • Wifi連線

    • 首先,我們必須想辦法讓 ESP8266連進行 Wifi連線。

    • ESP8266的Wifi連線有三種模式:

        1. Station模式:扮演連線到現有Wifi的裝置。

        2. AP模式:扮演無線基地台,提供Wifi環境供連線。

        3. Station+AP混合模式:允許同時使用以上兩種模式的特有功能。

    • 透過以下的指令,我們就可以設定或取得目前Wifi連線模式:

    • 指令「AT+CWMODE」

    • 「AT+CWMODE?」查詢當前模式

    • 「AT+CWMODE=2」將模式設定為第2種(AP模式)。

    • 我們最好先把 ESP8266設定到我們想要的模式,再使用其他的指令來連線。因為,有些指令只能在特定的模式中使用,使用指令時必須特別注意。

    • 首先,我把模式設定成「1. Station模式」。讓 ESP8266去連接現有的 Wifi網路。那麼,我們要怎麼知道有哪些現有的網路可供連線呢?

    • 這時我們就要使用以下指令:

      • 指令「AT+CWLAP」

      • 顯示可連線的Wifi網路清單。

    • 知道有哪些網路之後,我們就可以選一個 Wifi網路來連線了。要進行連線必須使用以下指令:

      • 指令「AT+CWJAP」

      • 「AT+CWJAP=<SSID>,<Password>」連線到已存在的無線網路。

      • 「AT+CWJAP?」查詢已連線到的無線網路。

      • <SSID>:無線網路的識別名稱(要加雙引號)。

      • <Password>:無線網路的密碼(要加雙引號)。

    • 如果需要切斷 Wifi連線,我們可以也可使用這個指令:

      • 指令「AT+CWQAP」

      • 切斷已連線的無線網路。

      • 與目標裝置連線

    • 雖然 ESP8266 已經連線到 Wifi,但是如果 ESP8266要跟同一個 Wifi中的其他裝置通訊,就必須要再跟該裝置建立 Socket連線。

    • ESP8266有兩種跟裝置建立 Socket連線的方式:

        1. 由 ESP8266扮演伺服器,等候其他裝置(客戶端)來與自己連接。

        2. 由其他裝置扮演伺服器,由 ESP8266(扮演客戶端)去主動連接該伺服器。

    • 這兩種不同的方式,適合不同的情況,各有利弊。

    • 一般來說,伺服器扮演的是類似店家的角色,必須經常保持待命,不可以隨便從Wifi中離線,否則客戶端就會找不到伺服器。所以我們必須評估連線的兩端,誰比較適合當伺服器或客戶端。或者連線的兩方都扮演客戶端,而讓第三方扮演伺服器,作為兩客戶端之間的橋梁,為他們轉送資訊。

    • 當然,如果你只是要做個自己玩的玩具,想讓手機和遙控車一對一連線,那其實選哪個都可以,丟銅板隨便選一個就好。

    • 要特別注意的是,如果要讓 ESP8266進入伺服器模式,必須先進行「多重連線」的設定。這個設定會影響 ESP8266是否能夠進行一對多的連線。而只有當「多重連線」被設定為開啟,ESP8266才能夠進入伺服器模式。

      • 指令「AT+CIPMUX」

      • 「AT+CIPMUX?」查詢目前的設定值

      • 「AT+CIPMUX=1」允許一對多的多重連線。

      • 「AT+CIPMUX=0」關閉多重連線,只能一對一連線。此時無法進入伺服器模式。

    • 現在,我們可以來決定要讓 ESP8266扮演伺服器或客戶端了。

    • 如果要讓 ESP8266扮演伺服器,等候客戶端的連線,我們需要使用以下指令:

      • 指令「AT+CIPSERVER」

      • 「AT+CIPSERVER= <mode>[,<port>]」開啟(或關閉)伺服器,等候客戶端透過指定的連接埠(Port)連線。

      • <mode>:0關閉伺服器,1開啟。

      • <port>:網路連接埠號碼。範圍從 0~65535皆可。連線到伺服器的裝置必須知道連接埠(Port)號碼才能進行連線。一般根據不同的用途,會有慣用的連接埠號碼,不過並沒有強制性。我們可以在49152到65535之間選一個號碼即可。

    • ※注意:這裡的 Port和文章前半段所說的 Port是不同的東西。前面提到的 Port是「序列埠」(Serial Prot 或 COM Port),而此處的 Prot是「網路連接埠」(TCP/UDP Port)。

    • 如果要讓 ESP8266扮演客戶端,對伺服器進行連線,我們需要使用以下指令:

      • 指令「AT+CIPSTART」

      • 「AT+CIPSTART=?」查詢目前已經建立的連線資訊。

      • 「AT+CIPSTART =<type>,<addr>,<port>」建立連線,只適用於CIPMUX=0的情況。

      • 「AT+CIPSTART=<id>,<type>,<addr>,<port>」建立連線,只適用於CIPMUX=1的情況。

      • <id>:範圍 0~4。推測最多可以連線到5台伺服器,這是用來代表此連線的代號。

      • <type>:連線類型,可為"TCP"或"UDP"(要加引號)。

      • <addr>:連線的 IP位址,如"192.168.43.31"(要加引號)。

      • <port>:伺服器接受連線的連接埠(Port)號碼(這個不用加引號)。

  • 如果我們讓 ESP8266扮演伺服器,那麼我們必須知道 ESP8266的 IP位址,如此其他裝置才能根據這個 IP與 ESP8266連線。透過這個指令,我們就可以查詢到 ESP8266的 IP位址。

    • 指令「AT+CIFSR」

    • 顯示 ESP8266自己目前的 IP位址。

  • 一旦連線建立之後,我們就可以透過以下指令傳送訊息:

    • 指令「AT+CIPSEND」

    • 「AT+CIPSEND=<length>」只適用於 CIPMUX=0 的情況。

    • 「AT+CIPSEND=<id>,<length>」只適用於 CIPMUX=1 的情況。

    • <id>:在多重連線的情況下,需要輸入連線的代號,ESP8266才會知道要把訊息發送給哪一條連線。

    • <length>要發送的訊息長度。等到此指令發送出去之後,會出現「>」符號在螢幕,這時就可以輸入符合訊息長度的訊息。

  • 最後如果要中斷連線,則可以使用以下指令:

    • 指令「AT+CIPCLOSE」

    • 「AT+CIPCLOSE=<id>」中斷指定的連線。適用於 CIPMUX=1 的情況

    • 「AT+CIPCLOSE」中斷連線。適用於 CIPMUX=0 的情況

    • <id>:要中斷的連線代號。

  • ※其他完整的指令,請參閱這個檔案(備用載點)。

    • 實際操作範例

    • 以下我使用更新過韌體,Baud Rate為9600的 ESP8266進行操作。

    • 首先我輸入「AT」和「AT+GMR」指令進行測試,並得到以下的結果:

    • 接著,我想將 ESP8266連線到我的 Wifi「commandship」。

    • 我先把的 Wifi連線模式設為 Station模式:

    • AT+CWMODE=1

    • 由於我之前已經將它的模式設定為1了 (它在斷電重開後仍然會保留設定),因此得到的回應為「No Change」:

    • 列出目前的Wifi清單:

    • AT+CWLAP

  • 回應:

  • 在這串裡面,我們看到共有四個Wifi被找到,而其中就有我要找的 Wifi:"commandship"。

    • 現在,就要來與它連線了。

    • 指令與回應:

    • AT+CWJAP="commandship","123456789"

    • OK

  • 現在我們成功連線到 Wifi了。

  • 接著,我要把「多重連線」打開,並讓 ESP8266進入伺服器模式,等候其他裝置與它連線:

    • AT+CIPMUX=1

    • OK

    • AT+CIPSERVER=1,8087

    • OK

    • 好了,現在 ESP8266已經進入伺服器模式了。接著我們還需要知道它的 IP,這樣別的裝置才能透過這個 IP與它連線通訊:

      • AT+CIFSR

      • 192.168.43.45

      • OK

    • 接著我們需要準備另一個連到同一個 Wifi的裝置,去跟 ESP8266連線通訊。我決定使用我自己的筆記型電腦,讓它也連到 Wifi:"commandship"。這樣一來,我的筆電就可以與 ESP8266通訊了。