0-ESP32-MicroPython ESP32 ESP8266 Project Tech

Low Power Weather Station Datalogger using ESP8266

Low Power Weather Station Datalogger using ESP8266

This venture exhibits the best way to construct a knowledge logger that publishes temperature, humidity and strain readings each 10 minutes to a Google Sheets spreadsheet utilizing an ESP8266 12-E. Between sensor readings the ESP is in deep sleep mode and solely consumes 7μA. The ESP board is programmed utilizing MicroPython and we use the IFTTT Webhooks service to combine the challenge with Google sheets.

This undertaking can also be suitable with the ESP32. You simply need to make a number of modifications within the code (we’ll present you what you want to do).

All through this undertaking, you’ll study the next ideas:

  • Learn temperature, humidity and strain with the BME280 and ESP8266/ESP32 utilizing MicroPython;
  • Make HTTP submit requests in MicroPython to ship sensor readings to a third-party service;
  • Use IFTTT Webhooks providers to save lots of sensor readings in a Google Sheets spreadsheet;
  • Put the ESP8266/ESP32 in deep sleep mode and wake it up with a timer.

MicroPython firmware

On this undertaking we’ll program the ESP8266/ESP32 with MicroPython firmware. To program the ESP8266 and ESP32 with MicroPython, we use uPyCraft IDE as a programming setting (you should use some other appropriate programming setting). Comply with the subsequent tutorials to put in uPyCraft IDE and flash MicroPython firmware in your board:

Creating Your IFTTT Account

On this venture we’ll publish the sensor readings in a Google Sheets spreadsheet. To try this, use IFTTT Webhooks providers. So, you should create a free account on IFTTT.

Go the official website ifttt.com, enter your e-mail and full your account to get began.

Creating an Applet

Subsequent, it’s essential create a brand new Applet. Comply with the subsequent steps to create a brand new Applet:

1) Go to “My Applets“and create a brand new Applet by clicking the “New Applet” button.

2) Click on on the “this” phrase that’s in a blue shade – as highlighted within the determine under.

three) Seek for the “Webhooks” service and choose the Webhooks icon.

four) Select the “Obtain an internet request” set off.

5) Give a reputation to the occasion. On this case, we’ll be utilizing “bme_280_readings” and we advocate utilizing that very same occasion identify as proven within the determine under. After that, click on the “Create set off” button.

6) Click on the “that” phrase to proceed.

7) Seek for the “Google Sheets” service, and choose the Google Sheets icon.

eight) Should you haven’t related with the Google Sheets service but, you have to click on the “Join” button.

9) Select the “Add a row to spreadsheet” motion.

10) Then, full the motion fields. Give the spreadsheet a reputation, and depart the opposite fields as default. Lastly, click on the “Create motion” button.

11) Your Applet ought to be created after you press the “End” button.


Testing Your Applet

Earlier than continuing with the venture, it is rather essential to check your applet first. Comply with the subsequent steps to check your Applet.

1) Go to the Webhooks Service web page, and click on the “Documentation” button.

2) A web page as proven within the following determine will seem. The web page exhibits your distinctive API key. You shouldn’t share your distinctive API key with anybody.

Fill the “To set off an Occasion” part as proven under – it’s highlighted with pink rectangles. Then, click on the “Check it” button.

Notice: save your IFTTT API key since you’ll want it later on this undertaking. 

three) The occasion ought to be efficiently triggered, and also you’ll get a inexperienced message as proven under saying “Occasion has been triggered“.

four) Go to your Google Drive. The IFTTT service ought to have created a folder referred to as “IFTTT” with the “MakerWebooks/bme280” folder inside. Inside this folder, you’ll discover the Bme_280_readings spreadsheet.

5) Open the spreadsheet. It is best to have the values you’ve crammed beforehand to check the Applet.

Proceed studying this tutorial to see how one can combine the IFTTT Google Sheets service together with your ESP8266 or ESP32.

Elements Required

Right here’s an inventory of elements you have to construct the circuit for this venture:

For this challenge we’ll be utilizing the ESP8266 12-E as a result of it consumes much less energy in deep sleep mode (it doesn’t have a built-in programmer). You can too use an ESP8266 NodeMCU Package or an ESP32 improvement board.

You should use the previous hyperlinks or go on to MakerAdvisor.com/instruments to seek out all of the elements on your tasks at one of the best worth!

Importing Code to the ESP8266 12-E Chip

Importing code to the ESP-12E requires establishing a serial communication between your ESP8266 and an FTDI Programmer as proven within the schematic diagram under.

  • RX – TX
  • TX – RX
  • VCC – VCC
  • VCC – EN
  • GND – GND
  • GND – GPIO15
  • GND – GPIO0

Putting in the BME280 library

The library to learn from the BME280 sensor isn’t a part of the usual MicroPython firmware. So, it’s essential to add the library to your ESP8266/ESP32 board.

In uPyCraft IDE, create a brand new file by urgent the New File button (1). Copy the BME280 library code into it. The BME280 library code might be discovered within the following hyperlink:


Save the file by urgent the Save button (2).

Name this new file “BME280.py” and press okay.

Click on the Obtain and Run button.

Observe: for those who’re having hassle importing a brand new script to your ESP board, you may have to re-flash the MicroPython firmware in your board: Flash/Add MicroPython Firmware to ESP. When the ESP is in deep sleep mode, you possibly can’t add new scripts. Be sure to reset your board, press the Cease button in uPyCraft IDE instantly to catch it awake, so you possibly can entry the saved scripts and add new ones.

The file must be saved on the system folder with the identify “BME280.py” as highlighted within the determine under.

Now, you need to use the library functionalities in your code by importing the library.


After importing the BME2820.py file to your ESP8266 or ESP32, copy the next code to the boot.py file. The boot.py file runs as soon as on boot (it means each time the ESP8266/ESP32 wakes up).

Earlier than importing the code to your board, it is advisable embrace your personal community credentials and your distinctive IFTTT API key. Proceed studying to see how to try this.

How the Code Works

Let’s take a fast take a look at the code and see the way it works.

Importing libraries

You begin by importing the required modules. To work together with the GPIOs and skim knowledge from the sensor by way of I2C communication, you might want to import the Pin and I2C courses from the machine module. You additionally import the entire machine module to have the ability to use features associated with deep sleep.

import machine
from machine import Pin, I2C

You should import the BME280 library that you simply beforehand uploaded to the board.

import BME280

To hook up with your community, you could import the community module.

import community

You want the urequests library. This library permits you to make HTTP requests. On this instance, we’ll make a request to the IFTTT providers to publish the sensor readings to a Google Sheets spreadsheet.

import urequests

Lastly, import the sleep perform from the time module to have the ability to add delays to the code.

from time import sleep

Setting your community credentials

It’s essential to add your SSID and password within the following variables:


Together with your IFTTT API key

Insert your distinctive API key from the Webhooks IFTTT service within the following line:


Setting the sleep time

On this instance we’ve set the sleep time to 10 minutes (600000 milliseconds). Which means each 10 minutes the ESP wakes up, takes the readings, and publishes them in your Google Sheets spreadsheet. The sleep time is about within the ms_sleep_time variable in milliseconds:

ms_sleep_time = 600000

Warning: when you set a really brief interval, you might exceed the restrict of requests imposed by the IFTTT providers.

Connecting to the community

The next strains join the ESP8266/ESP32 to your router, and print the ESP IP handle:

station = community.WLAN(community.STA_IF)

station.join(ssid, password)

whereas station.isconnected() == False:

print(‘Connection profitable’)

Deep sleep perform (ESP8266)

Then, create a perform referred to as deep_sleep() that accepts as argument the variety of milliseconds we would like the ESP8266 to be in deep sleep mode.

def deep_sleep(msecs) :
# configure RTC.ALARM0 to have the ability to wake the gadget
rtc = machine.RTC()
rtc.irq(set off=rtc.ALARM0, wake=machine.DEEPSLEEP)

# set RTC.ALARM0 to fireside after X milliseconds (waking the gadget)
rtc.alarm(rtc.ALARM0, msecs)

# put the system to sleep

Word: should you’re utilizing an ESP32, you don’t have to create/use this perform.

Studying temperature, humidity, and strain

Then, create an I2C occasion referred to as i2c. You want this to create an I2C reference to the BME280 sensor. Cross as arguments the SCL and SDA pins, in addition to a frequency. Don’t fear concerning the frequency, a worth of 10000 Hz works simply high-quality for this sensor.

The ESP8266 default I2C pins are GPIO 5 (SLC) and GPIO four (SDA).

i2c = I2C(scl=Pin(5),sda=Pin(four), freq=10000)

The ESP32 default I2C pins are GPIO 22 (SCL) and GPIO 21 (SDA). Remark the earlier line and uncomment the next line when you’re utilizing an ESP32 board.

#i2c = I2C(scl=Pin(22),sda=Pin(21), freq=10000)

Then, use attempt to besides statements. Within the attempt assertion, we learn from the sensor and make an HTTP publish request to the IFTTT providers.

The temperature is saved on the temp variable, the humidity on the hum variable, and the strain on the pres variable.

bme = BME280.BME280(i2c=i2c)
temp = bme.temperature
hum = bme.humidity
pres = bme.strain

Uncomment the next strains, if you wish to get temperature in Fahrenheit levels.

# uncomment for temperature in Fahrenheit
#temp = (bme.read_temperature()/100) * (9/5) + 32
#temp = str(spherical(temp, 2)) + ‘F’

Then, retailer the sensor readings in JSON format within the sensor_readings variable. That is required to make the HTTP POST request on IFTTT.

sensor_readings = ‘value1′:temp[:-1]’value2′:hum[:-1]’value3’:pres[:-3]

Observe: the BME280 library returns the readings with models (C for temperature, % for humidity, and hpa for strain). To make it simpler to analyse the info later, we take away the models by including [:-1] to take away the final character from the string. The [:-3] for the strain removes the final three characters from the string (hpa).

HTTP Publish request

A common HTTP POST request in MicroPython utilizing the urequests library has the next format:

request= requests.submit(json=headers=)

The primary parameter is the URL by which you’ll make the request. As we’ve seen within the IFTTT Applet, we have to use the next URL (through which api_key shall be changed with your personal API key):


The JSON parameter ought to include knowledge in JSON format. In our case, that’s the sensor_readings variable:


The headers parameter incorporates details about the request. For our request, the headers must be as follows:

request_headers = ‘Content material-Sort’: ‘software/json’

Lastly, we make the request utilizing the publish() technique with the knowledge we’ve outlined earlier:

request = urequests.submit(
‘http://maker.ifttt.com/trigger/bme_280_readings/with/key/’ + api_key,

Lastly, print the request and shut the connection:

print(request.textual content)

If studying knowledge from the sensor or publishing the sensor readings fails, the besides assertion runs and we print the ‘Did not learn/publish sensor readings.’ message.

besides OSError as e:
print(‘Did not learn/publish sensor readings.’)

The besides statements in MicroPython forestall your board from crashing in case an error happens.

Going to sleep

After making the HTTP POST request, we put the ESP8266/ESP32 in deep sleep mode. Use the next line should you’re utilizing an ESP8266:


Remark the earlier line and uncomment the next line in case you’re utilizing an ESP32:


Word: to make use of deep sleep with the ESP32 with timer get up, we simply want to make use of the deepsleep() technique and move as an argument the sleep time in milliseconds.

Constructing the Circuit

The BME280 sensor we’re utilizing communicates by way of I2C communication protocol.

Comply with one of many subsequent schematics relying on the board you’re utilizing.

ESP8266 12-E

Necessary: you must solely join GPIO16 to the RST pin after importing the code. This connection is required in order that the ESP8266 is ready to wake itself up.

Notice: should you’re utilizing an ESP8266 12-E, we advocate utilizing an adapter to have the ability to use it with a breadboard to make the wiring simpler. Alternatively, you possibly can made a PCB at house like we did. We used the etching method.

esp8266 12-E PCB adapter to breadboard

ESP8266 NodeMCU Package

For those who’re utilizing an ESP8266 NodeMCU package, you additionally want to attach the RST pin to GPIO 16 (D0) after importing the code.


In case you’re utilizing an ESP32, you simply have to wire the circuit as proven within the schematic diagram:

Notice: in the event you’re utilizing a unique board, double-check the pinout in your board.


After importing the required information to your board within the following order:

  1. BME280.py
  2. boot.py

The ESP8266/ESP32 will begin publishing the sensor readings on the Google Sheets spreadsheet.

Energy Consumption

When the ESP8266 12-E is in deep sleep mode it consumes about 7uA to 8uA.

When the ESP8266 wakes up and connects to Wi-Fi, the present consumption can go as much as 80mA.

Observe: in the event you’re utilizing a ESP improvement board, you’ll get a better present consumption in deep sleep.

Powering the ESP8266/ESP32 with Batteries

When you construct this undertaking with the ESP8266 12-E chip, it makes use of little or no energy throughout deepsleep (roughly 7uA). You’ll be able to energy it utilizing batteries and they’ll final for a number of months (and even years relying on the capability).

We plan to create a Half 2 of this challenge utilizing a battery powered circuit. In the meantime, you possibly can learn this tutorial to energy the ESP utilizing LiPo and Li-ion batteries.

Wrapping Up

With this venture you’ve discovered learn how to construct a datalogger that publishes sensor readings to a Google Sheets spreadsheet. All through the directions, you’ve discovered easy methods to use the BME280, make HTTP POST requests and use deep sleep with ESP8266/ESP32 utilizing MicroPython.

We hope you’ve discovered this challenge fascinating. You might also like:

Thanks for studying.

Really helpful Assets