Arduino - Comunicazione di rete

Il modulo WiFi CC3000 di Texas Instruments è un piccolo pacchetto argento, che finalmente offre funzionalità WiFi facili da usare e convenienti ai tuoi progetti Arduino.

Utilizza SPI per la comunicazione (non UART!) In modo da poter inviare i dati alla velocità desiderata o lentamente. Ha un corretto sistema di interruzione con pin IRQ in modo da poter avere connessioni asincrone. Supporta 802.11b / g, sicurezza aperta / WEP / WPA / WPA2, TKIP e AES. Uno stack TCP / IP integrato con un'interfaccia "socket BSD" supporta TCP e UDP sia in modalità client che in modalità server.

Componenti richiesti

Avrai bisogno dei seguenti componenti:

  • 1 × Arduino Uno
  • 1 × scheda breakout Adafruit CC3000
  • Relè 1 × 5V
  • 1 × diodo raddrizzatore
  • 1 × LED
  • 1 resistenza da 220 Ohm
  • 1 × Breadboard e alcuni cavi jumper

Per questo progetto, hai solo bisogno del solito IDE Arduino, della libreria CC3000 di Adafruit e della libreria MDNS CC3000. Utilizzeremo anche la libreria aREST per inviare comandi al relè tramite WiFi.

Procedura

Seguire lo schema del circuito ed effettuare i collegamenti come mostrato nell'immagine sotto riportata.

La configurazione hardware per questo progetto è molto semplice.

  • Collega il pin IRQ della scheda CC3000 al pin numero 3 della scheda Arduino.
  • VBAT al pin 5 e CS al pin 10.
  • Collega i pin SPI alla scheda Arduino: MOSI, MISO e CLK rispettivamente ai pin 11, 12 e 13.
  • V in è collegato ad Arduino 5V e GND a GND.

Colleghiamo ora il relè.

Dopo aver posizionato il relè sulla breadboard, puoi iniziare a identificare le due parti importanti sul tuo relè: la parte della bobina che comanda il relè e la parte dell'interruttore a cui collegheremo il LED.

  • Innanzitutto, collega il pin numero 8 della scheda Arduino a un pin della bobina.
  • Collega l'altro pin alla massa della scheda Arduino.

È inoltre necessario posizionare il diodo raddrizzatore (anodo collegato al pin di terra) sui pin della bobina per proteggere il circuito quando il relè sta commutando.

  • Collegare i + 5V della scheda Arduino al pin comune dell'interruttore del relè.

  • Infine, collega uno degli altri pin dell'interruttore (di solito, quello che non è collegato quando il relè è spento) al LED in serie con la resistenza da 220 Ohm, e collega l'altro lato del LED alla massa di Arduino tavola.

Testare i singoli componenti

Puoi testare il relè con il seguente schizzo:

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

Codice da notare

Il codice è autoesplicativo. Puoi semplicemente caricarlo sulla scheda e il relè cambierà stato ogni secondo e il LED si accenderà e spegnerà di conseguenza.

Aggiunta di connettività WiFi

Controlliamo ora il relè in modalità wireless utilizzando il chip WiFi CC3000. Il software per questo progetto si basa sul protocollo TCP. Tuttavia, per questo progetto, la scheda Arduino eseguirà un piccolo server web, quindi possiamo "ascoltare" i comandi provenienti dal computer. Prima ci occuperemo dello sketch di Arduino, poi vedremo come scrivere il codice lato server e creare una bella interfaccia.

Innanzitutto, lo schizzo di Arduino. L'obiettivo qui è connettersi alla rete WiFi, creare un server Web, verificare se ci sono connessioni TCP in entrata e quindi modificare di conseguenza lo stato del relè.

Parti importanti del codice

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

Devi definire all'interno del codice ciò che è specifico della tua configurazione, cioè nome e password Wi-Fi e la porta per le comunicazioni TCP (abbiamo usato 80 qui).

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

Possiamo quindi creare l'istanza CC3000, il server e un'istanza REST -

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

Nella parte setup () dello schizzo, ora possiamo collegare il chip CC3000 alla rete -

cc3000.connectToAP(WLAN_SSID, WLAN_PASS, WLAN_SECURITY);

Come farà il computer a sapere dove inviare i dati? Un modo sarebbe eseguire lo schizzo una volta, quindi ottenere l'indirizzo IP della scheda CC3000 e modificare nuovamente il codice del server. Tuttavia, possiamo fare di meglio, ed è qui che entra in gioco la libreria MDNS CC3000. Assegneremo un nome fisso alla nostra scheda CC3000 con questa libreria, in modo da poter scrivere questo nome direttamente nel codice del server.

Questo viene fatto con il seguente pezzo di codice:

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

Dobbiamo anche ascoltare le connessioni in entrata.

restServer.begin();

Successivamente, codificheremo la funzione loop () dello sketch che verrà eseguito continuamente. Per prima cosa dobbiamo aggiornare il server mDNS.

mdns.update();

Il server in esecuzione sulla scheda Arduino attenderà le connessioni in arrivo e gestirà le richieste.

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

Ora è abbastanza facile testare i progetti tramite WiFi. Assicurati di aver aggiornato lo schizzo con il tuo nome WiFi e password e carica lo schizzo sulla tua scheda Arduino. Apri il tuo monitor seriale IDE Arduino e cerca l'indirizzo IP della tua scheda.

Supponiamo per il resto che sia qualcosa come 192.168.1.103.

Quindi, vai semplicemente al tuo browser web preferito e digita -

192.168.1.103/digital/8/1

Dovresti vedere che il tuo relè si attiva automaticamente.

Costruzione dell'interfaccia di inoltro

Ora codificheremo l'interfaccia del progetto. Ci saranno due parti qui: un file HTML contenente l'interfaccia e un file Javascript lato client per gestire i clic sull'interfaccia. L'interfaccia qui è basata suaREST.js progetto, che è stato creato per controllare facilmente i dispositivi WiFi dal tuo computer.

Vediamo prima il file HTML, chiamato interface.html. La prima parte consiste nell'importare tutte le librerie richieste per l'interfaccia -

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

Quindi, definiamo due pulsanti all'interno dell'interfaccia, uno per accendere il relè e l'altro per spegnerlo di nuovo.

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

Ora, abbiamo anche bisogno di un file Javascript lato client per gestire i clic sui pulsanti. Creeremo anche un dispositivo che collegheremo al nome mDNS del nostro dispositivo Arduino. Se lo hai modificato nel codice Arduino, dovrai modificarlo anche qui.

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

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

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

Il codice completo per questo progetto può essere trovato su GitHubrepository. Vai nella cartella dell'interfaccia e apri semplicemente il file HTML con il tuo browser preferito. Dovresti vedere qualcosa di simile all'interno del tuo browser -

Prova a fare clic su un pulsante nell'interfaccia web; dovrebbe cambiare lo stato del relè quasi istantaneamente.

Se sei riuscito a farlo funzionare, bravo! Hai appena costruito un interruttore della luce controllato tramite Wi-Fi. Certo, puoi controllare molto di più delle luci con questo progetto. Assicurati solo che il tuo relè supporti la potenza richiesta per il dispositivo che desideri controllare e sei a posto.