Arduino-network-communication

提供:Dev Guides
移動先:案内検索

Arduino-ネットワーク通信

Texas InstrumentsのCC3000 WiFiモジュールは小さな銀色のパッケージで、最終的にArduinoプロジェクトに使いやすく手頃な価格のWiFi機能をもたらします。

通信にSPI(UARTではありません!)を使用するため、データを必要な速度でプッシュしたり、必要に応じて低速でプッシュしたりできます。 IRQピンを備えた適切な割り込みシステムを備えているため、非同期接続が可能です。 802.11b/g、open/WEP/WPA/WPA2セキュリティ、TKIPおよびAESをサポートしています。 「BSDソケット」インターフェースを備えた組み込み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に接続します。
  • V〜in〜はArduino 5Vに接続され、GNDはGNDに接続されます。

リレーを接続しましょう。

ブレッドボードにリレーを配置した後、リレーの2つの重要な部分、つまりリレーを制御するコイル部分とLEDを取り付けるスイッチ部分の識別を開始できます。

  • まず、Arduinoボードのピン番号8をコイルの1つのピンに接続します。
  • もう一方のピンを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>

構成に固有のものをコード内で定義する必要があります。 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);

コンピューターは、データの送信先をどのように知るのですか? 1つの方法は、スケッチを1回実行してから、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ファイルの2つの部分があります。 ここのインターフェイスは、コンピューターからWiFiデバイスを簡単に制御するために作成された aREST.js プロジェクトに基づいています。

まず、インターフェースと呼ばれる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>

次に、インターフェイス内に2つのボタンを定義します。1つはリレーをオンにし、もう1つは再びオフにします。

<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 リポジトリにあります。 インターフェイスフォルダーに移動し、お好みのブラウザーでHTMLファイルを開きます。 あなたはあなたのブラウザの中に似たようなものを見るはずです-

リレー制御

Webインターフェースのボタンをクリックしてみてください。リレーの状態をほぼ瞬時に変更する必要があります。

あなたがそれをうまく機能させることができたなら、ブラボー! Wi-Fi制御のライトスイッチを作成しました。 もちろん、このプロジェクトではライトよりもはるかに多くを制御できます。 リレーが制御するデバイスに必要な電力をサポートしていることを確認するだけで、準備完了です。