Tempo fa ho pubblicato il progetto AmbientMonitor: un termometro ed igrometro basato su Arduino e una interfaccia web AJAX.
Per la comunicazione ethernet, ho utilizzato uno shield con chip ENC28J60; Danny Kimbler mi ha inviato uno sketch che invece utilizza lo shield ufficiale (chip W5100) e un sensore temperatura DS18B20:
Ho pubblicato lo sketch nel mio repository Github, vediamone alcuni elementi:
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x7D, 0x54 }; byte ip[] = { 10, 150, 41, 3 }; byte subnet[] = { 255, 255, 255, 0 }; byte gateway[] = { 10, 150, 41, 254 }; |
I parametri di rete (indirizzo IP, netmask…) sono definiti all’inizio dello sketch e devono essere ovviamente adattati alla particolare rete a cui viene collegato lo shield.
#define TEMPERATURE_INDOOR 5 OneWire oneWireIndoor(TEMPERATURE_INDOOR); DallasTemperature sensorIndoor(&oneWireIndoor); |
Per interfacciarsi al sensore Dallas, sono necessarie due librerie:
[checklist]
- OneWire, di PJRC
- DallasTemperature, di Miles Burton
[/checklist]
Nell’esempio, il sensore è collegato al PIN5 di Arduino.
temperatureIndoor = readTemperatureCelsius(sensorIndoor); client.print("myCB({'temperature':"); client.print(temperatureIndoor); client.print(",'humidity':"); client.print(temperatureIndoor); client.print("})"); |
Lo sketch invia i dati (in formato JSON) alla pagina AJAX… non avendo a disposizione anche il dato relativo all’umidità, Danny invia due volte il dato di temperatura…
float readTemperatureCelsius(DallasTemperature sensor) { sensor.requestTemperatures(); float temperature = sensor.getTempFByIndex(0); return temperature; } |
La funzione readTemperatureCelsius utilizza alcuni metodi della libreria DallasTemperature per ottenere la temperatura attuale dal sensore.
Grazie mille a Danny per avermi inviato il suo sketch, ora potete provare il mio progetto AmbientMonitor con i due più diffusi ethernet shields!