External sensors for weather station

Recently the local Institute of Electrical and Electronic Engineers (IEEE) held two “hands-on” sessions to build an Internet of Things (IoT) weather station. We built it on a breadboard so that the attendees would not have to solder wires. Several of the participants have kept their stations on-line and two have placed the unit outdoors.

Finding a suitable outdoor enclosure for the sensors is difficult. There are several available for relatively large sensors with costs from $30 to hundreds. Fortunately, a scrounging mission to Walmart turned up a nice little box for 88¢!

The box is 88 x 60 x 50mm (3.25 x 2.38 x 2.00-in). The box is transparent and has a lid the fits over the sides of the box. There is some play between the lid and the box so it allows some air movement. This can be “enhanced” by drilling four 6mm (1/4-inch) holes in the bottom of the box.

The box neatly holds a BME280 barometric pressure/temperature/humidity sensor and a BH1750 light intensity sensor. A piece of stripboard mounts the sensor breakout boards. Since the sensors are I2C devices they need four wires (two I2C and 2 power) to connect to the “control unit”. I cut the ends off a flat USB cable from the dollar store. It requires a lot of careful patience to solder the very small wires to the stripboard. I am looking for a better method.

My box is mounted to a second-floor window frame with clear packing tape. The window is above a small shingled roof. This is not an ideal location because solar heating of the roof probably affects the temperature reading. In practice, the temperature accurately tracks the local WeatherBug station reading.

The unit has been outside since 10 November 2016. It has been through several rain storms with no problems.

Outdoor Unit in rain

Solar Power Supply

A solar power supply would be a really neat addition to any Internet of Things project. The ultimate goal would be to have a self-sufficient IoT device that could be remotely reprogrammed with the Over The Air (OTA) feature.

A key to using solar power is to reduce the average power requirement of the IoT device. The ESP8266 can be put in several levels of sleep but dev kits (development kits) like the NodeMCU have other power hungry support devices that swamp out the ESP8266 power draw. The two main consumers are the voltage regulator and the USB converter chip. In deep sleep mode, the ESP8266 draws about 70μA while the total draw of the NodeMCU is about 15mA. Several people have “fixed” this issue by removing the regulator and cutting traces to the USB chip. Removing the regulator is easy, cutting traces on the USB is difficult. It was even more difficult in my case because the particular NodeMCU I was attempting to modify uses the CH340G chip rather than the CP2102. Theoretically, the same process of lifting the Vcc connection should work. For the CH340G, this is pin 16, however, I found there is no direct connection between pin 16 and 3.3V. Not having a schematic, I decided to look for other options.

I had hoped that the Adafruit HUZZAH is a good choice for sleep mode experiments. After days of experimentation, the HUZZAH fails to wake after about 20 or 30 sleep cycles. Others have experienced the same problem and offered solutions. To date, none have worked for me.

Using the exact same software, the Wemos D1 WiFi has worked perfectly. Unfortunately, the D1 has similar parasitic loads like the NodeMCU so is not a good choice for a solar-powered project. Since the same software fails on the HUZZAH there must be some hardware solution. I drew up the circuits for both dev kits with the objective of building the same circuit around the HUZZAH using external components.

Since the same software that works on the D1 fails on the HUZZAH, there must be some hardware problem. I drew up the circuits for both dev kits with the objective of building the same circuit around the HUZZAH using external components.

Schematic comparison of Wemos D1 WiFi and the Adafruit HUZZAH.

The suspiciously missing components from the D1 are circled in orange. The most significant are:

  • C11 – a 100nF capacitor from the Reset pin to ground. This value is suggested by Expressif. It probably provides some time delay on the wake-up pulse. Added this between GND and RST on the HUZZAH.
  • C10 – a 100nF bypass capacitor on Vcc. Probably not too important but easy to add between 3V and GND on the HUZZAH.
  • R13 – a 10K pull-up resistor on GPIO0. The HUZZAH has an LED in this line that may introduce too much voltage drop and leave GPIO0 in an indeterminate state. Added a 10K between 3V and #0 on the HUZZAH.
  • The logic circuit of Q1 and Q2 is driven by the DTR and RTS lines from the USB chip to automatically put the ESP8266 into programming mode. I do not think their omission from the HUZZAH is the problem. But I could be wrong!

Sadly, the HUZZAH still fails to come out of deep sleep after about 20 cycles of 120 second sleep duration.

Load more