Sensors for weather station?

Hello!

I’m building a weather station. Not super original, I realize, but a lot of fun nonetheless.

I’ve gotten a hold of a nice Davis anemometer, everything is working great, and I’m looking into expanding with other sensors.

I’ve found multiple references to the CircuitCo Weather Cape, but it seems like it’s no longer in production. Furthermore, I thought it’d be better (more reliable, more accurate) to have the sensors located outside the enclosure. Or am I wrong?

AdaFruit sells such a thing (AM2302), but the protocol looks iffy (I’m using Bonescript, not Python). SparkFun has a bunch of options also, but they all look like “internal” sensors, i.e. not meant for exposure.

I’ve seen other projects go with an all-in-one weather sensor kit sold by Davis; it looks like a bit much. And rather pricey.

I’m curious to hear what other enthusiasts use… Thanks!

Pretty much ANY sensors will need you to provide a suitable housing
(even that AM2302 is not warded against splashes. You want a white housing
(white to reflect sunlight) with downward slanting louvers on all sides for
air-flow, but which will block rain splatters from the stuff on the inside
(obviously a rain gauge will be outside -- most of them work on a trip
system that counts each time a bucket exceeds some mass and empties).

  You likely won't want to run all that many wires either -- especially
if each sensor is using a different protocol*.

  I really think what I'd do is obtain an Arduino (or Adafruit Circuit
Python Metro card), as both are microcontrollers capable of strict timing
tasks. Wire all sensors to this card, and use a simple program that just
loops reading each sensor, and then formatting the data into a simple
string that could be sent over a serial port. The Arduino/Metro would be
mounted in the top of the sensor housing, and would require a source of
power, and a (long run) serial line (due to length, one might want to run a
slow baud rate to reduce line noise effects). Four wires: 5V, GND, Tx, Rx.
(Actually, if you have the unit continuously sending data, and have not
command mode, you could drop one of the serial lines).

* The protocol used by DHT-type sensors is rather timing critical. I'm
pretty sure Python will not keep up on its own, and suspect Bonescript will
have the same problem. I vaguely recall once trying to code a bit-banged
version in C, and I'm not certain I was able to get reliable readings on a
BBB -- the OS overhead and process swapping got in the way. You could write
something that runs on a PRU to get reliable timing.

  The basic/simplest reading process consists of sending the START
signal, then timing (simple loop counting loop cycles) the first signal
transition from the DHT. This gives you the timing baseline, late 1s and 0s
tend to be longer or shorter than the baseline (check spec sheet). Each bit
transition needs to be counted/timed. After you've obtained the timing for
all bits you can make the determination of 1 or 0, package them into bytes,
and return them as a value.

  If one has access to a system clock, it does remove the need to count
loop cycles. I can't locate my C attempt; my Python attempt -- which as I
recall wasn't fast enough -- years ago, was:

Great advice!

Thank you, Dennis.

A minor improvement on the "shelter"... Tack up window screen or
mosquito netting on the inside of the louvers to prevent it becoming a hive
of wasps and hornets... <G>