Salve a tutti! Non scrivo nel forum da un po' di tempo E guarda caso ho cominciato a scrivere per via di un problema con la NodeMCU
Magari questo non è proprio esattamente il forum per chiedere cose riguardo alla NodeMCU, però volevo postare qui in caso qualcuno sapesse qualcosa a riguardo.
In pratica sto facendo una stazione meteo wifi, e praticamente per ora sto testando un RTC DS3231 e un BMP180. Il problema che riscontro è che singolarmente posso usare i due sensori senza problemi, ma quando li connetto in parallelo, ho problemi. Ho trovato online che poteva essere un problema di librerie, che c'è un Wire.begin, che non ci dovrebbe essere e bisogna chiamarlo solo una volta, ma sinceramente non mi funziona questa soluzione. Pure le pull up interne non risolvono il problema.
Non ho descritto ancora che tipo di problema ha: va in una specie di boot mode e mi da cose strane nella seriale
load 0x4010f000, len 1384, room 16
tail 8
chksum 0x2d
csum 0x2d
vbb28d4a3
~ld
ets Jan 8 2013,rst cause:2, boot mode:(3,6)
load 0x4010f000, len 1384, room 16
tail 8
chksum 0x2d
csum 0x2d
vbb28d4a3
~ld
Comunque questo è il mio codice che uso:
#include <ESP8266WiFi.h>
#include <Wire.h>
#include <DS3232RTC.h>
#include <TimeLib.h>
#include <Adafruit_BMP085.h>
Adafruit_BMP085 bmp;
const char* ssid = "Nome connessione"; // Your ssid
const char* password = "Password"; // Your Password
IPAddress ip(10, 0, 0, 9); //set static ip
IPAddress gateway(10, 0, 0, 138); //set getteway
IPAddress subnet(255, 255, 255, 0);//set subnet
WiFiServer server(80);
byte giornoSalvato; // variabile per memorizzare lo stato del giorno attuale
byte meseSalvato; // variabile per memorizzare lo stato del mese attuale
unsigned int annoSalvato; // variabile per memorizzare lo stato dell'anno attuale
float minTemp;
float maxTemp;
void setup() {
Serial.begin(115200);
Serial.println();
Serial.println();
maxTemp = -100; //temperatura massima giornaliera
minTemp = 100; //temperatura minima giornaliera
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.config(ip, gateway, subnet);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi is connected");
server.begin();
Serial.println("Server started");
Serial.println(WiFi.localIP());
giornoSalvato = day();
meseSalvato = month();
annoSalvato = year();
Wire.pins(4, 5); // NodeMCU v1.0 SDA=>D2 SCL=>D1
Wire.begin();
setSyncProvider(RTC.get); // si prende l'ora attuale dell'RTC
// Initialize the sensor (it is important to get calibration values stored on the device).
bmp.begin();
}
void loop() {
float pressurehpa = bmp.readPressure() / 100;
float tp = bmp.readTemperature();
if (tp < minTemp)
{
minTemp = tp;
}
if (tp > maxTemp)
{
maxTemp = tp;
}
if (giornoSalvato != day())
{
giornoSalvato = day();
maxTemp = tp;
minTemp = tp;
}
WiFiClient client = server.available();
/*
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: 10"); // update the page after 10 sec
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.print("<p style='text-align: center;'><span style='font-size: x-large;'><strong>Digital Thermometer</strong></span></p>");
client.print("<p style='text-align: center;'><span style='color: #0000ff;'><strong style='font-size: large;'>Temperature= ");
client.print(bmp.readTemperature(),1);
client.println("*C");
client.print("<p style='text-align: center;'><span style='color: #0000ff;'><strong style='font-size: large;'>Pressure at level sea = ");
client.print(pressurehpa,1);
client.println("hPa");
client.print("</p>");
client.println("</html>");
*/
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.print(year());
client.print("/");
client.print(month());
client.print("/");
client.print(day());
client.print("/");
client.print(" ");
client.print(hour());
client.print(":");
client.print(minute());
client.print(":");
client.print(second());
client.print("&v0=-37.938906&v0=145.129615&v0=Clayton South(VIC)&v0=52m s.l.m.&v0=");
client.print(tp, 1);
client.print("&v0=");
client.print("UMIDITA");
client.print("&v0=");
client.print(pressurehpa, 1);
client.print("&v0=");
client.print("ND");
client.print("&v0=");
client.print("ND");
client.print("&v0=");
client.print("ND");
client.print("&v0=");
client.print(minTemp, 1);
client.print("&v0=");
client.print(maxTemp, 1);
client.print("&v0=");
client.print("ND");
client.print("&v0=");
client.print("ND");
client.println("</html>");
}
Per ora non mi vengono in mente altre informazioni da fornire, se avete domande chiedete pure!
Un'altra cosa è che i dispositivi hanno diversi indirizzi:
Scanning (SDA : SCL) - GPIO4 : GPIO5 - I2C device found at address 0x57 !
I2C device found at address 0x68 !
I2C device found at address 0x77 !
Non so perché ne trova tre comunque
Ho trovato questo online:
The I2C address of the DS3231 is 0x68. 0x57 is the I2C address of the AT24C32 EEPROM on your ZS-042 RTC module