Continuando a sperimentare con Attiny85 IIC WeMos puoi usare la comunicazione I2C per collegare alla WeMos segnali provenienti da più fonti analogiche.
La WeMos è dotata di un solo ingresso analogico ADC, a cui collegare, ad esempio, un potenziometro o una sonda di temperatura analogica.
Nelle scorse settimane hai letto delle sperimentazioni che ho eseguito con un joystick analogico dotato di due potenziometri:
- Attiny85 slave ADC i2C joystick switch
- Leonardo master ADC i2C joystick switch
- Attiny84 IIC Leonardo
- Leonardo IIC Attiny84
puoi estendere la sperimentazione dall’arduino Leonardo alla WeMos in modo da poter facilmente accedere alla comunicazione WiFi insita nell’ESP8266.
Schema dei collegamenti Attiny85 IIC WeMos
In questo articolo leggi come collegare l’attiny alla WeMos in I2C, o IIC, ed i due segnali analogici provenineti dal Joystick.
Essendo il joystick dotato ance di uno switch, segale digitale, e l’attiny85 di 3 pin liberi oltre ad SDA ed SCL puoi collegare anche quest’ultimo ad un pin digitale:
Lo schema è chiaro tuttavia se vuoi approfondire i collegamenti Attiny85 IIC WeMos puoi osservare le foto seguenti :
sopra puoi osservare i colori dei fili che arrivano all’attiny85.
Continuando puoi osservare la connessione del Joystick, in cui ho mantenuto i colori della precedente foto:
e dai quali deduci ad esempio che:
- il cavo arancioine è collegato allo switch
- il cavo bianco alla Y
- il cavo verde alla X
Infine osserva la connessione II2 verso WeMos:
Sketch Attiny85 IIC WeMos
Il primo sketch sul quale ti puoi concentrare riguarda l’Attiny85 Slave attendendo che la scheda WeMos, che funzionerà da master, richiedendo le informazioni lette sui sui pin analogici codificate per l’invio su i2c:
// Code for the ATtiny85 #define I2C_SLAVE_ADDRESS 0x08 // Address of the slave #include <TinyWireS.h> #define ADC3 A3 #define ADC2 A2 #define SWH1 1 void setup() { TinyWireS.begin(I2C_SLAVE_ADDRESS); // join i2c network TinyWireS.onRequest(requestEvent); pinMode(ADC2, INPUT); pinMode(ADC3, INPUT); pinMode(SWH1, INPUT_PULLUP); } void loop() { // This needs to be here TinyWireS_stop_check(); } // Gets called when the ATtiny receives an i2c request void requestEvent() { int val=analogRead(ADC2); uint8_t valLow = val & 0xff; uint8_t valHigh = (val >> 8); TinyWireS.send(valHigh); TinyWireS.send(valLow); val=analogRead(ADC3); valLow = val & 0xff; valHigh = (val >> 8); TinyWireS.send(valHigh); TinyWireS.send(valLow); TinyWireS.send(digitalRead(SWH1)); }
come puoi vedere, se sei un lettore abituale, lo sketch è il medesimo analizzato nei precedenti articoli dedicati all’Attiny85 ed alla comunicazione I2C.
Ricorda che lo sketch acquisisce i dati analogici a 10bit ( 1024 valori ) e il dato dello switch in forma digitale.
Riporto per completezza lo sketch.