From 6eeaf8ec0a96a85586c9100704bbe73a220eb73f Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 11 Oct 2015 13:20:56 -0700 Subject: [PATCH] Add ESP8266 temp blog post --- _deploy | 2 +- ...s-to-use-mqtt-with-home-assistant.markdown | 2 +- ...e-with-esp8266-and-report-to-mqtt.markdown | 217 ++++++++++++++++++ .../blog/2015-10-esp8266-temp/ha-sensor.png | Bin 0 -> 36197 bytes 4 files changed, 219 insertions(+), 2 deletions(-) create mode 100644 source/_posts/2015-10-11-measure-temperature-with-esp8266-and-report-to-mqtt.markdown create mode 100644 source/images/blog/2015-10-esp8266-temp/ha-sensor.png diff --git a/_deploy b/_deploy index 0cadd801b97..917e54f9d62 160000 --- a/_deploy +++ b/_deploy @@ -1 +1 @@ -Subproject commit 0cadd801b97d43356af5cf1bc02a6e041ccbebb0 +Subproject commit 917e54f9d6257ae93a7976ed1daedc013a4af9f9 diff --git a/source/_posts/2015-09-11-different-ways-to-use-mqtt-with-home-assistant.markdown b/source/_posts/2015-09-11-different-ways-to-use-mqtt-with-home-assistant.markdown index d08787fcc20..49f336d48a9 100644 --- a/source/_posts/2015-09-11-different-ways-to-use-mqtt-with-home-assistant.markdown +++ b/source/_posts/2015-09-11-different-ways-to-use-mqtt-with-home-assistant.markdown @@ -6,7 +6,7 @@ date: 2015-09-11 11:19:38 +0200 date_formatted: "September 11, 2015" author: Fabian Affolter comments: true -categories: how-to +categories: how-to mqtt og_image: /images/blog/2015-09-mqtt/arduino.png --- diff --git a/source/_posts/2015-10-11-measure-temperature-with-esp8266-and-report-to-mqtt.markdown b/source/_posts/2015-10-11-measure-temperature-with-esp8266-and-report-to-mqtt.markdown new file mode 100644 index 00000000000..1cbad7a32ac --- /dev/null +++ b/source/_posts/2015-10-11-measure-temperature-with-esp8266-and-report-to-mqtt.markdown @@ -0,0 +1,217 @@ +--- +layout: post +title: "Report the temperature with ESP8266 to MQTT" +description: "Step by step tutorial to use ESP8266 and a HDC1008 to ." +date: 2015-10-11 12:10:00 -0700 +date_formatted: "October 11, 2015" +author: Paulus Schoutsen +comments: true +categories: how-to mqtt esp8266 +og_image: /images/blog/2015-10-esp8266-temp/ha-sensor.png +--- + +I recently learned about the ESP8266, a $5 chip that includes WiFi and is Arduino compatible. This means +that all your DIY projects can now be done for a fraction of the price. + +For this tutorial, I'll walk through how to get going with ESP8266, get the temperature and humidity and +report it to MQTT where Home Asssistant can pick it up. + +

+ +Home Assistant will keep track of historical values and allow you to integrate it into automation. +

+ + + +### Components + +I've been using Adafruit for my shopping: + + - [Adafruit HUZZAH ESP8266 Breakout](http://www.adafruit.com/product/2471) ([assembly instructions](https://learn.adafruit.com/adafruit-huzzah-esp8266-breakout/assembly)) + - [Adafruit HDC1008 Temperature & Humidity Sensor Breakout Board](http://www.adafruit.com/product/2635) ([assembly instructions](https://learn.adafruit.com/adafruit-hdc1008-temperature-and-humidity-sensor-breakout/assembly)) + - [MQTT server](/components/mqtt.html#picking-a-broker) + +_Besides this, you will need the usual hardware prototype equipment: a breadboard, some wires, +soldering iron + wire, Serial USB cable._ + +### Connections + +On your breadboard, make the following connections from your ESP8266 to the HDC1008: + +| ESP8266 | HDC1008 | +| ------- | ------- | +| GND | GND +| 3V | Vin +| 14 | SCL +| #2 | SDA + +_I picked `#2` and `14` myself, you can configure them in the sketch._ + +### Preparing your IDE + +Follow [these instructions](https://github.com/esp8266/Arduino#installing-with-boards-manager) on how +to install and prepare the Arduino IDE for ESP8266 development. + +After you're done installing, open the Arduino IDE, in the menu click on `sketch` -> `include library` -> +`manage libraries` and install the following libraries: + +- PubSubClient by Nick 'O Leary +- Adafruit HDC1000 + +### Sketch + +If you have followed the previous steps, you're all set. + + - Open Arduino IDE and create a new sketch (`File` -> `New`) + - Copy and paste the below sketch to the Arduino IDE + - Adjust the values line 6 - 14 to match your setup + - Optional: If you want to connect to an MQTT server without a username or password, adjust line 63. + - To have the ESP8266 accept our new sketch, we have to put it in upload mode. On the ESP8266 device + keep the GPIO0 button pressed while pressing the reset button. The red led will glow half bright to + indicate it is in upload mode. + - Press the upload button in Arduino IDE + - Open the serial monitor (`Tools` -> `Serial Monitor`) to see the output from your device + +This sketch will connect to your WiFi network and MQTT broker. It will read the temperature and humidity +from the sensor every second. It will report it to the MQTT server if the difference is > 1 since last +reported value. Reports to the MQTT broker are sent with retain set to `True`. This means that anyone +connecting to the MQTT topic will automatically be notified of the last reported value. + +```cpp + +#include +#include +#include +#include + +#define wifi_ssid "YOUR WIFI SSID" +#define wifi_password "WIFI PASSWORD" + +#define mqtt_server "YOUR_MQTT_SERVER_HOST" +#define mqtt_user "your_username" +#define mqtt_password "your_password" + +#define humidity_topic "sensor/humidity" +#define temperature_topic "sensor/temperature" + +WiFiClient espClient; +PubSubClient client(espClient); +Adafruit_HDC1000 hdc = Adafruit_HDC1000(); + +void setup() { + Serial.begin(115200); + setup_wifi(); + client.setServer(mqtt_server, 1883); + + // Set SDA and SDL ports + Wire.begin(2, 14); + + // Start sensor + if (!hdc.begin()) { + Serial.println("Couldn't find sensor!"); + while (1); + }} + +void setup_wifi() { + delay(10); + // We start by connecting to a WiFi network + Serial.println(); + Serial.print("Connecting to "); + Serial.println(wifi_ssid); + + WiFi.begin(wifi_ssid, wifi_password); + + while (WiFi.status() != WL_CONNECTED) { + delay(500); + Serial.print("."); + } + + Serial.println(""); + Serial.println("WiFi connected"); + Serial.println("IP address: "); + Serial.println(WiFi.localIP()); +} + +void reconnect() { + // Loop until we're reconnected + while (!client.connected()) { + Serial.print("Attempting MQTT connection..."); + // Attempt to connect + // If you do not want to use a username and password, change next line to + // if (client.connect("ESP8266Client")) { + if (client.connect("ESP8266Client", mqtt_user, mqtt_password)) { + Serial.println("connected"); + } else { + Serial.print("failed, rc="); + Serial.print(client.state()); + Serial.println(" try again in 5 seconds"); + // Wait 5 seconds before retrying + delay(5000); + } + } +} + +bool checkBound(float newValue, float prevValue, float maxDiff) { + return newValue < prevValue - maxDiff || newValue > prevValue + maxDiff; +} + +long lastMsg = 0; +float temp = 0.0; +float hum = 0.0; +float diff = 1.0; + +void loop() { + if (!client.connected()) { + reconnect(); + } + client.loop(); + + long now = millis(); + if (now - lastMsg > 1000) { + lastMsg = now; + + float newTemp = hdc.readTemperature(); + float newHum = hdc.readHumidity(); + + if (checkBound(newTemp, temp, diff)) { + temp = newTemp; + Serial.print("New temperature:"); + Serial.println(String(temp).c_str()); + client.publish(temperature_topic, String(temp).c_str(), true); + } + + if (checkBound(newHum, hum, diff)) { + hum = newHum; + Serial.print("New humidity:"); + Serial.println(String(hum).c_str()); + client.publish(humidity_topic, String(hum).c_str(), true); + } + } +} +``` + +### Configuring Home Assistant + +The last step is to integrate the sensor values into Home Assistant. This can be done by setting up +Home Assistant to connect to the MQTT broker and subscribe to the sensor topics. + +```yaml +mqtt: + broker: YOUR_MQTT_SERVER_HOST + username: your_username + password: your_password + +sensor: + platform: mqtt + name: "Temperature" + state_topic: "sensor/temperature" + qos: 0 + unit_of_measurement: "ÂșC" + +sensor 2: + platform: mqtt + name: "Humidity" + state_topic: "sensor/humidity" + qos: 0 + unit_of_measurement: "%" +``` diff --git a/source/images/blog/2015-10-esp8266-temp/ha-sensor.png b/source/images/blog/2015-10-esp8266-temp/ha-sensor.png new file mode 100644 index 0000000000000000000000000000000000000000..be8bf1ae5ca00adb46785fd5fa7b097b8ff9a15f GIT binary patch literal 36197 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 Cjq}g| literal 0 HcmV?d00001