Sei sulla pagina 1di 3

#include <SoftwareSerial.

h>

#define DEBUG true

SoftwareSerial mySerial(9,10); //creazione di una porta seriale software per il collegamento con
l'atra Arduino (facoltativa, serve solo per il debugging)

void setup()

Serial.begin(115200); // inizializza la comunicazione con il modulo ESP8266 (cambiare la


velocità se quella del tuo modulo è differente, di solito è 115200 o 57600 o 9600.

mySerial.begin(9600); // inizializza la comunicazione con l'atra Arduino (facoltativa, serve


solo per il debugging)

pinMode(11,OUTPUT);

digitalWrite(11,LOW);

pinMode(12,OUTPUT);

digitalWrite(12,LOW);

pinMode(13,OUTPUT);

digitalWrite(13,LOW);

sendData("AT+RST\r\n",2000,DEBUG); // resetta modulo

sendData("AT+CWMODE=2\r\n",1000,DEBUG); // configura come access point

sendData("AT+CIFSR\r\n",1000,DEBUG); // ottieni un indirizzo ip

sendData("AT+CIPMUX=1\r\n",1000,DEBUG); // configura per connessioni multiple

sendData("AT+CIPSERVER=1,80\r\n",1000,DEBUG); // avvia server sulla porta 80

void loop()

if(Serial.available()) // controlla se il modulo sta comunicando

if(Serial.find("+IPD,")) //Cerca nella comunicazione seriale la stringa di testo "+IPD,"


questa è una stringa che viene inviata quando premi il bottone nella pagina html

delay(1000);

int connectionId = Serial.read()-48; //Ottieni il connection id, sottrai 48 perchè nella


tabella ASCII lo zero è il 48.

Serial.find("pin="); // adesso cerca "pin="


int pinNumber = (Serial.read()-48)*10; //leggi il primo numero e moltiplicalo per 10, es per
il pin 13 leggi 1 e moltiplicalo per 10

pinNumber += (Serial.read()-48); //leggi il secondo numero e sommalo al primo, es per il pin


13 leggi 3 e sommalo a quello che avevamo prima (10)

digitalWrite(pinNumber, !digitalRead(pinNumber)); //cambia di stato il pin 13 (impostando


l'opposto di quello che c'è sul pin 13 stesso)

// componi il comando di chiusura da inviare al modulo

String closeCommand = "AT+CIPCLOSE=";

closeCommand+=connectionId; // attacca il connection id

closeCommand+="\r\n";

sendData(closeCommand,1000,DEBUG); // invia il comando di chiusura

/*

Funzione usata per inviare i dati al modulo ESP8266

Parametri: command - il dato/comando da inviare

timeout - il tempo massimo di attesa per una risposta

debug - attiva o disattiva l'invio di dati per il serial monitor (true = si, false =
no)

Returns: la risposta dell' esp8266 (se c'è una risposta)

*/

String sendData(String command, const int timeout, boolean debug)

String response = "";

Serial.print(command); // invia il comando all' esp8266

long int time = millis();

while((time+timeout) > millis())

while(Serial.available())
{

char c = Serial.read(); // componi la risposta coi caratteri ricevuti dal modulo

response+=c;

if(debug)

mySerial.print(response);

return response;