Arduino UNO WiFi = Arduino UNO板 + ESP8266

2016年元旦當天,收到Arduino S.R.L公司(arduino.org)創辦人Federico Musto先生寄來的聖誕禮物:Arduino UNO WiFi控制板

Arduino UNO WiFi控制板

跟新的Arduino系列控制板一樣,UNO WiFi板的排插外側有印上接腳的編號(所以我們不用自己搞貼紙DIY了):

Arduino UNO WiFi控制板

這張控制板的尺寸和UNO一樣,板子上整合了Arduino UNO和ESP8266(具備Wi-Fi網路連線的系統級晶片)。它採用ATmega328微控器執行Arduino程式,並且同樣採用ATmega16U2作為USB序列埠通訊晶片。廣告一下,ESP8266的說明和程式設計請參閱《超圖解物聯網IoT實作入門》第12和13章。

Arduino UNO WiFi控制板

ESP8266晶片透過序列通訊介面連接其他微控器(如:Arduino板),但由於Arduino控制板的序列埠肩負接收程式碼的重責大任,因此,UNO WiFi板採用NXP(恩智浦半導體)的SC16IS750IBS序列轉I2C/SPI介面的晶片,把EP8266的序列介面轉換成I2C,再連接到Arduino的ATmega328微控器。

SC16IS750IBS序列轉I2C/SPI介面的作用

平時,Arduino UNO的網路資料經由I2C介面(亦即:A4和A5腳)傳送到SC16IS750IBS,再從這個晶片的序列埠,轉送給ESP8266晶片,反之亦然。

上傳程式給Arduino時,除了透過控制板的USB介面,也可以用Wi-Fi無線方式上傳。透過無線上傳程式時,程式檔將從ESP8266的序列埠直接傳入Arduino的序列埠。ESP8266的序列埠和I2C介面通訊會依照使用情況自動切換,我們的程式碼無須介入。

設置Wi-Fi網路和ESP8266的運作模式

Arduino Uno WiFi板子上的16M bit(2MB)快閃記憶體,用於儲存ESP8266的韌體,此網路晶片的預設工作模式為AP+STA,也就是同時充當網路基地台(Access Point)和無線終端設備(Station)。

若要啟用OTA(Over The Air,無線上傳程式碼)功能,ESP8266必須先設置成STA(無線終端)模式。Arduino UNO WiFi的無線網路參數,都是用瀏覽器設置。設置參數之前,要先透過Wi-Fi連接此控制板。

接上電源之後不久,即可探尋到此控制板的Wi-Fi訊號:

連接Arduino UNO WiFi的無線網路

連上Arduino Uno WiFi基地台,再透過瀏覽器連接到http://192.168.240.1/網址,即可進入此控制板的無線網路設置畫面。

Arduino UNO WiFi的無線網路設置畫面

這個網頁程式存在EP8266韌體中,可顯示無線網路的運作狀況和資訊,例如,IP位址、MAC位址、工作模式…等等,也有提供一個相當於無線版「序列埠監測視窗」的WiFi Console(WiFi控制台)

在WIFI設定畫面,設定讓無線網路連接到家裡的無線路由器之後,再按下右上角的SWITCH TO STA MODE(切換到連線終端模式),詳細的操作說明可參閱arduino.org網站的Getting started with Arduino UNO WiFi

設定成STA模式,UNO WiFi板便失去無線基地台(AP)的能力,但仍具備網路連線功能。連接UNO WiFi板的電腦,必須和它連線到相同的無線網路環境。UNO WiFi板預設的主機名稱是“arduino”,透過“arduino.local”網址,即可開啟它的網路設定頁面:

http://arduino.local/

使用Arduino IDE 1.7.10版撰寫程式

Arduino UNO WiFi控制板是Arduino S.R.L公司的產品,請使用該公司的新版Arduino IDE(目前是1.7.10版)來編寫程式。Arduino S.R.L公司的Jeff告知,在今年五月舊金山Maker Faire會展中,該公司宣佈計劃未來會透過add-on platform packages(外掛平台套件)來支援arduino.cc的Arduino IDE,減少開發者使用Arduino IDE的困擾。

先在IDE主功能表的「工具→板子」選擇Arduino Uno WiFi板,再從「工具→序列埠」選擇有線序列埠(如下圖中的COM5),或者網路埠(如下圖中的arduino at 192.168.7.185)。

使用Arduino IDE 1.7.10版撰寫程式

這項「網路埠」連線功能,可讓開發人員在遠端更新Arduino控制板的軟體。

Arduino UNO WiFi網路程式入門

以往,Arduino都是透過乙太網路或者Wi-Fi無線網路擴展板(像Arduino官網的這一款WiFi Shield)連接網際網路,這兩種方案都使用SPI介面與Arduino控制板相連。

Arduino UNO WiFi板的ESP8266晶片則是經由I2C連接Arduino微控器,加上每個網路晶片的控制方式都不一樣,所以UNO WiFi板的網路程式也不同於乙太網路程式;若不使用Wi-Fi網路功能,這塊板子的程式設計方式和普通的UNO相同。

乙太網路以及UNO WiFi的連接方式

在連接乙太網路模組的情況下,Arduino UNO板的數位10~13腳無法挪作他用;Arduino UNO WiFi則是犧牲了A4和A5兩個類比腳。

Arduino S.R.L公司(arduino.org)創辦人Federico Musto先生

底下的程式將使用Arduino IDE內建的WebSever(網站伺服器)範例,說明UNO WiFi板的程式架構。上傳此程式碼之後,使用者將能透過底下的網址讀取UNO WiFi板的自製網站:

讀取UNO WiFi板的自製網站的URL網址

我們自訂的網路程式路徑,始終被附加在arduino.local/arduino/後面。底下是WiFi網站伺服器程式的架構,由於無線網路的IP、閘道器(gateway)位址…等參數,都是透過瀏覽器設置,所以我們的程式碼裡面不需要設定:

WiFi網站伺服器程式的架構

其中負責處理前端資料的WiFiData類型,定義在ArduinoWiFi程式庫資料夾裡的SC16IS750.h檔案中。每當有用戶連接此控制板時,process()自訂函式將讀取URL網址最後面的參數,其值若是“webserver”,則呼叫WebServer()自訂函式輸出網頁,若非“webserver”,ESP8266會自行在網頁上輸出“Not found.”(查無此資源)。

修改自Arduino IDE內建的WebSever(網站伺服器)範例的完整程式碼如下:

乙太網路和WiFi擴展板程式,都是透過底下的語法中斷用戶端的連線:

client.stop();

UNO WiFi控制板則是透過這個敘述中斷連線,其中的DELIMITER常數也是定義在SC16IS750.h檔案裡面:

client.print(DELIMITER);

延伸閱讀

87 thoughts on “Arduino UNO WiFi = Arduino UNO板 + ESP8266

    1. 嗯…不過,UNO WiFi和Yun,都是arduino.org位於台北的Dog Hunter設計團隊的成果,台灣設計、義大利製造。

      thanks,
      jeffrey

  1. 你好,我是初3的學生,想要請教一下如何作出像ethernet的webclient程式連接其他伺服器呢?

    1. 咦~jeff~你該不會是今年6月3日晚上參加arduino.org舉辦的Maker+Pizza活動的那位學生吧??

      用Arduino Uno WiFi當作webclient… 好問題,我還沒試過,測試後告訴你,拍謝。

      thanks,
      jeffrey

    2. 從Uno WiFi的範例程式得知,讓Uno WiFi當作前端連接網站伺服器的程式,必須透過Ciao(橋接器)程式庫連接無線網路晶片,Ciao提供的write()方法用於對伺服發出連線資料。

      執行Ciao的write方法之前,程式還要指定連接器(connector)類型,我們可以把「連接器」看待成「線路轉接頭」,在連接HTTP網站伺服器的場合,連接器類型請設定成”rest”。

      筆者使用Node.js建立一個簡易的網站伺服器程式,它的rnd路徑將能接收一個r參數:

      假設網站伺服器的IP是 192.168.7.101,那麼,在瀏覽器中輸入 “192.168.7.101/rnd?r=12″,伺服器將會在終端機視窗顯示「 隨機數字: 12」。

      Arduino Uno WiFi的測試程式碼如下,它將每隔10秒連線到 192.168.7.101網站伺服器,並且送出一個隨機數字:

      thanks,
      jeffrey

  2. 您好~我最近照著 超圖解物聯網IoT實作入門 第十二章 實作透過Arduino執行ESP8266的AT command,確定線路都沒問題,不管下任何指令都沒有回覆,請問有什麼可能原因嗎?p.s.透過CP2102轉接板則能正常執行

    1. 蛤?CP2102可以,Arduino卻不行?可是,它們倆個只是晶片型號不同,功能一樣欸。
      請把送出AT命令的那一行敘述,也就是ESP.print()改成ESP.write()試試看。

      thanks,
      jeffrey

    2. 如果你確定線路, Arduino和ESP8266都沒有問題的話, 建議你可以把ESP8266″完全斷電”(我有自己做一塊3.3V供電的擴充板, ESP8266直接插在擴充板上).
      我的情況是, 線路、Arduino和ESP8266之前使用都是正常, 是忽然間在Serial Monitor裡下AT command完全沒有反應. 之前遇到這個情況, 我都是重刷ESP8266的韌體就好了. 但後來發現, 只要把ESP8266 “完全斷電”(不是只有拔除擴充板的電源而已, 是把ESP8266從擴充板上拔下), 過個幾秒再插上, 其它東西都沒動, 再下AT command就出來了…
      至於是什麼原因我不確定, 因為電子元件我不是很熟, 詳細情形可能要查查看有沒有相關的官方文件說明了.

  3. 你好,我按照你寫在評論區的教程做了一個那種的node.js伺服器,成功訪問并返回隨機數到終端,然而試圖使用你給出的Arduino Uno WiFi的測試程式碼透過Arduino IDE上傳到板子上卻失敗。錯誤提示是:

    Arduino:1.8.0 (Mac OS X), 开发板:”Arduino Uno WiFi”

    In file included from /Users/pgool/Documents/Arduino/draft_ciao/draft_ciao.ino:1:0:
    /Users/pgool/Documents/Arduino/libraries/Ciao/src/Ciao.h:42:2: error: #error CPU not yet supported
    #error CPU not yet supported
    ^
    exit status 1
    为开发板 Arduino Uno WiFi 编译时出错。

    似乎目前ciao並不支持Arduino Uno WiFi這個開發板型號呀。。請問你是如何成功上傳代碼的?

  4. 老師您好~
    個人有架設伺服器做數據收集
    我使用的方式是利用一個PHP網頁讀取
    GET值後再寫入伺服器 http://…/index.php/?humi=26&temp=63
    Arduino uno wifi 的部分利用String做組合網址並存入變數
    現在的問題出在於如何單純連到網址做資料傳送?
    還請您多多幫忙!

  5. 使用 Arduino org 1.7.11 所編譯問題
    程式:

    #include
    #include // 必須引用「橋接器」程式庫

    #define CONNECTOR “rest” // 連接器類型
    #define SERVER_ADDR “192.168.7.101” // 網站伺服器IP位址

    int r = 100; // 暫存隨機數字的變數
    String command = “/rnd?r=”; // 傳給網站伺服器的路徑參數

    void setup() {
    Ciao.begin(); // 啟用「橋接器」
    // 以”rest”連接器類型,連線到網站伺服器,送出隨機數字。
    Ciao.write(CONNECTOR, SERVER_ADDR, command+r);
    }
    void loop() {
    delay(10000); // 暫停10秒
    r = random(1000); // 取隨機數字
    Ciao.write(CONNECTOR, SERVER_ADDR, command+r);
    }

    錯誤訊息:
    In file included from sketch_jan11a.ino:2:0:
    C:\Users\dawei\Documents\Arduino\libraries\Ciao\src/Ciao.h:42:2: error: #error CPU not yet supported
    #error CPU not yet supported
    :
    sketch_jan11a.ino: In function ‘void setup()’:
    sketch_jan11a.ino:11:14: error: call to ‘void SerialCiaoClass::begin(long unsigned int)’ uses the default argument for parameter 1, which is not yet defined
    編譯時發生錯誤

    1. 剛剛測試了一下程式碼,發現我上面留言中的程式庫 Wire.h 和 Ciao.h 名稱字首沒有大寫,拍謝。
      這是編譯成功的畫面:

      Arduino Uno WiFi Ciao.h library

      thanks,
      jeffrey

    2. 我上次有注意到大小寫問題
      改正之後還是有錯誤訊息…
      (如下)
      In file included from sketch_jan12a.ino:1:0:
      C:\Users\Unrealin\Documents\Arduino\libraries\Ciao\src/Ciao.h:42:2: error: #error CPU not yet supported
      #error CPU not yet supported
      :
      :
      C:\Users\Unrealin\Documents\Arduino\libraries\Ciao\src/CiaoData.h:39:7: error: previous definition of ‘class CiaoData’
      class CiaoData {
      ^
      sketch_jan12a.ino: In function ‘void setup()’:
      sketch_jan12a.ino:13:14: error: call to ‘void SerialCiaoClass::begin(long unsigned int)’ uses the default argument for parameter 1, which is not yet defined
      編譯時發生錯誤
      ==========================================================================================
      目前我覺得還是Ciao.h程式庫的問題

    3. Ciao程式庫使用內建在IDE的版本即可(位於Arduino安裝路徑的libraries裡面),不需要重新安裝。

      thanks,
      jeffrey

    4. 请问,您现在解决了这个问题了吗?
      我也遇到了 #error CPU not yet supported

  6. 請教一下 小弟的是arduino YUN 想透過 YUN 的WI-FI 把資料傳到資料庫上
    請問一下大概要如何做才好, 小弟對資料庫方面不太熟悉
    請大大指點一下

    1. 這個題目很大…當前的主流資料庫系統分成SQL和NoSQL兩大類型,以免費、開放原始碼的資料庫系統來說,SQL的代表是MySQL,NoSQL的代表則是MongoDB。你可以把這些資料庫系統安裝在電腦上,或者找到免費的雲端方案(亦即,已經幫你架設好資料庫系統),像Google的Firebase是一種雲端NoSQL資料庫,並且有提供免費、功能比較有限的方案。

      無論你打算在自家的電腦上安裝資料庫系統,或者選擇雲端方案,都要了解資料庫的操作方式,例如,新建、更新和刪除資料的方法。如果是自行安裝資料庫,你還得決定要採用哪一種中介語言來連接和操作資料庫,例如,Node.js, PHP, Python,…等等。若是採用像Google Firebase這種方案,你要閱讀它的API(應用程式介面)文件,看看它提供哪些操作指令和語法。

      thanks,
      jeffrey

    1. 位於arduino.org的IDE( 新版本已經沒分別了)安裝裡的\libraries\ArduinoWiFi\src路徑裡面。

      thanks,
      jeffrey

  7. 老師您好!
    我剛買了一個arduino uno wifi板,跟著wedserver範例上載了程式到uno wifi,想問下hostname.local/arduino/webserver這個方法是不是需要在DNS登記了才可使用?另外這個路徑可以更改嗎?例如hostname.local/test/這樣可以嗎?還有一個問題我是使用了IDE 1.8.1在工具 > 序列埠中只能選擇com port上載程式没有可以選擇wifi上載的選項是不是IDE version問題 ?

    1. 不需要在DNS登記,主要是作業系統要支援mDNS,Mac OS X和iOS系統是內建支援,你可以用Android手機的Chrome瀏覽器瀏覽。

      hostname.local/arduino/webserver這個路徑是ESP8266韌體設定的,我沒看到相關的API指令。至於Wi-Fi port,請問你有替板子設定成STA模式嗎?有些使用者遇到Wi-Fi無法連線的問題,我手上的板子並沒有這種情況。

  8. 謝謝回覆 ! 設定成STA模式然後開啟IDE就見到Port可以選wifi上載了,至於mDNS我用了Android手機內的Chrome瀏覽器輸入hostname.local/arduino/webserver這個路徑還是會跳到google的搜尋頁,Android版本是6.0.1,Chrome是55.0.2883.91是否要在裝置內設定些什麼 ? 如果要令windows支援mDNS有没有網站有參考資料?

    1. Arduino Uno Wifi板的預設hostname是arduino,所以網址是arduino.local,你有改過嗎?或者,請在網址前面手動輸入”http://”試試看。
      在Windows上解析mDNS,請安裝蘋果公司提供的Bonjour Print Services for Windows,詳細說明請參閱《超圖解物聯網IOT實作入門》第13章「設置區域網路域名」單元。

      thanks,
      jeffrey

  9. 有些問題想請教,我在試做第二版中紅外線發射範例12-4,我已將紅外線發射led短腳接上GND長腳串接330歐姆電阻到D3 pin更改了紅外線編碼,正常上載程式到UNO板,在監控視窗中任意輸入一個字元,監控視窗亦顯示了action但目標没有反應,之後我試用一相機鏡頭對著led再按鍵,看不到led有閃光是不是led有問題壞掉?
    另外如果我用一個UNO板可否輸出多個led發射?因為範例中提到只能接到D3 pin,可以加多幾個pin位做發射用?

    1. 一般的數位相機(如:Sony NEX系列),其CCD或CMOS感光元件都有加裝隔絕紅外線的低通透濾鏡(Infrared Cut Filter),因此無法觀測到紅外線。我用Canon HF S11攝影機和Note 4手機,可以觀測到紅外線光。所以你可能需要換其他設備觀測。

      至於驅動多個紅外線LED,請參閱10-39頁「同時點亮多個發光二極體」,透過電晶體驅動。

      thanks,
      jeffrey

  10. 感謝回覆,我使用的是S7手機,我試用一個電視搖控觀測過是看到紅外線閃光,但是在範例測試中並未看到,可能我試用別的LED發射再作測試.還是老師還有更好的方法提供參考?

    1. 如果你有二塊Arduino板(我只有購買一塊,另一個是參考書上的教學再另外做一塊簡易型的Arduino板),一個接紅外線LED,另一個接紅外線接收器,這樣測試會比較直接。
      接收器的那塊Arduino跟電腦連接(因為要看Serial Monitor來確定是否有接收到訊號),另一塊用電池供電。

    2. 忽然想到,若是為了測試是否有訊號發出,其實只要把紅外線LED換成普通LED,即可用肉眼觀察了。

      thanks,
      jeffrey

  11. 老師您好,請教您一些問題。
    您在超圖解物聯網IOT入門實作第五章-使用霹靂五號操控Arduino這個部分,
    演示使用Firmata協定,與PC溝通。我手邊剛好也有Arduino Uno WiFi,
    想嘗試使用WiFi,請您指點一下!

    1. StandardFirmata.ino程式庫採用序列埠連線,理論上可以透過Uno WiFi上的ESP8266通訊,這部份要麻煩你自行實驗看看。

      thanks,
      jeffrey

  12. 老師您好 !
    回上回的紅外線發射測試,最後我換了一個LED發射就冇問題了.今次想問Arduino webserver的問題,我試在html裏寫了一個按鈕,按一下時網址顯示出192.168.1.25/?L=0這個路徑,我看了第二版的範例16-4未能明白要如何才可以取得路徑中”/?L=0″的參數來控制arduino,能否舉出再簡單的例子?有什麼重點需要注意?求指點一下謝謝!

    1. 處理GET方法(查詢字串)的流程比較複雜,但其實你可以沿用16-32頁的getCmd()函式,查詢字串的參數名稱將存放在該函式的name變數,參數值則保存在value變數。

      thanks,
      jeffrey

    2. 老師您好,

      關於W5100以太網路卡,我最近發現屋企的router TL-WR740N在瀏覽器輸入W5100的IP瀏覽器顯示無法連上這個網站,我在序列埠監控視窗亦見到顯示IP 0.0.0.0,這個Webserver程式碼我在公司的網絡中試過是沒有問題一切正常的,究竟是router設定問題或是其他問題呢?有什麼要注意?請指教謝謝!

    3. 應該是靜態IP和固定IP的問題(請參閱15-5頁),書本15-26頁程式採用的是動態IP,動態IP的寫法在15-28頁。

      thanks,
      jeffrey

  13. 老師您好
    目前我用Arduino uno + Ethernet shield
    透過網路端傳送數值到php後存入Mysql
    但是在php都只收到空值
    是用php的POST接收資料
    不知道是哪方面出了問題
    嘗試過多種寫法但還是無法解決
    麻煩老師指點,謝謝

    1. 建議先製作一個簡單的PHP頁面,把接收來自Arduino的值echo在網頁上,先釐清是PHP還是Arduino的程式有問題。

      thanks,
      jeffrey

  14. 老師您好
    目前手邊有塊 arduino uno wifi
    目前想做的是若沒有wifi環境時先將sensor資訊記錄在sd card內
    當接到wifi時,想把它當成client端傳送sd卡離線紀錄的資訊給自己的server
    利用Ciao library 的write 方法傳送get的話uri會過長
    所以想請問如何利用arduino uno wifi 傳送post request 呢?

    1. 請參閱Arduino Uno WiFi的ResetClient範例程式,請把底下這三行:

      改成底下的敘述測試看看,其中的var1和var2是上傳資料的參數名稱,123和abc是虛構的資料值:

      thanks,
      jeffrey

  15. 老師 您好!

    想請教你有關arduino+esp8266的問題!

    因為我們沒有arduino uno wifi板子 所以我們是使用uno版+esp8266來製作題目。
    是希望能夠透過esp8266來傳輸字串 由app發送個人熱點的名稱以及密碼 貼上字串至原本板子被寫死的wifi名稱密碼,
    達到讓使用者自訂自己的個人熱點名稱。
    想請問老師 如何傳輸這樣的字串 以及這樣的行為 是否esp8266可以滿足我們的要求。

    感謝老師!

  16. 老師 您好!

    謝謝老師提供的函式庫!

    我們已經使用 app inventor 至做出一個透過藍芽來傳輸字串的 app

    目前已經放棄修改SSID 以及 PASSWORD了 我們直接寫死 給arduino D1 一個路由器來連線
    所以變成已經有網路的前提下 想修改api key 來讓使用者輸入自己的金鑰 來將值上傳至自己的 ThingSpeak.

    想修改的程式碼如下:

    String apiKey = “0FUUBXXXXXXXXXX”;
    const char* ssid = “eric”;
    const char* password = “88888888”;
    const char* server = “api.thingspeak.com”;

    藍芽端的程式碼
    #include
    //#include
    #include
    // the maximum received command length from an Android system (over the bluetooth)
    #define MAX_BTCMDLEN 128
    // TX- Pin10
    // RX Pin11
    SoftwareSerial BTSerial(1,0); // Arduino TX/RX
    byte cmd[MAX_BTCMDLEN]; // received 128 bytes from an Android system
    int len = 0; // received command lengthm
    void setup() {

    Serial.begin(9600);
    BTSerial.begin(9600);
    }
    void loop() {
    char str[MAX_BTCMDLEN];

    int insize, ii;
    int tick=0;
    while ( tick0 ){ // 讀取藍牙訊息
    for ( ii=0; ii<insize; ii++ ){
    cmd[(len++)%MAX_BTCMDLEN]=char(BTSerial.read());

    }
    } else {
    tick++;
    }

    }

    if ( len ) { // 用串列埠顯示從Android手機傳過來的訊息

    sprintf(str,"%s",cmd);

    delay(2000);
    Serial.write(str);
    cmd[0] = '\0';
    }
    len = 0;
    }

    傳輸過去後有兩個問題
    問題一 一開始輸入字串1 2 3 4 5 序列戶顯示 1 2 3 4 5 ,但第二次輸入2 3 4 序列戶顯示 2 3 4 4 5 。
    會一直記錄到上一個字串的長度(還是位元?) 無法解決..

    問題二 最上面敘述的問題 如何將apikey 來取代掉…

    1. 「會一直記錄到上一個字串」代表程式沒有清除上一次的序列輸入值,你可以像這樣宣告一個String類型的變數,暫存輸入值:

      String serialStr = “”;

      每當收到序列資料,就將它與serialStr相連:

      serialStr += val;

      最後取出序列字串後,再將它清空:

      serialStr = “”;

      thanks,
      jeffrey

  17. 老師您好
    以下是我用 Realterm 叫 esp8266 傳給 Thingspeak 的情況
    但 Thingspeak 卻回傳 400 Bad Request
    之前試過一樣的步驟似乎沒問題 但是之後卻不行了
    是不是有遺失字元或其他原因
    麻煩版主指導 ((一個小新手看網頁做的實驗

    OK
    > // GET /update?api_key=ZKANMZVA3YINU7L9&field1=5&field2=7
    Recv 56 bytes

    SEND OK

    +IPD,172:
    400 Bad Request

    400 Bad Request
    nginx/1.7.5

    CLOSED

    1. 如果確定之前正常的是同一塊ESP8266, 裡面的程式碼也都一樣, 但忽然不行的話, 建議你可以重置一下ESP8266或是完全斷電, 之後再重試看看. 如果以上二種處置方式都不行的話, 也可以試著重刷ESP8266的韌體之後再測試.
      ThingSpeak跟ESP8266之間溝通的原理也是透過傳送HTTP訊息來傳送數據給ThingSpeak的Server. 建議你可以再看一次作者IOT這本書的12-16這一頁, 先照著書本實作幾次, 對訊息之間的傳送了解了以後, 再來使用ThingSpeak, 會更容易上手.

  18. 想請教一下 我目前是使用 nano版+esp8266 當server 來使用 透過直接在程式打上SSID 跟 PASS 讓 esp8266 能夠直接連網 我想要做像上面那樣 就是我可以不透過程式 直接連IP(192.168.4.1)進入修改SSID 跟PASS 不知道要怎麼著手 感謝您

    1. 感謝您這麼快就回復 我馬上去實作看看 有問題還請麻煩您了 真的感謝

    1. firebase是一款雲端資料庫系統平台,也就是說,這個資料庫系統的主程式碼和資料檔,都是放在網路上的一群電腦伺服器裡面。

      用戶端只須透過網路對它下達一些指令就能操作資料庫,因此,用戶端只須具備聯網功能,就能使用firebase,用戶端本身並不需要架設資料庫。

      所以,是的,Uno板加上網路卡,就能操作firebase。

      thanks,
      jeffrey

  19. 老師你好
    我們使用這個https://github.com/firebase/firebase-arduino
    的firebase libary
    但是在編譯加上#include 後
    卻出現編譯錯誤In file included from C:\Users\USER\Desktop\gps_test1\gps_test1.ino:6:0:

    C:\Program Files (x86)\Arduino\libraries\firebase-arduino-master\src/FirebaseArduino.h:20:18: fatal error: string: No such file or directory

    #include

    ^

    compilation terminated.

    exit status 1
    開發板 Arduino Uno WiFi 編譯錯誤。

    請問這樣有甚麼解決方法嗎感恩

    1. 你誤會了。

      ESP8266有兩種運用方式:
      1. 當作Wi-Fi網卡,運算和硬體控制交給其他微控器處理,如Arduino。
      2. 兼具Wi-Fi功能的微控器,本身可取代Arduino。

      這兩種通訊程式的寫法不同。

      Arduino Uno WiFi板子上的ESP8266只用於Wi-Fi通訊。但是你找到的程式庫用於第2種模式,所以不能用於Arduino Uno WiFi板,Uno WiFi可以達到相同功能,只是程式碼你要自己改寫。

      good luck!
      jeffrey

  20. 老师您好,请问一下,怎么可以得到ArduinoWiFi库,我的IDE上没有,在网上也没有找到合适的。

  21. 老師你好,請問一下
    我用arduino uno wifi 來做專題 ,在我用at指令測試esp8266他都沒反應(我用realterm測試)
    但是wifi那些都正常顯示,更換sta、ap+sta模式都能更換
    我爬文找方法都試過了,麻煩妳了…

  22. 老師您好
    想詢問wifi功能可以設成一通電或是在電路一按開關就上傳嗎?
    還是一定要下command呢?
    謝謝

  23. 老师,arduino uno wifi想要连接到服务器(ip:69.165.65.152 port:65534),将窜口采集到的数据发送到服务器上该怎么做呢?上面的程式连接服务器不需要port号吗?

  24. 您好,這邊想請教一個問題
    這邊使用Arduino uno+ESP8266 01s
    跑的程式是範例中的WiFi Scan,但是一直會跑出
    warning: espcomm_sync failed
    error: espcomm_open failed
    error: espcomm_upload_mem failed
    error: espcomm_upload_mem failed
    這樣的問題,想問問這個該怎麼解?

    1. 妳的ESP-01模組執行的是AT韌體,TX和RX應該是接在Arduino Uno的0和1腳,可能是TX和RX接腳錯了,兩腳交換看看。

      thanks,
      jeffrey

  25. 您好,
    剛剛看了一下RX跟TX應該是沒有接錯,下面是我的接法
    UNO ESP
    3.3v -> VCC
    3.3v -> CH_PD
    GND -> GND
    GND ->GPI00
    RX(0號角) ->RX
    TX(1號角) ->TX

    3.3V 是由uno的5V接LD1117轉3.3V的,RXTX交換接也是不行

  26. 老師您好
    請問一下為什麼我將 Arduino UNO WiFi 連上家裡的網路之後
    執行 SWITCH TO STA MODE 一直無法成功
    都會跑出 Error changing mode
    然後連上 Arduino UNO WiFi 的網路會斷開
    要重試好幾次才又能連到

  27. 老師 你好
    想詢問一下,我的設備連上WIFI後可是還會有網頁需要登入員工帳號密碼 才能正式連外,這部分是不是無解?

    1. 應該是可以的,需要知道登入表單的後端程式位址,以及欄位名稱(資料的變數名稱),寫一個POST方法的資料傳送程式,來取代表單頁面登入。

      thanks,
      jeffrey

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *