E’ il momento di gestire la comunicazione WiFi WeMos IIC Attiny85 per sfruttare le caratteristiche WiFi della WeMos.
In primo luogo sai che la WeMos è basata sulla ESP8266 che puoi utilizzare sia come micro controllore sia per la comunicazione WiFi.
In questo articolo, infatti proverai a trasferire i dati acquisiti dalla WeMos via WiFi ad un computer connesso in rete.
Lo schema di collegamento WiFi WeMos IIC Attiny85
Lo schema di collegamento relativo al WiFi WeMos IIC Attiny85 non è differente da quello precedentemente utilizzato per Attiny85 IIC WeMos ed utilizzato per lo scorso articolo:
Non avrai necessità di altri collegamenti tra le schede in quanto i segnali analogici e digitali, acquisiti dall’attiny85, saranno trasferiti via i2c al micro controllore.
Lo sketch WiFi WeMos IIC Attiny85
Lo sketch lato WeMos ha due specifiche funzioni:
- acquisire le info dall’attiny85 in I2C
- eseguire la connessione WiFi e trasferire i dati
La parte WiFi WeMos non è trattata in questo articolo in quanto già ho dedicato a questo argomento altri miei articoli che ti invito a leggere.
Inoltre ci sarebbero moltissimi argomenti da approfondire per i quali ti invito a leggere articoli dedicati alla tecnologia WiFi.
In generale il network e le comunicazioni, i protocolli, il trasferimento dati in streaming ecc… sono solo alcuni degli argomenti che dovrai approfondire per comprendere fino in fondo come avviene al comunicazione tra il microcontrollore e la rete WiFi.
Non tratterò tutti questi argomenti in modo specifico per non distogliere la tua attenzione sull’argomento principale: WiFi WeMos IIC Attiny85;
Se sei interessato ad approfondirli potrai farlo in modo autonomo su questo blog o consultando le risorse presenti sul web.
Ecco allo sketch:
#include <ESP8266WiFi.h> #include <WiFiUdp.h> #include <OSCBundle.h> #include <Wire.h> #define TARGET_ID 0x08 char ssid[] = "Al.......G"; // your network SSID (name) char pass[] = "m..............i"; // your network password WiFiUDP Udp; // A UDP instance to let us send and receive packets over UDP const IPAddress outIp(192,168,2,104); // remote IP of your computer const unsigned int outPort = 9001; // remote port to receive OSC const unsigned int localPort = 8001; // local port to listen for OSC packets (actually not used for sending) void setup() { Wire.begin(); // GPIO4 = D2 = SDA , GPIO5 = D1 = SCL Wire.setClockStretchLimit(15000); Serial.begin(9600); // Connect to WiFi network Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, pass); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); Serial.println("Starting UDP"); Udp.begin(localPort); Serial.print("Local port: "); Serial.println(Udp.localPort()); pinMode(A0,INPUT); } void loop() { Wire.requestFrom(TARGET_ID,5); while(Wire.available() > 0) { byte adc0H = Wire.read(); byte adc0L = Wire.read(); byte adc1H = Wire.read(); byte adc1L = Wire.read(); byte swh1 = Wire.read(); int adc0 = adc0H << 8 | adc0L; int adc1 = adc1H << 8 | adc1L; OSCBundle bndl; bndl.add("/analog/0").add((int32_t)adc0); bndl.add("/analog/1").add((int32_t)adc1); bndl.add("/digital/1").add((int8_t)swh1); Udp.beginPacket(outIp, outPort); bndl.send(Udp); Udp.endPacket(); bndl.empty(); } delay(100); }
Le linee 01-04: includono le librerie necessarie al funzionamento dello sketch ed in particolare:
- la ESP8266WiFi per l’accesso WiFi e la connessione;
- la WiFiUdp per la codifica dei pacchetti udp;
- la OSCBundle che usi per codificare i messaggi in OSC;
- la Wire per la comunicazione IIC verso l’attyny;
la linea 06: definisci il TARGET_ID ossia l’indirizzo con cui dialoghi con l’Attiny85;
linee 08-09: inserisci le credenziali di accesso alla tua WiFi;
linea 11: inizializza l’instanza udp della classe WiFiUdp;
linee 13-15: imposta l’ip del servisio OSC, in questo esempio è il mio computer, e le porte di comunicazione locale e remota;
linee 19-20: imposta la comunicazione I2C tra attiny85 e WeMos. Poni attenzione sul secondo paramentro necessario per adeguare il clock della comunicazione tra il micro controllore slave e l’ESP8266. Ho impiegato qualche giorno a trovare il metodo ed il parametro ( 15000 ) per consentire alla WeMos di iviare e ricevere i dati in modo corretto;
linea 29: esegui la connessione WiFi;
linee 31-34: fino a quando la connessione non sarà in stato WL_CONNECTED il monitor seriale visualizzerà una sequenza di “.” con u tempo di 500millisecondi di attesa tra uno ed il successivo;
linea 42: inizializza la comunicazione Udp sulla porta locale;
linee 51-61: si preoccupano di richiedere ed acquisire le informazioni in i2c dall’attiny85 e riportarle nella forma a 10bit per i segnali analogici ed a 1 byte per il digitale;
linee 63-66: crea l’istanza bndl a cui aggiungi i tre messaggi successivi sui canali /analog/0, /analog/1 e /digital/1;
linea 68: inizializza il pacchetto Udp verso il computer sulla porta 9001;
linea 69: invia il pacchetto bndl via Udp;
linea 70: chiudi la comunicazione Udp;
linea 71: svuota il pacchetto bndl per la trasmissione successiva.
Le linee di cui non trovi spiegazione sono trattate in numerosi altri articoli come ad esempio tutti quelli dedicati all’IIC o I2C per la comunicazione e l’acquisizione dei valori da parte della WeMos via I2C.
Risultato dello sketch
Dopo aver trasferito lo sketch sulla WiFi WeMos IIC Attiny85 puoi aprire il monitro seriale e leggere i valori acquisiti e trasferiti:
In posizione di riposo il joystick è circa al centro e lo switch è in pullup. Cliccando dul joystick ottieni:
che influisce sul solo valore di switch, passsando da 1 a 0.
Spingi la leva del joystick in alto:
e quindi in basso:
poi a destra:
ed infine a sinistra:
I valori del joystick per ciascun asse varieranno da 0 a 1023.
All’ADC0 è connesso l’asse X ed all’ADC1 l’asse Y come hai potuto osservare dai valori del monitor seriale.