Arduino - Communication réseau

Le module WiFi CC3000 de Texas Instruments est un petit boîtier argenté, qui apporte enfin une fonctionnalité WiFi facile à utiliser et abordable à vos projets Arduino.

Il utilise SPI pour la communication (pas UART!) Afin que vous puissiez pousser les données aussi vite que vous le souhaitez ou aussi lentement que vous le souhaitez. Il a un système d'interruption approprié avec la broche IRQ afin que vous puissiez avoir des connexions asynchrones. Il prend en charge la sécurité 802.11b / g, open / WEP / WPA / WPA2, TKIP et AES. Une pile TCP / IP intégrée avec une interface «BSD socket» prend en charge TCP et UDP en mode client et serveur.

Composants requis

Vous aurez besoin des composants suivants -

  • 1 × Arduino Uno
  • 1 × carte de dérivation Adafruit CC3000
  • Relais 1 × 5V
  • 1 × diode de redressement
  • 1 × LED
  • 1 × résistance 220 Ohm
  • 1 × planche à pain et quelques fils de cavalier

Pour ce projet, vous avez juste besoin de l'EDI Arduino habituel, de la bibliothèque CC3000 d'Adafruit et de la bibliothèque MDNS CC3000. Nous allons également utiliser la bibliothèque aREST pour envoyer des commandes au relais via WiFi.

Procédure

Suivez le schéma de circuit et effectuez les connexions comme indiqué dans l'image ci-dessous.

La configuration matérielle de ce projet est très simple.

  • Connectez la broche IRQ de la carte CC3000 à la broche numéro 3 de la carte Arduino.
  • VBAT sur la broche 5 et CS sur la broche 10.
  • Connectez les broches SPI à la carte Arduino: MOSI, MISO et CLK aux broches 11, 12 et 13, respectivement.
  • V in est connecté à Arduino 5V et GND à GND.

Connectons maintenant le relais.

Après avoir placé le relais sur la maquette, vous pouvez commencer à identifier les deux parties importantes de votre relais: la partie bobine qui commande le relais et la partie interrupteur où nous allons fixer la LED.

  • Tout d'abord, connectez la broche numéro 8 de la carte Arduino à une broche de la bobine.
  • Connectez l'autre broche à la terre de la carte Arduino.

Vous devez également placer la diode de redressement (anode connectée à la broche de masse) sur les broches de la bobine pour protéger votre circuit lorsque le relais commute.

  • Connectez le + 5V de la carte Arduino à la broche commune du commutateur du relais.

  • Enfin, connectez l'une des autres broches du commutateur (généralement, celle qui n'est pas connectée lorsque le relais est éteint) à la LED en série avec la résistance de 220 Ohm, et connectez l'autre côté de la LED à la masse d'Arduino planche.

Test des composants individuels

Vous pouvez tester le relais avec le croquis suivant -

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 à noter

Le code est explicite. Vous pouvez simplement le télécharger sur la carte et le relais changera d'état toutes les secondes, et la LED s'allumera et s'éteindra en conséquence.

Ajout de la connectivité WiFi

Contrôlons maintenant le relais sans fil à l'aide de la puce WiFi CC3000. Le logiciel de ce projet est basé sur le protocole TCP. Cependant, pour ce projet, la carte Arduino exécutera un petit serveur Web, afin que nous puissions «écouter» les commandes provenant de l'ordinateur. Nous allons d'abord nous occuper de l'esquisse Arduino, puis nous verrons comment écrire le code côté serveur et créer une interface agréable.

Tout d'abord, l'esquisse Arduino. Le but ici est de se connecter à votre réseau WiFi, de créer un serveur Web, de vérifier s'il y a des connexions TCP entrantes, puis de modifier l'état du relais en conséquence.

Parties importantes du code

#include <Adafruit_CC3000.h>
#include <SPI.h>
#include <CC3000_MDNS.h>
#include <Ethernet.h>
#include <aREST.h>

Vous devez définir à l'intérieur du code ce qui est spécifique à votre configuration, c'est-à-dire le nom et le mot de passe Wi-Fi, et le port pour les communications TCP (nous avons utilisé 80 ici).

// 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

Nous pouvons ensuite créer l'instance CC3000, le serveur et l'instance aREST -

// Server instance
   Adafruit_CC3000_Server restServer(LISTEN_PORT); // DNS responder instance
   MDNSResponder mdns; // Create aREST instance
   aREST rest = aREST();

Dans la partie setup () du croquis, nous pouvons maintenant connecter la puce CC3000 au réseau -

cc3000.connectToAP(WLAN_SSID, WLAN_PASS, WLAN_SECURITY);

Comment l'ordinateur saura-t-il où envoyer les données? Une façon serait d'exécuter l'esquisse une fois, puis d'obtenir l'adresse IP de la carte CC3000 et de modifier à nouveau le code du serveur. Cependant, nous pouvons faire mieux, et c'est là que la bibliothèque MDNS CC3000 entre en jeu. Nous attribuerons un nom fixe à notre carte CC3000 avec cette bibliothèque, afin que nous puissions écrire ce nom directement dans le code du serveur.

Ceci est fait avec le morceau de code suivant -

if (!mdns.begin("arduino", cc3000)) {
   while(1);
}

Nous devons également écouter les connexions entrantes.

restServer.begin();

Ensuite, nous coderons la fonction loop () de l'esquisse qui sera exécutée en continu. Nous devons d'abord mettre à jour le serveur mDNS.

mdns.update();

Le serveur fonctionnant sur la carte Arduino attendra les connexions entrantes et traitera les demandes.

Adafruit_CC3000_ClientRef client = restServer.available();
rest.handle(client);

Il est désormais assez facile de tester les projets via WiFi. Assurez-vous d'avoir mis à jour le croquis avec votre propre nom et mot de passe WiFi, et téléchargez le croquis sur votre carte Arduino. Ouvrez votre moniteur série Arduino IDE et recherchez l'adresse IP de votre carte.

Supposons pour le reste ici que c'est quelque chose comme 192.168.1.103.

Ensuite, accédez simplement à votre navigateur Web préféré et tapez -

192.168.1.103/digital/8/1

Vous devriez voir que votre relais s'allume automatiquement.

Construction de l'interface de relais

Nous allons maintenant coder l'interface du projet. Il y aura deux parties ici: un fichier HTML contenant l'interface, et un fichier Javascript côté client pour gérer les clics sur l'interface. L'interface ici est basée sur leaREST.js projet, qui a été conçu pour contrôler facilement les appareils WiFi depuis votre ordinateur.

Voyons d'abord le fichier HTML, appelé interface.html. La première partie consiste à importer toutes les bibliothèques requises pour l'interface -

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

Ensuite, nous définissons deux boutons à l'intérieur de l'interface, l'un pour activer le relais et l'autre pour le désactiver à nouveau.

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

Maintenant, nous avons également besoin d'un fichier Javascript côté client pour gérer les clics sur les boutons. Nous allons également créer un appareil que nous allons lier au nom mDNS de notre appareil Arduino. Si vous avez changé cela dans le code Arduino, vous devrez également le modifier ici.

// Create device
var device = new Device("arduino.local");
// Button

$('#on').click(function() {
   device.digitalWrite(8, 1);
});

$('#off').click(function() {
   device.digitalWrite(8, 0);
});

Le code complet de ce projet se trouve sur le GitHubdépôt. Allez dans le dossier d'interface et ouvrez simplement le fichier HTML avec votre navigateur préféré. Vous devriez voir quelque chose de similaire dans votre navigateur -

Essayez de cliquer sur un bouton de l'interface Web; il devrait changer l'état du relais presque instantanément.

Si vous avez réussi à le faire fonctionner, bravo! Vous venez de construire un interrupteur d'éclairage contrôlé par Wi-Fi. Bien sûr, vous pouvez contrôler bien plus que des lumières avec ce projet. Assurez-vous simplement que votre relais prend en charge la puissance requise pour l'appareil que vous souhaitez contrôler, et vous êtes prêt à partir.