Ciao ragazzi, ho da poco iniziato un progetto per costruire una "stazione meteo" da mettere sopra il tetto di casa mia. Ho deciso di usare UNO con un sensore dht22 e un bmp220. Ho intenzione di trasmettere i dati ad un indirizzo ip e poi vedrò di manipolarli con php o qualcosa di simile.
Sono alla fase di test con la ethernet shield, dopo aver provato tutti i sensori ed aver verificato il corretto funzionamento.
Ho iniziato con l'esempio Webserver integrato nell'ide, quindi ho inserito al posto della lettura dei valori A0-->A5 il codice per la lettura del dht22. riesco a vedere correttamente puntando all'indirizzo ip di arduino i dati di temperatura e umidità rilevati.
Per quanto riguarda il bmp220 ho problemi in quanto se provo ad inserire una qualsiasi funzione per questo sensore come bmp.readTemperature(), arduino non riesce neanche a inizializzare la rete, ne a comunicare alcun dato.
Il sensore è collegato con interfaccia I2C ai pin A4 e A5 come da sketch di esempio del sensore, unica cosa che ho dovuto fare è modificare nella libreria del sensore (adafruit_bmp280.h) l'indirizzo in 0x76.
Vi posto lo sketch che sto cercando di usare, sicuro di un vostro aiuto! Grazie
/*
Web Server
A simple web server that shows the value of the analog input pins.
using an Arduino Wiznet Ethernet shield.
Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13
* Analog inputs attached to pins A0 through A5 (optional)
created 18 Dec 2009
by David A. Mellis
modified 9 Apr 2012
by Tom Igoe
modified 02 Sept 2015
by Arturo Guadalupi
*/
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
//#define BMP_SCK 13
//#define BMP_MISO 12
//#define BMP_MOSI 11
//#define BMP_CS 10
Adafruit_BMP280 bmp; // I2C
//Adafruit_BMP280 bmp(BMP_CS); // hardware SPI
//Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK);
#include "DHT.h"
DHT dht;
#include <SPI.h>
#include <Ethernet.h>
// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 0, 200);
// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
dht.setup(2); // data pin 2
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
// start the Ethernet connection and the server:
Ethernet.begin(mac, ip);
server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
}
void loop() {
// listen for incoming clients
EthernetClient client = server.available();
if (client) {
Serial.println("new client");
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
// if you've gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so you can send a reply
if (c == '\n' && currentLineIsBlank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close"); // the connection will be closed after completion of the response
client.println("Refresh: 5"); // refresh the page automatically every 5 sec
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
// output the value of each analog input pin
delay(dht.getMinimumSamplingPeriod());
float humidity = dht.getHumidity();
float temperature = dht.getTemperature();
float temperature1= bmp.readTemperature();
client.print(humidity);
client.print("% ");
client.print(temperature);
client.print(" °C ");
client.println("
");
client.print("Temperature = ");
client.print(temperature1);
client.print(" *C");
client.println("
");
// for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
// int sensorReading = analogRead(analogChannel);
// client.print("analog input ");
// client.print(analogChannel);
// client.print(" is ");
// client.print(sensorReading);
// client.println("
");
// }
client.println("</html>");
break;
}
if (c == '\n') {
// you're starting a new line
currentLineIsBlank = true;
} else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(100);
// close the connection:
client.stop();
Serial.println("client disconnected");
}
}