This is the software part of a project I built while volunteering with a research group at a physics lab. I was tasked with using two Raspberry Pi’s to monitor temperature, pressure, and humidity in various places throughout two rooms. To see the hardware portion of the project, click here.
- Distributed network of up to 16 sensors, using two Raspberry Pi’s
- Pi’s forward data to a host computer via Redis database server using a pub/sub paradigm
- Data is stored in CSV files for easy user access
- Uses python as server backend to pre-process and calculate stats on the data
Here’s my stack in 4 steps:
Step 1: read sensors on Pi
This is easy enough in Python. First you send a byte to the multiplexer to select a channel, then just read the sensor with the BME280 Python module.
Step 2: publish data to redis server
Redis is a database server with easy to use Python bindings. Redis supports a paradigm called “pub/sub” where the Pi’s publish their data to different channels and the server subscribes to them. For a project like this you have to make sure to catch all the connection related exceptions and to automatically reconnect if something fails.
Step 3: process data for display on page
The host computer stores the data in CSV files as they are really easy to work with in Python and people can access the data easily. When a web user selects a set of data they wish to view, a request is sent to the server to run a python script which processes the latest data and stats to be displayed. This is accomplished using CGI (Common Gateway Interface), a protocol which tells the server to execute the script rather than serving it.
Step 4: load the data into the page for display
This was a pretty simple setup that works for getting ambient data from two Pi’s to a web app.
Things I would consider if I redid the project:
- Reduce overhead by just using straight TCP to send the data to the host computer
- Use SQL rather than .csv files and just have a function to generate a .csv file given a date range
That’s the software side of things. Here is how the hardware came together.