A self-service health kiosk that measures vital signs, performs differential diagnosis, and locate the nearby health facilities.
- 📊 Vital Signs - Multiple sensors for measuring vital signs.
- 📃 Differential Diagnosis - Multiple sensors for measuring vital signs.
- 🪲 Disease Information - Shows disease information including the precautions to take.
- 🏥 Nearby Facilities - Locates the nearest facilities where the kiosk is deployed.
- Jose Paulo C. Cabral | BS Computer Engineering | Systems Administration | [email protected]
- Joshua Albert T. Lopez | BS Computer Engineering | Intelligent Systems | [email protected]
- Reinhold E. Lucana | BS Computer Engineering | Systems Administration | [email protected]
- John Edward Sam T. Matienzo | BS Computer Engineering | Systems Administration | [email protected]
- Raspberry Pi 4 (setup according to schematics found in
assets/schematic.png
) - NodeMCU (ESP8266)
- Chromium web browser
- display drivers (may vary)
The code was tested on the official Raspberry Pi OS 32-bit (bullseye).
PRETTY_NAME="Raspbian GNU/Linux 11 (bullseye)"
NAME="Raspbian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"
To run a development environment, simply follow the following steps:
- Clone the repository on the intended local machine (The instructions will assume that the default pi user is used at the home directory of
/home/pi/
).$ git clone https://github.com/paucabral/health-kiosk.git
- Create the respective
.env
files for both the backend and frontend applications. The respective.env.sample
file for each can be used as a template for the environment variables needed inside each application. In this case, the environment variable set for the sensors endpoint could be a dummy API or the actual sensor endpoint. - Afterwards, run the
run-dev.sh
script from abash
shell to automate the process of installing the dependencies and running the respective applications. The backend server is a Django web application which runs on port8000
while the frontend server is a React web application that runs on port3000
.$ bash run-dev.sh
To run the kiosk in production, simply follow the following steps:
- Prepare the system packages by running the
install.sh
script with superuser privileges on the Raspberry Pi 4.$ sudo bash install.sh
- Upload the code located at
nodemcu/nodemcu-sensors.ino
to the NodeMCU (ESP8266). - Create the respective
.env
files for both the backend and frontend applications. The respective.env.sample
file for each can be used as a template for the environment variables needed inside each application. - Generate a self-signed SSL certificate using the command below. Fill out the necessary details as well or leave them at default except the
Common Name
field.$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout private.key -out certificate.crt
Country Name (2 letter code) [AU]: PH State or Province Name (full name) [Some-State]: Metro Manila Locality Name (eg, city) []: Marikina Organization Name (eg, company) [Internet Widgits Pty Ltd]: High Grounds Organizational Unit Name (eg, section) []: Common Name (e.g. server FQDN or YOUR name) []: raspberrypi.local Email Address []:
- Move the generated certificate and private key to the corresponding SSL directories.
$ sudo mv private.key /etc/ssl/private/private.key
$ sudo mv certificate.crt /etc/ssl/certs/certificate.crt
- Run the
build.sh
script to build the frontend and backend code.$ bash build.sh
- Copy the
health-kiosk.desktop
file inside the autostart directory. This will run the server and launch the Chromium web browser in kiosk mode on boot of the desktop environment.$ sudo cp health-kiosk.desktop /etc/xdg/autostart/health-kiosk.desktop
- For the shutdown button, add the
rpi/rpi_shutdown_script/shutdown.py
script in/etc/rc.local
aboveexit 0
line. Follow the highlighted line below.#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. # Print the IP address _IP=$(hostname -I) || true if [ "$_IP" ]; then printf "My IP address is %s\n" "$_IP" fi sudo python3 /home/pi/health-kiosk/rpi/rpi_shutdown_script/shutdown.py & exit 0