Una resistenza da 4600 Ohm va inserita tra la linea dati (gialla) ed il +5V (rossa).
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2 // GPIO2 = D4 su Wemos D1 R32
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup() {
Serial.begin(115200);
sensors.begin();
Serial.println("Sensore DS18B20 inizializzato");
}
void loop() {
sensors.requestTemperatures();
float temperatureC = sensors.getTempCByIndex(0);
if (temperatureC != DEVICE_DISCONNECTED_C) {
Serial.print("Temperatura: ");
Serial.print(temperatureC);
Serial.println(" °C");
} else {
Serial.println("Errore: sensore non trovato");
}
delay(2000); // Attendi 2 secondi
}
Per caricare i dati su un foglio di Google precedente creato caricare il seguente codice:
#include <WiFi.h>
#include <HTTPClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2 // GPIO2 = D4 su Wemos D1 R32
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// 📶 Credenziali WiFi
const char* ssid = "**************";
const char* password = "******************";
// 🌐 URL base senza parametri - quest baseUrl è stato creato in AppScript
const char* baseUrl = "https://script.google.com/macros/s/*******************/exec";
void setup() {
Serial.begin(115200);
delay(1000);
sensors.begin();
Serial.println("Sensore DS18B20 inizializzato");
WiFi.begin(ssid, password);
Serial.print("Connessione al WiFi");
int tentativi = 0;
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
if (++tentativi > 30) {
Serial.println("\nErrore: Impossibile connettersi.");
return;
}
}
Serial.println("\nWiFi connesso!");
Serial.print("IP: ");
Serial.println(WiFi.localIP());
}
void loop() {
sensors.requestTemperatures();
float temperatureC = sensors.getTempCByIndex(0);
if (temperatureC != DEVICE_DISCONNECTED_C) {
Serial.print("Temperatura: ");
Serial.print(temperatureC);
Serial.println(" °C");
} else {
Serial.println("Errore: sensore non trovato");
}
// 🔗 Costruisci URL completo
String url = String(baseUrl) + "?S1=" + String(temperatureC, 2) + "&S2=" + ""; //String(S2, 4)
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin(url);
Serial.print("Invio a: ");
Serial.println(url);
int httpCode = http.GET();
if (httpCode > 0) {
String risposta = http.getString();
Serial.print("Risposta: ");
Serial.println(risposta);
} else {
Serial.print("Errore HTTP: ");
Serial.println(httpCode);
}
http.end();
} else {
Serial.println("WiFi disconnesso.");
}
delay(5000); // attesa di 1 secondo
}
Ecco l'estensione da eseguire sul foglio di Google:
function doGet(e) {
Logger.log(JSON.stringify(e)); // Log dei parametri ricevuti
var result = 'Ok'; // Risultato iniziale
if (e.parameter == 'undefined') {
result = 'No Parameters';
} else {
var sheet_id = '*********************************'; // Inserisci qui il tuo ID del foglio
var sheet = SpreadsheetApp.openById(sheet_id).getActiveSheet(); // Recupera il foglio attivo
var nuovaRiga = sheet.getLastRow() + 1;
var rigaLavoro = 2; // Riga fissa per esempio
var rowData = [];
var d = new Date();
rowData[0] = d; // Colonna A: data e ora
rowData[1] = d.toLocaleTimeString(); // Colonna B: solo ora
for (var param in e.parameter) {
Logger.log('In for loop, param=' + param);
// ✅ Rimuove virgolette e converte in numero reale
var codice = parseFloat(stripQuotes(e.parameter[param]));
Logger.log(param + ':' + codice);
switch (param) {
case 'S1':
rowData[2] = codice; // Colonna C
result = 'Written on column C';
break;
case 'S2':
rowData[3] = codice; // Colonna D
result += ' Written on column D';
break;
default:
result = "unsupported parameter";
}
}
Logger.log(JSON.stringify(rowData));
// Scrive nella prossima riga libera
var newRange = sheet.getRange(nuovaRiga, 1, 1, rowData.length);
newRange.setValues([rowData]);
// Scrive anche nella riga 2 (sovrascrive sempre)
var fixedRange = sheet.getRange(rigaLavoro, 7, 1, rowData.length);
fixedRange.setValues([rowData]);
// (Facoltativo) Imposta il formato delle colonne C e D come numeri decimali
sheet.getRange("C:D").setNumberFormat("0.000000");
}
// Restituisce il risultato al chiamante
return ContentService.createTextOutput(result);
}
// Rimuove eventuali virgolette attorno ai parametri
function stripQuotes(codice) {
return codice.replace(/^["']|['"]$/g, "");
}