The Raspberry Pico W is a cheap microcontroller (around €8) that can control sensors and access a WIFI network. With a bit of soldering and MicroPython, you can have the Pico serving ambient data in JSON format over your local network, then log it with a database and visualise it in a dashboard. Here I’m just going to briefly describe my setup as the basis for later blog articles.

Overall setup

Architecture diagram

Architecture diagram

The graphic above shows the overall setup. We’ve got:

  • One or more Picos, with a temperature and humidity sensor connected to each
  • A wifi connection from the Pico(s) to the router
  • A Raspberry Pi
    • Manjaro ARM minimal as OS (no desktop environment), with Docker installed
    • The Ambient Data logger (a small Python application) runs inside a Docker container. It queries the Picos every 10 minutes and writes data to the Postgres DB
    • The Postgres DB runs inside another Docker container, and this is where data is logged
    • Yet another Docker container holds a Grafana installation, exposed on port 80 for access via the network. Grafana queries the Postgres DB regularly
    • Anyone on the local network can log into Grafana (if they have an account) and see the visualised data

The Pico W

I soldered a sensor to each Pico W (A DHT-22 to one, and a BME280 to another) and wrote some MicroPython code to listen for requests over the network, take a reading, then respond to the request with JSON data.

Raspberry Pi

I’ve got a Raspberry Pi running Manjaro ARM minimal, which has Docker installed. As described above, it has a custom-written script to log and store the data is in one container, a Postgres database in another, and a Grafana installation in another.

I tried to keep the setup as modular as possible so that I can easily extend it and store the configuration in a Git repository. That way, if anything breaks I can recreate my setup relatively easily.

That’s it for now!