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。
Components Required
您将需要以下组件:
-
1 × Arduino Uno
-
1 × Adafruit CC3000 扩展板
-
1 × 5V relay
-
1 × Rectifier diode
-
1 × LED
-
1 × 220 欧姆电阻
-
1 × 面包板和一些跳线
对于此项目,你只需要普通的 Arduino IDE,Adafruit 的 CC3000 库,和 CC3000 MDNS 库。我们还将使用 aREST 库,以便通过 WiFi 向继电器发送命令。
Procedure
按照电路图进行操作,并按照下面给出的图片所示进行连接。
此项目的硬件配置非常简单。
-
将 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 板的接地。
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);
}
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 文件。您应该在浏览器中看到类似的内容:
尝试单击网络界面上的某个按钮;它应该几乎立即更改继电器状态。
如果你成功了,恭喜!您刚刚构建了一个 Wi-Fi 控制的电灯开关。当然,通过该项目,您可以控制的远不止灯。只需确保继电器支持要控制设备所需的功率即可。