1. 程式人生 > >【庫和教程】ESP8266 WIFI模組實現遠端wifi控制

【庫和教程】ESP8266 WIFI模組實現遠端wifi控制

http://www.geek-workshop.com/thread-11266-1-1.html

 ITEAD首款智慧wifi通用改裝件成功上市http://www.geek-workshop.com/thread-17944-1-1.html



----------------------------------------------------2015年6月10日更新-------------------------------------------------------

最新wifi庫下載地址:https://github.com/itead/ITEADLIB_Arduino_WeeESP8266/archive/master.zip
庫預設是使用硬體串列埠與ESP8266通訊,需要軟串列埠通訊只需取消註釋Esp8266.h檔案裡的一行程式碼
#define ESP8266_USE_SOFTWARE_SERIAL

--------------------------------------------------2015年2月5日釋出---------------------------------------------------------

2014年10月發的第一篇mini Rboard的開關教程很多小夥伴問我如果用UNO的話該怎麼使用?軟體安裝不了,手機怎麼翻牆?等等問題。當然我們也一直在盡全力解決這些問題,很幸運,軟硬體的問題都解決了!現在我們就用ITEAD自己開發的wifi APK和最新版ESP8266 WiFi bee模組WEE實現遠端遙控開關操作。
使用UNO搭建硬體所需配件: uno配件.jpg
因為UNO只有一對串列埠,已經被WIFI模組佔用了,所以要增加一個轉串列埠的板子用軟串列埠來列印串列埠資訊。
使用ITEADUINO  MEGA2560搭建硬體所需配件: mega配件.jpg
此處也可以使用Arduino MEGA2560,但是需要飛線到後面的
TX2RX2。這個就交給小夥伴們自己去嘗試吧,成功後可以發到帖子回覆裡跟大家分享。
需要使用到的庫檔案地址:http://pan.baidu.com/s/1kT9TBz5這個庫跟之前發的庫是一樣的,但很多小夥伴反應編譯不過,這個庫我是用1.0.6版本的IDE測試一定能過的。不放心的朋友可以把以前下的庫從libraries裡移除,重新下載這個到libraries資料夾裡面。
庫預設設定的是UNO可以直接使用本教程,無需做任何修改。 使用mega2560的時候,只需要開啟uartWIFI.h檔案,把UNO註釋掉,取消註釋MEGA,如下:
//#define UNO        //uncommentthis line when you use it with UNO board
#define MEGA      //uncommentthis line when you use it with MEGA board

硬體搭建方面我們先不說怎麼接線,因為經常有人問我:“你好,程式已經燒給模組了,為什麼不成功?”我的親大哥啊,所有程式碼都是燒寫進UNOmega2560主機板的,你就算不接模組,程式碼也是可以上傳編譯成功的。所以我們的步驟是先把程式碼燒寫進UNOMEGA2560
程式碼如下:
ARDUINO 程式碼複製列印
  1. #define SSID "ITEAD_2"        //type your own SSID name
  2. #define PASSWORD "27955416"        //type your own WIFI password
  3. #include "uartWIFI.h"
  4. #include <SoftwareSerial.h>
  5. WIFI wifi;
  6. extern int chlID;        //client id(0-4)
  7. void setup()
  8. {
  9. pinMode(6,OUTPUT); //使用mega的時候在不改變接線的情況下,此處改為24腳
  10. wifi.begin();
  11. bool b = wifi.Initialize(STA, SSID, PASSWORD);
  12. if(!b)
  13. {
  14. DebugSerial.println("Init error");
  15. }
  16. delay(8000); //make sure the module can have enough time to get an IP address
  17. String ipstring = wifi.showIP();
  18. DebugSerial.println(ipstring);        //show the ip address of module
  19. delay(2000);
  20. wifi.confMux(1);
  21. delay(100);
  22. if(wifi.confServer(1,8080))
  23. DebugSerial.println("Server is set up");
  24. }
  25. void loop()
  26. {
  27. char buf[100];
  28. int iLen = wifi.ReceiveMessage(buf);
  29. if(iLen > 0)
  30. {
  31. if (strcmp(buf, "CH0ON") == 0)
  32. {
  33. digitalWrite(6,HIGH);  //使用mega的時候在不改變接線的情況下,此處改為24腳
  34. DebugSerial.println("CH0ON");
  35. }
  36. if (strcmp(buf, "CH0OFF") == 0)
  37. {
  38. digitalWrite(6,LOW); //使用mega的時候在不改變接線的情況下,此處改為24腳
  39. DebugSerial.println("CH0OFF");
  40. }
  41. }
  42. }

使用MEGA時,把程式碼裡繼電器的D6腳改為D24腳。程式碼燒寫完成後,我們現在來搭建硬體。
UNO接線如圖: uno.jpg
Foca轉串板連線的是D2D3作為軟串列埠。G要共地。
ITEADUINO MEGA2560接線如圖: uno.png
此處的Xbee擴充套件板的跳帽應該是2和3,而不是0和1,此處有錯。正確跳帽如下:

     .  .  . 4
     ._.  . 3
     .  ._. 2
     .  .  . 1
     .  .  . 0

Xbee擴充套件板插在TX2RX2這排排母上。如圖:
mega插腳.jpg 連線電腦,插上9V/1A介面卡電源供電,開啟Arduino IDE串列埠監視器就可以檢視wifi執行狀態了。如果是使用UNO,開啟監視器後需要先按一下UNO板子上的重啟鍵再按一下xbee擴充套件板上的重啟鍵。此時才能看到串列埠監視資訊。使用mega2560則無需操作。如果是出現“Module have no response”則只需要按一下mega板子側邊的重啟鍵。
成功連線路由器後,我們就得到了WiFi模組的IP地址,串列埠列印資訊如下: wifi串列埠資訊.png ↑UNO串列埠列印資訊
MEGA.png
↑MEGA串列埠列印資訊

該軟體目前只支援4-7寸安卓智慧手機或者平板,7寸平板的話排版可能會有空隙,不過不影響使用。
下載安裝後,進入set up設定介面。在客戶端輸入我們剛剛獲得的IP地址和埠號8080,如圖: 輸入IP.png
點選“開始連線”,連線成功會顯示:成功連線server。如圖:
連線成功.png 按鍵指令我們重新設定一下,下拉到最下面,將OnOff的指令改為CH0OFFCH0ON(指令可以任意設定,只要跟程式碼裡的指令一致就行),如果開關狀態相反,把指令反過來即可,如圖: 設定後.png
↑修改前
設定前.png
↑修改後

輸入完成後,點選“返回”到操作介面,此時點選OnOff就可以成功控制開關了! IMG_0154.JPG
                                關(UNO)
IMG_0137.JPG
                                 開(UNO)
IMG_0160.JPG
                       關(MEGA)
IMG_0159.JPG
                              開(MEGA)

可以收到串列埠列印資訊如下:
成功開關.png
開關成功.png



-------------------------------------------------2014年10月15日釋出-------------------------------------------------------
更新說明:由於韌體升級,很多小夥伴們收到ESP8266模組後用我們的庫調不通,在此誠摯道歉。釋出此篇教程的時候使用的是舊版本韌體,庫檔案設定的波特率是115200。如果調不通的話應該收到的是新版本,使用的波特率是9600。庫檔案我們已經更新了http://pan.baidu.com/s/1sj2nUyT 請知悉,謝謝!

(一)ESP8266 wifi模組庫檔案測試

上週終於寫完ESP8266 wifi 模組的庫了,測試OK!在此開出原始碼和例項教程,希望能幫到大家!

主要配件:

peijian.jpg

一張圖介紹mini RBoard
mini rboard.jpg

步驟:

1. 下載庫檔案

燒寫程式之前,我們需要用到ESP8266庫,下載地址為:

http://pan.baidu.com/s/1sj2nUyT

溫馨提示: ESP8266 wifi庫檔案是基於arduino IDE 1.0.5版本編譯的,如遇編譯不過,請嘗試其他版本。

開啟庫中的uartWIFI.h檔案,因為我們的mini RBoard使用的是跟UNO一樣的晶片,所以要在H檔案裡去掉定義UNO的註釋,登出掉MEGA。

#define UNO
//#define MEGA

然後把_DBG_RXPIN_和_DBG_TXPIN_引腳定義改為D9和D10.

#define _DBG_RXPIN_ 9                //A0
#define _DBG_TXPIN_ 10                //A1

然後儲存uartWIFI.h檔案。

燒寫程式碼:

插上FOCA,板子的型別選擇“Arduino UNO”,點選燒寫程式。如下圖:

foca.jpg

ARDUINO 程式碼複製列印
  1. /*
  2. ESP8266 library
  3. When you use with UNO board, uncomment the follow line in uartWIFI.h.
  4. #define UNO
  5. When you use with MEGA board, uncomment the follow line in uartWIFI.h.
  6. #define MEGA
  7. Connection:
  8. When you use it with UNO board, the connection should be like these:
  9. ESP8266_TX->D0
  10. ESP8266_RX->D1
  11. ESP8266_CH_PD->3.3V
  12. ESP8266_VCC->3.3V
  13. ESP8266_GND->GND
  14. FTDI_RX->D3        //The baud rate of software serial can't be higher that 19200, so we use software serial as a debug port
  15. FTDI_TX->D2
  16. When you use it with MEGA board, the connection should be like these:
  17. ESP8266_TX->RX1(D19)
  18. ESP8266_RX->TX1(D18)
  19. ESP8266_CH_PD->3.3V
  20. ESP8266_VCC->3.3V
  21. ESP8266_GND->GND
  22. When you want to output the debug information, please use DebugSerial. For example,
  23. DebugSerial.println("hello");
  24. Note:        The size of message from ESP8266 is too big for arduino sometimes, so the library can't receive the whole buffer because
  25. the size of the hardware serial buffer which is defined in HardwareSerial.h is too small.
  26. Open the file from \arduino\hardware\arduino\avr\cores\arduino\HardwareSerial.h.
  27. See the follow line in the HardwareSerial.h file.
  28. #define SERIAL_BUFFER_SIZE 64
  29. The default size of the buffer is 64. Change it into a bigger number, like 256 or more.
  30. */
  31. #define SSID "Itead_1(Public)"        //type your own SSID name
  32. #define PASSWORD "27955416"        //type your own WIFI password
  33. #include "uartWIFI.h"
  34. #include <SoftwareSerial.h>
  35. WIFI wifi;
  36. extern int chlID;        //client id(0-4)
  37. void setup()
  38. {
  39. pinMode(4,OUTPUT);
  40. pinMode(5,OUTPUT);
  41. pinMode(6,OUTPUT);
  42. pinMode(7,OUTPUT);
  43. wifi.begin();
  44. bool b = wifi.Initialize(STA, SSID, PASSWORD);
  45. if(!b)
  46. {
  47. DebugSerial.println("Init error");
  48. }
  49. delay(8000); //make sure the module can have enough time to get an IP address
  50. String ipstring = wifi.showIP();
  51. DebugSerial.println(ipstring);        //show the ip address of module
  52. delay(2000);
  53. wifi.confMux(1);
  54. delay(100);
  55. if(wifi.confServer(1,8080))
  56. DebugSerial.println("Server is set up");
  57. }
  58. void loop()
  59. {
  60. char buf[100];
  61. int iLen = wifi.ReceiveMessage(buf);
  62. if(iLen > 0)
  63. {
  64. //mini Rboard D4 pin is relay,mini Rboard URL:[url=http://item.taobao.com/item.htm?spm=a1z10.3.w4002-2605688463.12.EMkeTJ&id=39334222369]http://item.taobao.com/item.htm? ... keTJ&id=39334222369[/url]
  65. if (strcmp(buf, "CH0ON") == 0)
  66. {
  67. digitalWrite(4,HIGH);
  68. DebugSerial.println("CH0ON");
  69. }
  70. if (strcmp(buf, "CH0OFF") == 0)
  71. {
  72. digitalWrite(4,LOW);
  73. DebugSerial.println("CH0OFF");
  74. }
  75. /* the other 3 chanels below are for Rboard D5 D6 D7 , Rboard URL:[url=http://item.taobao.com/item.htm?spm=a1z10.3.w4002-2605688463.12.EMkeTJ&id=39334222369]http://item.taobao.com/item.htm? ... keTJ&id=39334222369[/url]
  76. if (strcmp(buf, "CH1ON") == 0)
  77. {
  78. digitalWrite(5,HIGH);
  79. DebugSerial.println("CH1ON");        
  80. }
  81. if (strcmp(buf, "CH1OFF") == 0)
  82. {
  83. digitalWrite(5,LOW);
  84. DebugSerial.println("CH1OFF");        
  85. }
  86. if (strcmp(buf, "CH2ON") == 0)
  87. {
  88. digitalWrite(6,HIGH);
  89. DebugSerial.println("CH2ON");
  90. }
  91. if (strcmp(buf, "CH2OFF") == 0)
  92. {
  93. digitalWrite(6,LOW);
  94. DebugSerial.println("CH2OFF");
  95. }
  96. if (strcmp(buf, "CH3ON") == 0)
  97. {
  98. digitalWrite(7,HIGH);
  99. DebugSerial.println("CH3ON");        
  100. }
  101. if (strcmp(buf, "CH3OFF") == 0)
  102. {
  103. digitalWrite(7,LOW);
  104. DebugSerial.println("CH3OFF");        
  105. }
  106. */
  107. }
  108. }


黏貼程式碼到arduino IDE中,在SSID和PASSWORD巨集定義中修改成自己的路由器WIFI名稱和密碼。

#define SSID       "Itead_1(Public)"                //type your own SSID name
#define PASSWORD   "27955416"                //type your own WIFI password

編譯,燒寫,OK!

接下來我們還需要用到foca來讀取串列埠資訊,檢視wifi狀態。

按照以下連線方式連線FOCA和ESP8266到mini Rboard上。

lianjie.jpg

相關推薦

教程ESP8266 WIFI模組實現遠端wifi控制

http://www.geek-workshop.com/thread-11266-1-1.html  ITEAD首款智慧wifi通用改裝件成功上市:http://www.geek-workshop.com/thread-17944-1-1.html

醬菜創客ESP8266連線伺服器實現遠端控制LED燈

#include <ESP8266WiFi.h> WiFiClient client; #define relay1 2 //繼電器連線在8266的GPIO2上 const char *ssid = "xxxx";//這裡是我的wifi,你使用時修改為你要連線的wifi ssid con

Arduino基礎教程RS1307時鐘模組

RS1307時鐘模組 RS1307是一個低功耗的外接時鐘模組,它可以讓你的專案即使在斷電的情況下,也能保證在重新啟動後走時正確。 所需材料 1x Ar

.Net碼農用asp.net實現遠端獲取其他網站頁面指定內容

遠端獲取網頁內容.經過一定的處理和靈活應用,可以開發成成體系網站內容採集系統.通常也叫做"新聞小偷"一般來說.做內容採集分為如下幾個大致的步驟:   1.遠端獲取頁面的全部Html源文字.   2.通過過濾處理,分析有效內容文字.(通常用正則表示式來擷取有效資料)   3.將格式有效的資料,根據自己的資料庫結

RTX作業系統教程第5章 RTX作業系統方式移植(超級簡單)

第5章      RTX作業系統庫方式移植(超級簡單) 原文來源:http://forum.armfly.com/forum.php?mod=viewthread&tid=16596&highlight=RTX%B2%D9%D7%F7%CF%B5%CD%B3

day06.Hadoop快速入門&雲服務三種模式IaaS,PaaSSaaS大資料教程

day06.Hadoop快速入門&雲服務三種模式IaaS,PaaS和SaaS【大資料教程】1. HADOOP背景介紹1.1 什麼是HADOOP1). HADOOP是apache旗下的一套開源軟體

Qt OpenGL教程25:變形從檔案中載入3D物體

第25課:變形和從檔案中載入3D物體 (參照NeHe) 這次教程中,我們將學會如何從檔案中載入3D模型,並且平滑的從一個模型變形為另一個模型。在這一課裡,我們將介紹如何實現模型的變形過程,這將會是效果很棒的一課! 程式執行時效果如下: 下面進入教程: 我們這次將在第

Unity3D基礎教程給初學者看的Unity教程(四):通過製作Flappy Bird瞭解Native 2D中的RigidBody2DCollider2D

引子 認識RigidBody 當RigidBody2D的質量屬性被設定為0時,剛體的質量變為無限大,此時剛體相當於靜態剛體,永遠一動不動。但是在Unity中你是無法把一個RigidBody2D的質量設定為0的,所以,當你想建立一個靜態剛體時,只需要建立碰撞器,而不需要建立RigidBo

Django2.0:Django2.0教程08.常用的模版標籤過濾器 視訊學習筆記

繼續搭建blog blog/views.py from django.shortcuts import render_to_response, get_object_or_404 from .models import Blog, BlogType d

黑金原創教程FPGA那些事兒-驅動篇I 實驗一流水燈模組

實驗一:流水燈模組 對於發展商而言,動土儀式無疑是最重要的任務。為此,流水燈實驗作為低階建模II的動土儀式再適合不過了。廢話少說,我們還是開始實驗吧。 圖1.1 實驗一建模圖。 如圖1.1 所示,實驗一有名為 led_funcmod的功能模組。如果無視環境訊號(時鐘訊號還有復位訊號),該功能模組只有

黑金原創教程FPGA那些事兒-驅動篇I 實驗三:按鍵模組② — 點選與長點選

實驗三:按鍵模組② — 點選與長點選 實驗二我們學過按鍵功能模組的基礎內容,其中我們知道按鍵功能模組有如下操作: l 電平變化檢測; l 過濾抖動; l 產生有效按鍵。 實驗三我們也會z執行同樣的事情,不過卻是產生不一樣的有效按鍵: l 按下有效(點選); l 長按下有效(長點選)。 圖3

黑金原創教程FPGA那些事兒-驅動篇I 實驗二:按鍵模組

實驗二:按鍵模組① - 消抖 按鍵消抖實驗可謂是經典中的經典,按鍵消抖實驗雖曾在《建模篇》出現過,而且還惹來一堆麻煩。事實上,筆者這是在刁難各位同學,好讓對方的慣性思維短路一下,但是慘遭口水攻擊 ... 面對它,筆者宛如被甩的男人,對它又愛又恨。不管怎麼樣,如今 I’ll be back,筆者再也不會重複一

黑金原創教程FPGA那些事兒-驅動篇I 實驗六:數碼管模組

實驗六:數碼管模組 有關數碼管的驅動,想必讀者已經學爛了 ... 不過,作為學習的新儀式,再爛的東西也要溫故知新,不然學習就會不健全。黑金開發板上的數碼管資源,由始至終都沒有改變過,筆者因此由身懷念。為了點亮多位數碼管從而顯示數字,一般都會採用動態掃描,然而有關動態掃描的資訊請怒筆者不再重複。在此,同樣也是

黑金原創教程FPGA那些事兒-驅動篇I 實驗四:按鍵模組③ — 單擊與雙擊

實驗四:按鍵模組③ — 單擊與雙擊 實驗三我們建立了“點選”還有“長點選”等有效按鍵的多功能按鍵模組。在此,實驗四同樣也是建立多功能按鍵模組,不過卻有不同的有效按鍵。實驗四的按鍵功能模組有以下兩項有效按鍵: l 單擊(按下有效); l 雙擊(連續按下兩下有效)。 圖4.1 單擊有效按鍵,時序示意圖

黑金原創教程FPGA那些事兒-驅動篇I 實驗五:按鍵模組④ — 點選,長點選,雙擊

實驗五:按鍵模組④ — 點選,長點選,雙擊 實驗二至實驗四,我們一共完成如下有效按鍵: l 點選(按下有效) l 點選(釋放有效) l 長擊(長按下有效) l 雙擊(連續按下有效) 然而,不管哪個實驗都是隻有兩項“功能”的按鍵模組而已,如今我們要建立三項“功能”的按鍵模組,亦即點選(按下有效),長

黑金原創教程FPGA那些事兒-驅動篇I 實驗二十一:SDRAM模組④ — 頁讀寫 β

實驗二十一:SDRAM模組④ — 頁讀寫 β 未進入主題之前,讓我們先來談談一些重要的體外話。《整合篇》之際,筆者曾經比擬Verilog如何模仿for迴圈,我們知道for迴圈是順序語言的產物,如果Verilog要實現屬於自己的for迴圈,那麼它要考慮的東西除了步驟以外,還有非常關鍵的時鐘。 for(

黑金原創教程FPGA那些事兒-驅動篇I 實驗十:PS/2模組④ — 普通滑鼠

實驗十:PS/2模組④ — 普通滑鼠 學習PS/2鍵盤以後,接下來就要學習 PS/2 滑鼠。PS/2滑鼠相較PS/2鍵盤,驅動難度稍微高了一點點,因為FPGA(從機)不僅僅是從PS/2滑鼠哪裡讀取資料,FPGA還要往滑鼠裡寫資料 ... 反之,FPGA只要對PS/2鍵盤讀取資料即可。然而,最傷腦筋的地方就在

黑金原創教程FPGA那些事兒-驅動篇I 實驗十八:SDRAM模組① — 單字讀寫

實驗十八:SDRAM模組① — 單字讀寫 筆者與SDRAM有段不短的孽緣,它作為冤魂日夜不斷糾纏筆者。筆者嘗試過許多方法將其退散,不過屢試屢敗的筆者,最終心情像橘子一樣橙。《整合篇》之際,筆者曾經大戰幾回兒,不過內容都是點到即止。最近它破蠱而出,日夜不停:“好~痛苦!好~痛苦!”地呻吟著,嚇得筆者不敢半夜如

黑金原創教程FPGA那些事兒-驅動篇I 實驗二十七:TFT模組

實驗二十七:TFT模組 - 顯示 所謂TFT(Thin Film Transistor)就是眾多LCD當中,其中一種支援顏色的LCD,相較古老的點陣LCD(12864笑),它可謂高階了。黑金的TFT LCD除了320×240大小以外,內建SSD1289控制器,同時也是獨立模組。事實上,無論是驅動點陣LCD還

黑金原創教程FPGA那些事兒-驅動篇I 實驗十三:串列埠模組② — 接收

實驗十三:串列埠模組② — 接收 我們在實驗十二實現了串列埠傳送,然而這章實驗則要實現串列埠接收 ... 在此,筆者也會使用其它思路實現串列埠接收。 圖13.1 模組之間的資料傳輸。 假設我們不考慮波特率,而且一幀資料之間的傳輸也只是發生在FPGA之間,即兩隻模組之間互轉,並且兩塊模組都使用相同的時