Arduino 简明教程

Arduino - Network Communication

Texas Instruments 的 CC3000 WiFi 模块是一款小型银色封装,它最终为你的 Arduino 项目带来了易于使用、价格低廉的 WiFi 功能。

它使用 SPI 进行通信(而非 UART!),因此你可以按照你想要的速度将数据推送出去。它有一个带 IRQ 引脚的适当中断系统,因此你可以拥有异步连接。它支持 802.11b/g、开放的/WEP/WPA/WPA2 安全性、TKIP 和 AES。一个带有“BSD 套接字”界面的内置 TCP/IP 协议栈,在客户端和服务器模式下都支持 TCP 和 UDP。

network communication

Components Required

您将需要以下组件:

  1. 1 × Arduino Uno

  2. 1 × Adafruit CC3000 扩展板

  3. 1 × 5V relay

  4. 1 × Rectifier diode

  5. 1 × LED

  6. 1 × 220 欧姆电阻

  7. 1 × 面包板和一些跳线

对于此项目,你只需要普通的 Arduino IDE,Adafruit 的 CC3000 库,和 CC3000 MDNS 库。我们还将使用 aREST 库,以便通过 WiFi 向继电器发送命令。

Procedure

按照电路图进行操作,并按照下面给出的图片所示进行连接。

network communication connections

此项目的硬件配置非常简单。

  1. 将 CC3000 板的 IRQ 引脚连接到 Arduino 板的 3 号引脚。

  2. 将 VBAT 连接到 5 号引脚,将 CS 连接到 10 号引脚。

  3. 将 SPI 引脚连接到 Arduino 板:将 MOSI、MISO 和 CLK 分别连接到 11 号、12 号和 13 号引脚。

  4. Vin 连接到 Arduino 5V,GND 连接到 GND。

现在,让我们连接继电器。

将继电器放在面包板上之后,您就可以开始识别继电器上的两个重要部分:继电器控制线圈部分和 LED 连接开关部分。

  1. 首先,将 Arduino 板的 8 号引脚连接到一个线圈引脚。

  2. 将另一个引脚连接到 Arduino 板的接地。

您还必须将整流二极管(阳极连接到接地引脚)放在线圈引脚上,以便继电器切换时保护电路。

  1. 将 Arduino 板的 +5V 连接到继电器开关的公共引脚。

  2. 最后,将开关的另一引脚(通常是继电器断开时未连接的引脚)连接到与 220 欧姆电阻串联的 LED,并将 LED 的另一边连接到 Arduino 板的接地。

Testing Individual Components

您可以使用以下草图对继电器进行测试 −

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

Code to Note

代码不言自明。您只需将其上传到电路板,继电器就会每秒切换一次状态,LED 会相应地开关。

Adding WiFi Connectivity

现在,让我们使用 CC3000 WiFi 芯片无线控制继电器。此项目的软件基于 TCP 协议。但是,对于此项目,Arduino 板将运行一个小 web 服务器,以便我们可以“侦听”来自计算机的命令。我们首先处理 Arduino 草图,然后我们了解如何编写服务器端代码并创建漂亮界面。

首先,Arduino 草图。这里的目标是连接到您的 WiFi 网络,创建一个 web 服务器,检查是否有传入的 TCP 连接,然后相应地更改继电器状态。

Important Parts of the Code

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

然后,只需转到你最喜欢的网络浏览器并输入以下内容即可:

192.168.1.103/digital/8/1

您应该看到您的继电器自动打开。

Building the Relay Interface

现在,我们将对项目的界面进行编码。这里将有两个部分:包含界面的 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 存储库中找到。转到界面文件夹,然后只需用你最喜欢的浏览器打开 HTML 文件。您应该在浏览​​器中看到类似的内容:

relay control

尝试单击网络界面上的某个按钮;它应该几乎立即更改继电器状态。

如果你成功了,恭喜!您刚刚构建了一个 Wi-Fi 控制的电灯开关。当然,通过该项目,您可以控制的远不止灯。只需确保继电器支持要控制设备所需的功率即可。