德州儀器的CC3000 WiFi模塊是一個(gè)小型銀包,最終為你的Arduino項(xiàng)目帶來了易用,經(jīng)濟(jì)實(shí)惠的WiFi功能。
它使用SPI進(jìn)行通信(而不是UART),因此你可以根據(jù)需要盡可能快或盡可能慢地推送數(shù)據(jù)。它有一個(gè)合適的IRQ引腳中斷系統(tǒng),因此你可以有異步連接。它支持802.11b/g,open/WEP/WPA/WPA2安全,TKIP及AES。具有“BSD socket”接口的內(nèi)置TCP/IP堆棧支持客戶端和服務(wù)器模式下的TCP和UDP。
你將需要以下組件:
對于這個(gè)項(xiàng)目,你只需要通常的Arduino IDE,Adafruit的CC3000庫以及CC3000 MDNS庫。我們也將使用aREST庫通過WiFi向中繼發(fā)送命令。
按照電路圖進(jìn)行連接,如下圖所示。
這個(gè)項(xiàng)目的硬件配置非常簡單。
現(xiàn)在,讓我們連接繼電器。
將繼電器放在面包板上后,你可以開始識(shí)別繼電器上的兩個(gè)重要部分:指示繼電器的線圈部分和連接LED的開關(guān)部分。
您還必須將整流二極管(陽極連接到接地引腳)放置在線圈的引腳上,以在繼電器切換時(shí)保護(hù)電路。
將Arduino板的+5V連接到繼電器開關(guān)的公共引腳。
最后,將開關(guān)的另一個(gè)引腳(通常是繼電器斷開時(shí)未連接的引腳)連接到與220歐姆電阻串聯(lián)的LED,并將LED的另一端連接到Arduino的接地。
你可以使用以下草圖測試?yán)^電器:
const int relay_pin = 8; // Relay pin void setup() { Serial.begin(9600); pinMode(relay_pin,OUTPUT); } void loop() { // Activate relay digitalWrite(relay_pin, HIGH); // Wait for 1 second delay(1000); // Deactivate relay digitalWrite(relay_pin, LOW); // Wait for 1 second delay(1000); }
代碼是不言自明的。你只需將其上傳到電路板,繼電器將每秒切換狀態(tài),LED將相應(yīng)地亮起和熄滅。
現(xiàn)在讓我們使用CC3000 WiFi芯片無線控制繼電器。該項(xiàng)目的軟件基于TCP協(xié)議。但是,對于這個(gè)項(xiàng)目,Arduino板將運(yùn)行一個(gè)小的Web服務(wù)器,以便我們可以“監(jiān)聽”來自計(jì)算機(jī)的命令。我們先來看看Arduino草圖,然后我們將看到如何編寫服務(wù)器端代碼并創(chuàng)建一個(gè)漂亮的界面。
首先,Arduino草圖。這里的目標(biāo)是連接到你的WiFi網(wǎng)絡(luò),創(chuàng)建Web服務(wù)器,檢查是否有傳入的TCP連接,然后相應(yīng)地更改繼電器的狀態(tài)。
#include <Adafruit_CC3000.h> #include <SPI.h> #include <CC3000_MDNS.h> #include <Ethernet.h> #include <aREST.h>
你需要在代碼中定義特定于你的配置的內(nèi)容,即Wi-Fi名稱和密碼,以及TCP通信端口(我們在此使用了80)。
// WiFi network (change with your settings!) #define WLAN_SSID "yourNetwork" // cannot be longer than 32 characters! #define WLAN_PASS "yourPassword" #define WLAN_SECURITY WLAN_SEC_WPA2 // This can be WLAN_SEC_UNSEC, WLAN_SEC_WEP, // WLAN_SEC_WPA or WLAN_SEC_WPA2 // The port to listen for incoming TCP connections #define LISTEN_PORT 80
然后我們可以創(chuàng)建CC3000實(shí)例,服務(wù)器和aREST實(shí)例:
// Server instance Adafruit_CC3000_Server restServer(LISTEN_PORT); // DNS responder instance MDNSResponder mdns; // Create aREST instance aREST rest = aREST();
在草圖的setup()部分,我們現(xiàn)在可以將CC3000芯片連接到網(wǎng)絡(luò):
cc3000.connectToAP(WLAN_SSID, WLAN_PASS, WLAN_SECURITY);
計(jì)算機(jī)將如何知道在哪里發(fā)送數(shù)據(jù)?一種方法是運(yùn)行草圖一次,然后獲取CC3000板的IP地址,并再次修改服務(wù)器代碼。但是,我們可以做得更好,這就是CC3000 MDNS庫發(fā)揮作用的地方。我們將使用此庫為我們的CC3000板分配一個(gè)固定名稱,以便我們可以將此名稱直接寫入服務(wù)器代碼。
這可以用下面的代碼片段完成:
if (!mdns.begin("arduino", cc3000)) { while(1); }
我們還需要監(jiān)聽傳入的連接。
restServer.begin();
接下來,我們要對將被連續(xù)執(zhí)行的草圖的loop()函數(shù)進(jìn)行編碼。我們首先要更新mDNS服務(wù)器。
mdns.update();
在Arduino板上運(yùn)行的服務(wù)器將等待傳入連接并處理請求。
Adafruit_CC3000_ClientRef client = restServer.available(); rest.handle(client);
現(xiàn)在通過WiFi測試項(xiàng)目非常容易。確保你使用自己的WiFi名稱和密碼更新草圖,并將草圖上傳到Arduino板。打開你的Arduino IDE串口監(jiān)視器,并查找電路板的IP地址。
我們假設(shè)其余的是192.168.1.103。
然后,只需進(jìn)入你喜歡的網(wǎng)絡(luò)瀏覽器,然后鍵入:
192.168.1.103/digital/8/1
你應(yīng)該看到繼電器自動(dòng)打開。
我們現(xiàn)在將編寫項(xiàng)目的界面。這里將有兩個(gè)部分:包含界面的HTML文件和用于處理界面上點(diǎn)擊的客戶端Javascript文件。這里的界面基于aREST.js項(xiàng)目,這是為了方便從你的計(jì)算機(jī)控制WiFi設(shè)備。
<head> <meta charset = utf-8 /> <title> Relay Control </title> <link rel = "stylesheet" type = "text/css" href = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css"> <link rel="stylesheet" type = "text/css" href = "style.css"> <script type = "text/javascript" src = "https://code.jquery.com/jquery-2.1.4.min.js"></script> <script type = "text/javascript" src = "https://cdn.rawgit.com/Foliotek/AjaxQ/master/ajaxq.js"></script> <script type = "text/javascript" src = "https://cdn.rawgit.com/marcoschwartz/aREST.js/master/aREST.js"></script> <script type = "text/javascript" src = "script.js"></script> </head>
然后,我們在界面中定義兩個(gè)按鈕,一個(gè)用于打開繼電器,另一個(gè)用于再次關(guān)閉繼電器。
<div class = 'container'> <h1>Relay Control</h1> <div class = 'row'> <div class = "col-md-1">Relay</div> <div class = "col-md-2"> <button id = 'on' class = 'btn btn-block btn-success'>On</button> </div> <div class = "col-md-2"> <button id = 'off' class = 'btn btn-block btn-danger'>On</button> </div> </div> </div>
現(xiàn)在,我們還需要一個(gè)客戶端Javascript文件來處理按鈕上的點(diǎn)擊。我們還將創(chuàng)建一個(gè)設(shè)備,我們將鏈接到Arduino設(shè)備的mDNS名稱。如果你在Arduino代碼中改變了這個(gè),你也需要在這里修改它。
// Create device var device = new Device("arduino.local"); // Button $('#on').click(function() { device.digitalWrite(8, 1); }); $('#off').click(function() { device.digitalWrite(8, 0); });
該項(xiàng)目的完整代碼可以在 GitHub 存儲(chǔ)庫中找到。進(jìn)入界面文件夾,只需用你喜歡的瀏覽器打開HTML文件。你應(yīng)該會(huì)在瀏覽器中看到類似的內(nèi)容:
嘗試點(diǎn)擊Web界面上的按鈕;它應(yīng)該立即改變繼電器的狀態(tài)。
如果你設(shè)法讓它工作了,恭喜你,你剛剛構(gòu)建了一個(gè)Wi-Fi控制的電燈開關(guān)。當(dāng)然,通過這個(gè)項(xiàng)目你可以控制更多的電燈。只需確保你的繼電器支持你想要控制的設(shè)備所需的電源,你就可以很好的實(shí)現(xiàn)了。
更多建議: