Arduino - 網路通訊

德州儀器(TI)的 CC3000 WiFi 模組是一款小型銀色封裝,可以為你的 Arduino 專案帶來了易於使用,價格合理的 WiFi 功能。

它使用 SPI 進行通訊(而不是 UART!),因此你可以根據需要快速推送資料,也可以根據需要儘可能慢地推送資料。它有一個帶有 IRQ 引腳的中斷系統,因此你可以進行非同步連線。它支援 802.11b/g,open/WEP/WPA/WPA2 安全性,TKIP 和 AES。帶有“BSD socket”介面的內建 TCP/IP 堆疊支援客戶端和伺服器模式下的 TCP 和 UDP。

網路通訊

需要的元件

你將需要以下元件 -

  • 1×Arduino Uno
  • 1×Adafruit CC3000 分線板
  • 1×5V 繼電器
  • 1×整流二極體
  • 1×LED
  • 1×220 歐姆電阻
  • 1×麵包板和一些跳線

對於這個專案,你只需要通常的 Arduino IDE,Adafruit 的 CC3000 庫和 CC3000 MDNS 庫。我們還將使用 aREST 庫通過 WiFi 向中繼傳送命令。

程式

按照電路圖進行連線,如下圖所示。

網路通訊連線

該專案的硬體配置非常簡單。

  • 將 CC3000 板的 IRQ 引腳連線到 Arduino 板的 3 號針腳。
  • VBAT 到引腳 5,CS 到引腳 10。
  • 將 SPI 引腳連線到 Arduino 板:MOSI,MISO 和 CLK 分別連線到引腳 11,12 和 13。
  • Vin 連線到 Arduino 5V,GND 連線到 GND。

現在讓我們連線繼電器。

將繼電器放在麵包板上後,你可以開始識別繼電器上的兩個重要部件:用於控制繼電器的線圈部件,以及用於連線 LED 的開關部件。

  • 首先,將 Arduino 板的引腳編號 8 連線到線圈的一個引腳。
  • 將另一個引腳連線到 Arduino 板的地。

你還必須將整流二極體(陽極連線到接地引腳)放線上圈的引腳上,以便在繼電器切換時保護電路。

  • 將+5V 的 Arduino 板連線到繼電器開關的公共引腳。

  • 最後,將開關的另一個引腳(通常是繼電器關閉時未連線的引腳)連線到與 220 歐姆電阻串聯的 LED,並將 LED 的另一端連線到 Arduino 的地板。

測試單個元件

你可以使用以下草圖測試繼電器 -

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);
}

程式碼注意

程式碼不言自明。你可以將其上傳到電路板,繼電器將每秒切換狀態,LED 將相應地開啟和關閉。

新增 WiFi 連線

現在讓我們使用 CC3000 WiFi 晶片無線控制繼電器。該專案的軟體基於 TCP 協議。但是,對於這個專案,Arduino 板將執行一個小型 Web 伺服器,因此我們可以“監聽”來自計算機的命令。我們將首先處理 Arduino 草圖,然後我們將看到如何編寫伺服器端程式碼並​​建立一個漂亮的介面。

首先,Arduino 草圖。這裡的目標是連線到你的 WiFi 網路,建立 Web 伺服器,檢查是否有傳入的 TCP 連線,然後相應地更改中繼的狀態。

程式碼的重要部分

#include <Adafruit_CC3000.h>
#include <SPI.h>
#include <CC3000_MDNS.h>
#include <Ethernet.h>
#include <aREST.h>

你需要在程式碼內部定義特定於你的配置的內容,即 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

然後我們可以建立 CC3000 例項,伺服器和 aREST 例項 -

// Server instance
   Adafruit_CC3000_Server restServer(LISTEN_PORT); // DNS responder instance
   MDNSResponder mdns; // Create aREST instance
   aREST rest = aREST();

在草圖的 setup() 部分,我們現在可以將 CC3000 晶片連線到網路 -

cc3000.connectToAP(WLAN_SSID, WLAN_PASS, WLAN_SECURITY);

計算機將如何知道資料的傳送位置? 一種方法是執行草圖一次,然後獲取 CC3000 板的 IP 地址,並再次修改伺服器程式碼。但是,我們可以更好的來處理,這就是 CC3000 MDNS 庫發揮作用的地方。我們將使用此庫為 CC3000 板分配一個固定名稱,因此我們可以將此名稱直接寫入伺服器程式碼。

這是通過以下程式碼完成的 -

if (!mdns.begin("arduino", cc3000)) {
   while(1);
}

我們還需要監聽傳入的連線。

restServer.begin();

接下來,我們將編寫將連續執行的草圖的 loop() 函式。我們首先要更新 mDNS 伺服器。

mdns.update();

在 Arduino 板上執行的伺服器將等待傳入連線並處理請求。

Adafruit_CC3000_ClientRef client = restServer.available();
rest.handle(client);

現在很容易通過 WiFi 測試專案。確保使用你自己的 WiFi 名稱和密碼更新草圖,並將草圖上傳到 Arduino 板。開啟 Arduino IDE 序列監視器,查詢單板的 IP 地址。

讓我們假設這裡的其餘部分類似於 192.168.1.103。

然後,只需轉到你喜歡的網路瀏覽器,然後輸入 -

192.168.1.103/digital/8/1

你應該看到繼電器自動開啟。

構建中繼介面

我們現在將編寫專案的介面。這裡將有兩個部分:一個包含介面的 HTML 檔案,以及一個用於處理介面點選的客戶端 Javascript 檔案。這裡的介面基於 aREST.js 專案,該專案可以輕鬆控制計算機上的 WiFi 裝置。

我們先來看看名為 interface.html 的 HTML 檔案。第一部分包括匯入介面所需的所有庫 -

<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>

然後,我們在介面內定義了兩個按鈕,一個用於開啟繼電器,另一個用於再次關閉。

<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>

現在,我們還需要一個客戶端 Javascript 檔案來處理按鈕上的點選。我們還將建立一個裝置,我們將連結到我們的 Arduino 裝置的 mDNS 名稱。如果你在 Arduino 程式碼中更改了此項,則還需要在此處對其進行修改。

// Create device
var device = new Device("arduino.local");
// Button

$('#on').click(function() {
   device.digitalWrite(8, 1);
});

$('#off').click(function() {
   device.digitalWrite(8, 0);
});

進入介面資料夾,只需使用你喜歡的瀏覽器開啟 HTML 檔案即可。你應該在瀏覽器中看到類似的內容 -

繼電器控制

嘗試單擊 Web 介面上的按鈕; 它應該幾乎立即改變繼電器的狀態。

你剛剛建立了一個 Wi-Fi 控制的燈開關。當然,你可以通過這個專案來控制光線。只需確保你的繼電器支援你想要控制的裝置所需的電源,你就可以開始使用了。