 Er zijn verschillende temperatuur sensoren voor de Arduino en Esp8266 beschikbaar.
Het makkelijkste om er ervaring mee op te doen is een google opdracht te geven op 'DS18B20 Arduino Library', uit de aangeboden oplossingen eenje zoeken die jouw wat lijkt. Die library instaleren en dan bij >>bestand >> voorbeelden even zoeken naar het voorbeeld voor jouw gekozen sensor.

### DHTxx De DHT22 is wit en de DHT 11 is blauw gekleurd.
De DHT22 (of AM2302) is een goedkope luchtvochtigheid en temperatuursensor. De waarde wordt digitaal aangeboden op pin 2. De digitale data wordt elke 2 seconden aangeboden.
De linker poot is de 3 of 5 Volt aansluiting, daarnaast de data pin, een lege pin en als laatste de ground.
Ik lees dat de datapin een pull up weerstand van 4.7k t/m 10 k nodig heeft. Mijn exemplaat werkte prima zonder.

Details

Details
• Goedkoop
• 3 t/m 5 V voeding
• 2.5 mAmp verbruik
• 0-100% vochtigheids meting met 2 t/m 5 % nauwkeurigheid
• Meting van -40 t/m 80 gr. C
• .5 sampling rate (per 2 seconden)
• gewicht 2.4 gram

De DHT sensoren zijn ook beschikbaar onder de volgende namen:
-DHT11 = RHT01 = ...
-DHT21 = RHT02= AM2301 = HM2301
-DHT22 = RHT03= AM2302
-DHT33 = RHT04 = AM2303
-DHT44 = RHT05

De DHT22 is preciezer (0,5% nauwkeurig) DHT11 (2% nauwkeurig).

De DHTxx library van Adafruit is voor de DHT11 21 en 22.

Plaats de libraries in de librarie map van de Arduino en start de Arduino opnieuw op.

Nu moet je de DHT voorbeeld kunnen vinden. Eenmaal geupload in je Arduino en verbonden aan pin 2 Het voorbeeld programma laat bij mij zonder verdere aanpassingen al snel zien waar het voor bedoeld is.

Humidity: 45.10 % Temperature: 19.80 *C 67.64 *F Heat index: 19.01 *C 66.22 *F
Humidity bepaalt de luchtvochtigheid, de temperature is tja.. en de heatindex is de gevoels temperatuur. Een combinatie van vocht en temperatuur.
Ik heb de DHT22 nu een half jaar onder een afdak in de tuin. (Zie tuinserver) Het valt me op dat de vocht al een maand op 104.9 staat. Of het is al een maand erg vochtig of de vochtigheid sensor is defect gegaan.
En momenteel kan ik zowel de DHT11 als 22 niet meer aflezen met de ESP8266 nodeMcu. Zal wel een driver ding zijn.

### DS18B20  Hier is een versie beschikbaar als een slang en een versie als KY-001 een board.
De slang is een 1 draads systeem (1 voor data maar heeft nog wel een plus en min nodig). De slang versie is ideaal om vloeistoffen te meten.
Unieke 1-Wire interface vereist slechts 1 pin voor communicatie Waterdicht 100 cm snoer Uniek 64-bit serial code opgeslagen in een geintegreerde ROMKan worden gevoed vanuit datalijn./LH Voeding bereik is 3,0 V tot 5,5 VMeet temperaturen van -55 C tot +125 C0,5 C nauwkeurigheid van -10 C tot +85 C Bijde DS18B0 sensoren zijn de spec. gelijk met uitzondering van het waterdicht zijn.
De aansluiting voor de KY-001:
S naar de Arduino digitale pin
Middelste naar de Arduino + 5V
- naar Arduino gnd
Hij lijkt veel op een andere print (KY-003 hall sensor), de KY-001 heeft de sensor in de bovenste soldeer vlakken op de print en aan de linkerzijde zijn er componenten gesoldeerd.

### ARD2-2228 of KY-013 of XC4538 Er zijn grofweg 2 versies. Een rode versie heeft een analoge uitgang en een digitale uitgang. De analoge om de huidige temperatuur te meten en een digitale om een ingestelde temperatuur drempel waarde te controleren. Heeft een NTC en een een 10 kOhm weerstand.
De zwarte versie heeft alleen de analoge uitgang om de temperatuur te meten. De KY-013 is een 5V analoge temperatuur sensor met NTC thermistor.
S naar Arduino A0
Middelste pin naar de plus van de Arduino
- naar Gnd van de Arduino
Er zijn board waar de plus en de min anders verbonden zijn. Omdat er voor beide versies, analoge uitgangen uitlezen, geen library nodig is:

int ThermistorPin = A0;
int Vo;
float R1 = 10000; // value of R1 on board
float logR2, R2, T;
float c1 = 0.001129148, c2 = 0.000234125, c3 = 0.0000000876741; //steinhart-hart coeficients for thermistor

void setup() {
Serial.begin(9600);
} void loop() {
R2 = R1 * (1023.0 / (float)Vo - 1.0); //calculate resistance on thermistor
logR2 = log(R2);
T = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2)); // temperature in Kelvin
T = T - 273.15; //convert Kelvin to Celcius
// T = (T * 9.0)/ 5.0 + 32.0; //convert Celcius to Farenheit

Serial.print("Temperature: ");
Serial.print(T);
Serial.println(" C");

delay(500);
}

### GY65 of BMP085

I2C Barometer temperatuur sensor. De naam komt van de Bosch digitaal druk sensor BMP085. De module met de BMP085 heet GY-65.
Volgens de datasheet heeft de BMP een ingangsspanning tussen de 1.8 en 3.6 Volt nodig. (geen 5 Volt aansluiten dus.) Gebruik je de BMP op de GY-65 dan kan je wel 5V aansluiten, de BMP heeft een 5 naar 3.3V omzetter.
De 176 bit E2Prom is verdeeld in 11 blokken van elk 16 bits. Deze blokken bevatten 11 calibratie instellingen. Elke sensor heeft individuele instellingen.
De BMP heeft een ultra laag energie verbruik en is daardoor geschikt voor apparaten met accu verbruik.
• VCC aan 3.3V
• GND aan min
• SDA aan SCL
• SCL aan SDA
• XCLR niet verbonden is reset
• EOC niet verbonden
• Als je wil weten wat het weer gaat doen, moet je kijken hoe de druk veranderd binnen een bepaalde periode. Als de druk veranderd -250 Pa binnen een uur, krijg je onstabiel weer, zoals b.v. onweer. Lagere metingen tussen -50 en -250 Pa geven een stabiler weer maar regen achtig. Er is een demo versie met een library van Adafruit maar ik zelf voel meer voor de versie van Spartkfun.
Het is dan jammer dat werken met breuken bij Arduino lastig is. Je moet hier de temperatuur b.v. 211 delen door 10. (21.1 C)

/* BMP085 Extended Example Code
by: Jim Lindblom
SparkFun Electronics
date: 1/18/11
updated: 2/26/13

Get pressure and temperature from the BMP085 and calculate
altitude. Serial.print it out at 9600 baud to serial monitor. Update (7/19/11): I've heard folks may be encountering issues
with this code, who're running an Arduino at 8MHz. If you're
using an Arduino Pro 3.3V/8MHz, or the like, you may need to
increase some of the delays in the bmp085ReadUP and
*/

#include <Wire.h>

const unsigned char OSS = 0; // Oversampling Setting

// Calibration values
int ac1;
int ac2;
int ac3;
unsigned int ac4;
unsigned int ac5;
unsigned int ac6;
int b1;
int b2;
int mb;
int mc;
int md;

// b5 is calculated in bmp085GetTemperature(...), this variable is also used in bmp085GetPressure(...)
// so ...Temperature(...) must be called before ...Pressure(...).
long b5;

short temperature;
long pressure;

// Use these for altitude conversions
const float p0 = 101325; // Pressure at sea level (Pa)
float altitude;

void setup()
{
Serial.begin(9600);
Wire.begin();
bmp085Calibration();
}

void loop()
{
altitude = (float)44330 * (1 - pow(((float) pressure/p0), 0.190295));
temperature=round(temperature)/10;
Serial.print("Temperature: ");
Serial.print(temperature, DEC);
Serial.println(" *0.1 deg C");
Serial.print("Pressure: ");
Serial.print(pressure, DEC);
Serial.println(" Pa");
Serial.print("Altitude: ");
Serial.print(altitude, 2);
Serial.println(" m");
Serial.println();

delay(1000);
}

// Stores all of the bmp085's calibration values into global variables
// Calibration values are required to calculate temp and pressure
// This function should be called at the beginning of the program
void bmp085Calibration()
{
}

// Calculate temperature given ut.
// Value returned will be in units of 0.1 deg C
short bmp085GetTemperature(unsigned int ut)
{
long x1, x2;

x1 = (((long)ut - (long)ac6)*(long)ac5) >> 15;
x2 = ((long)mc << 11)/(x1 + md);
b5 = x1 + x2;

return ((b5 + 8)>>4);
}

// Calculate pressure given up
// calibration values must be known
// b5 is also required so bmp085GetTemperature(...) must be called first.
// Value returned will be pressure in units of Pa.
long bmp085GetPressure(unsigned long up)
{
long x1, x2, x3, b3, b6, p;
unsigned long b4, b7;

b6 = b5 - 4000;
// Calculate B3
x1 = (b2 * (b6 * b6)>>12)>>11;
x2 = (ac2 * b6)>>11;
x3 = x1 + x2;
b3 = (((((long)ac1)*4 + x3)<<OSS) + 2)>>2;

// Calculate B4
x1 = (ac3 * b6)>>13;
x2 = (b1 * ((b6 * b6)>>12))>>16;
x3 = ((x1 + x2) + 2)>>2;
b4 = (ac4 * (unsigned long)(x3 + 32768))>>15;

b7 = ((unsigned long)(up - b3) * (50000>>OSS));
if (b7 < 0x80000000)
p = (b7<<1)/b4;
else
p = (b7/b4)<<1;

x1 = (p>>8) * (p>>8);
x1 = (x1 * 3038)>>16;
x2 = (-7357 * p)>>16;
p += (x1 + x2 + 3791)>>4;

return p;
}

{
unsigned char data;

Wire.endTransmission();

while(!Wire.available())
;

{
unsigned char msb, lsb;

Wire.endTransmission();

while(Wire.available()<2)
;

return (int) msb<<8 | lsb;
}

// Read the uncompensated temperature value
{
unsigned int ut;

// Write 0x2E into Register 0xF4
// This requests a temperature reading
Wire.write(0xF4);
Wire.write(0x2E);
Wire.endTransmission();

// Wait at least 4.5ms
delay(5);

// Read two bytes from registers 0xF6 and 0xF7
return ut;
}

// Read the uncompensated pressure value
{
unsigned char msb, lsb, xlsb;
unsigned long up = 0;

// Write 0x34+(OSS<<6) into register 0xF4
// Request a pressure reading w/ oversampling setting
Wire.write(0xF4);
Wire.write(0x34 + (OSS<<6));
Wire.endTransmission();

// Wait for conversion, delay time dependent on OSS
delay(2 + (3<<OSS));

// Read register 0xF6 (MSB), 0xF7 (LSB), and 0xF8 (XLSB)
Wire.write(0xF6);
Wire.endTransmission();

// Wait for data to become available
while(Wire.available() < 3)
;

up = (((unsigned long) msb << 16) | ((unsigned long) lsb << 8) | (unsigned long) xlsb) >> (8-OSS);

return up;
}

Bronnen:
wiltronics.com.au digital-temperature-sensor
arduinomodules.info ky-013-analog-temperature-sensor-module
arduinomodules.info ky-001-temperature-sensor-module
forum.arduino.cc
playground.arduino.cc DHTLib
weerstationdenbosch.nl uitleg_begrippen