Arduino - 網路通訊



德州儀器公司的 CC3000 WiFi 模組是一個小型銀色封裝,它最終為您的 Arduino 專案帶來了易於使用且價格合理的 WiFi 功能。

它使用 SPI 進行通訊(不是 UART!),因此您可以根據需要快速或慢速地推送資料。它具有帶 IRQ 引腳的適當中斷系統,因此您可以進行非同步連線。它支援 802.11b/g、開放/WEP/WPA/WPA2 安全性、TKIP 和 AES。具有“BSD 套接字”介面的內建 TCP/IP 協議棧支援客戶端和伺服器模式下的 TCP 和 UDP。

Network Communication

所需元件

您將需要以下元件:

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

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

步驟

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

Network Communication Connections

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

  • 將 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 板的地線。

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

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

  • 最後,將開關的另一個引腳(通常是繼電器關閉時未連線的引腳)與 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>

您需要在程式碼中定義特定於您配置的內容,即 WiFi 名稱和密碼,以及 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。

然後,只需開啟您喜歡的 Web 瀏覽器,然後鍵入:

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

此專案的完整程式碼可以在 **GitHub** 儲存庫中找到。進入 interface 資料夾,只需使用您喜歡的瀏覽器開啟 HTML 檔案。您應該在瀏覽器中看到類似的內容:

Relay Control

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

如果您成功運行了它,太棒了!您剛剛構建了一個 WiFi 控制的燈開關。當然,您可以使用此專案控制比燈光多得多的東西。只要確保您的繼電器支援您要控制的裝置所需的功率,就可以了。

廣告