SparkFun ESP32 Thing Environment Sensor Shield

The SparkFun ESP32 Thing Environment Sensor Shield provides sensors and hookups for monitoring environmental conditions. While incorporating three sensors capable of measuring five different environmental variables as well as providing connections for several other sensors, this sensor shield creates the best way to make your ESP32 Thing more accurate than your local weatherman! By simply soldering on a few headers as well as an optional 3-pin screw terminal, your ESP32 Thing Environment Sensor Shield will be ready to detect any type of weather you need.

The ESP32 Thing Environment Sensor Shield utilizes the BME280 pressure/humidity/temperature sensor, the CCS811 air quality sensor and the APDS-9301 ambient light sensor — using each corresponding Arduino library. In addition to the onboard sensors, the environment sensor shield has been equipped with two RJ11 connectors for wind and rain detection and measurement, as well as optional pins for external temperature readings and our soil moisture sensor. There is even a prototyping area underneath where the ESP32 Thing is installed so you can add your own additions to the shield!

Get Started with the ESP32 Environment Shield Guide

  • Pressure/Humidity/Temperature Sensor — BME280
  • Air Quality — CCS811
  • Ambient Light — APDS-9301
  • Compatible with the ESP32 Thing

SparkFun ESP32 Thing Environment Sensor Shield Product Help and Resources

ESP32 Environment Sensor Shield Hookup Guide

July 6, 2017

SparkFun's ESP32 Environment Sensor Shield provides sensors and hookups for monitoring environmental conditions. This tutorial will show you how to connect your sensor suite to the Internet and post weather data online.

Weather Meter Hookup Guide

July 20, 2017

How to assemble your very own weather meter!

Core Skill: Soldering

This skill defines how difficult the soldering is on a particular product. It might be a couple simple solder joints, or require special reflow tools.

1 Soldering

Skill Level: Noob - Some basic soldering is required, but it is limited to a just a few pins, basic through-hole soldering, and couple (if any) polarized components. A basic soldering iron is all you should need.
See all skill levels


Core Skill: Programming

If a board needs code or communicates somehow, you're going to need to know how to program or interface with it. The programming skill is all about communication and code.

2 Programming

Skill Level: Rookie - You will need a better fundamental understand of what code is, and how it works. You will be using beginner-level software and development tools like Arduino. You will be dealing directly with code, but numerous examples and libraries are available. Sensors or shields will communicate with serial or TTL.
See all skill levels


Core Skill: Electrical Prototyping

If it requires power, you need to know how much, what all the pins do, and how to hook it up. You may need to reference datasheets, schematics, and know the ins and outs of electronics.

3 Electrical Prototyping

Skill Level: Competent - You will be required to reference a datasheet or schematic to know how to use a component. Your knowledge of a datasheet will only require basic features like power requirements, pinouts, or communications type. Also, you may need a power supply that?s greater than 12V or more than 1A worth of current.
See all skill levels


Customer Comments

  • Testing this out before putting it up and temperature is off. I expect it to be a little off but by 17 degrees F is too much. Already have an ESP8266 station running but wanted to add rain, wind etc so got this. Anyone else run into temperature being off?

  • Is there any source example code written by python as I need to run it on raspberry pi?

  • Seems like this combined with the ESP32 Thing (and in a radiation shield) routinely reads 5-10 degrees Fahrenheit higher than a commercial weather station down the street. Initially I figured it was because I was ludicrously transmitting roughly once per second, but even after I turned it down to once per minute, the temp is still high. I don’t have an IR cam, or I’d try to figure out if it’s high for some other reason (i.e. the CCS811, maybe?) I’ll probably end up adding a fan to the radiation shield to get air moving around it…

    Also, looks like the CCS811 is meant more for indoor air quality as opposed to outdoor…so I may just turn that off, anyway.

    • I’ve tried a couple things to get the temperature to match what other stations around me (one about 3 blocks away), like adding a fan to keep air circulating in the radiation shield, not initializing the CCS811 or the APDS-9301, and going to a 5-minute poll rate. Even with those things, the temperature was 2-5 degrees F higher than the next nearest weather station on Wunderground.

      So, I just now tried setting the BME280 runMode to 1 (i.e. :“forced”) rather than 3 (“normal”), due to the fact that the datasheet says that forced mode is recommended for my application, which is an outdoor weather station. Now it doesn’t report anything back other than 64.9 degrees F, and it’s DEFINITELY NOT 64.9 degrees F (it’s closer to 50).

      EDIT: Humidity and pressure aren’t coming back right, either.

      According to the source code, it doesn’t look like there’s anything else needed to run in “forced” mode, so I’m just wondering if anyone else has used this mode?

  • What TVS Diode was used there? Can’t find it’s sketch? is it something on ESP32 board?

  • Nice board, guys. I’ve got one on order now. For battery planning purposes, can you give me a ROM on the power usage that this combined with a Thing32 (assuming decent wifi reception) might run me?

    • Sitting on my desk taking readings it’s pulling down about 170mA. It’s connected to WiFi with a pretty decent connection strength. It takes a very short time to transmit data to wunderground, but it looks like it peaks out at around 190mA during that period (which is about 1 second long).

    • Oh, and there may be a bit of a kerfuffle with the luminosity datasheet. The one in the “zip” package is for a ADPS-9960 and the one on the Github is labeled -9301, but looks to actually be a for a -9007. Mouser has a separate one for the -9301 here: http://www.mouser.com/ds/2/678/V02-2315EN0-909643.pdf . Did you change the unit in production, maybe?

      • I’ll look into this. You’re right, those aren’t the correct datasheets. I’m not sure what happened, exactly, but we’ll fix it.

Customer Reviews

No reviews yet.