Arduino-network-communication
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制御のライトスイッチを作成しました。 もちろん、このプロジェクトではライトよりもはるかに多くを制御できます。 リレーが制御するデバイスに必要な電力をサポートしていることを確認するだけで、準備完了です。