A Physical Like/Dislike Questionnaire for Non-Profits using Raspberry Pi and Python
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.



A Physical Like/Dislike Questionnaire for Non-Profits


Overview / Functionality

SRVY uses a screen to pose a visitor a question and then records their response using two physical buttons that correspond to two different values (Like, Dislike). The response is recorded in a SQLite3 database. On a daily basis SRVY generates a series of charts and reports which are automatically uploaded to a Dropbox application. Questions can be appended on a daily basis by editing a .CSV file also located in the Dropbox account.

The intended audience is smaller art non-profits such as museums, theaters, and community art centers. The goal is to provide a low-cost and customizable tool that will allow organizations to track audience engagement and determine metrics of success with little daily upkeep.


  • questions.csv - The questions asked in srvy.py updated nightly with questions_update.py
  • srvy.db - The sqlite3 database that houses all of the responses from srvy.py
  • datetime_responses.csv - a collection of csv files with responses from different datetimes.


  • Srvy.py - Displays a question from a csv file and records user response to sqlite db
    • Unpack questions from questions.csv and create a list
    • Display a random question on to screen from list
    • Be prepared to collect input
      • If pressed
        • Record response from physical button input
          • date and time
            • mm/dd/yyyy HH:MM:SS
            • Unix time
          • Question
          • Opinion
        • Display Thank You text
          • Rest interval
        • Return to collecting input


  • Readme.md - information on initial configuration

    • Running setup.py to create srvy.db
    • Steps for tweaking srvy.py
    • Steps for hardware setup
    • Steps for creating back-up chrontab.
  • Srvy.config - sets global configuration variables on

    • Dropbox API
    • Screen size
    • Palette
    • Typeface
    • Sqlite file
    • GPIO pins for button input
      • Have set to defaults
  • Setup.py - Initializes the sqlite.db file and includes the schema

  • example.srvy.config - an example configuration file


  • Questions_update.py - overwrites local questions.csv nightly from remote Dropbox file

    • Run nightly by crontab
    • Connect to Dropbox
    • Download questions.csv from dropbox
    • Overwrite local version of questions.csv
  • daily_responses.py - creates a datetime_responses.csv file with the responses from yesterday.

    • Run by crontab
    • Set date range for collecting responses
      • Timedelta
    • Connect to srvy.db with sqlite3
    • Write responses to csv file (maybe hourly instead of daily, in case power is shut off)
    • Save csv as datetime_responses.csv in archive directory
  • Monthly_responses.py - nearly identical to daily_responses, but with a monthly timedelta

  • Srvy_backup.py - places the most recent datetime_responses.csv on to remote dropbox location and overwrites remote srvy.db with local srvy.db





Config file

  1. Find the file srvy.config.example. Rename it srvy.config.


  1. Open srvy.config in a text editor.

  2. Find the [dropbox] section:

  3. Replace INSERT_DROPBOX_TOKEN_HERE with your private Dropbox token.

  4. Save srvy.config


Possible Future Functionality

  • Add support for C.H.I.P computer instead of Raspberry Pi
  • Add support for Google Drive instead of Dropbox
  • Use a Google sheet for questions instead of CSV so questions can be edited through a browser.


The Participatory Museum