Easy Health Monitor with PocketBeagle®, Click Boards & WiFi

Easy to build and program health monitor provides heart rate, temperature and moisture readings. Uses BeagleBoard PocketBeagle.

Categories: Beginner

Introduction

The goal of this project is to provide a step-by-step guide to make a stand-alone or IoT enabled health monitoring application. This project uses
BeagleBoard.org® PocketBeagle®

and
MikroElektronika Click Boards™


.

PocketBeagle® is an ultra-tiny-yet-complete open-source USB-key-fob computer developed by
BeagleBoard.org®
and features the
OSD3358-SM System-in-Package (SiP) from Octavo Systems.
This project features the
Heart rate 3
Click Board and
Weather
Click Board along with a WiFi dongle to create a remote health monitor.

Get the story behind the story
on the Octavo Systems blog site

.

Hardware and Software Basics:

BeagleBoard.org® PocketBeagle® Headers

The project will use the 2 headers of PocketBeagle® to connect the MikroElektronika Click Boards. The following figure shows the pin-out of the 2 headers of PocketBeagle®.

BeagleBoard.org® PocketBeagle® pin-out

The default function of each pin is highlighted in dashed line. Click Boards™ have a standardized
MikroBUS™
pin-out (shown below).

Click Board interface

BeagleBoard.org®
PocketBeagle® (pictured below) headers conform to the MikroBUS™ standard and allow for two click boards™ to be interfaced with PocketBeagle® at a time (shown in the following figure). Although no guarantees are made with respect to compatibility, most click boards™ work with PocketBeagle® with a little bit of effort.

BeagleBoard.org® PocketBeagle®

BeagleBoard.org® PocketBeagle® header pins with click board positions

MikroElektronika produces 450 click boards that provide functionalities that include sensing and communication. The figure below shows an example of how click boards can be added to PocketBeagle®. These examples are OLED and RadioStation.

Example Click Boards™  plugged into BeagleBoard.org® PocketBeagle®

Software Image

This project’s procedure assumes that an SD card with a Linux image from Beagleboard.org:
https://beagleboard.org/latest-images
is installed on PocketBeagle®. Please see the
PocketBeagle® System Reference Manual
for additional information on bringing up and connecting PocketBeagle®.

Gateway Architecture

In the health monitoring application, PocketBeagle® functions as a measurement sensor. It can be part of a fleet of sensors that send data to a gateway where data is gathered and is sent to a display or processed for decision making. The following figure shows the block diagram of the system.

IoT System Integrating the Health Monitor

While the health monitor is part of this system of multiple sensors that send data to be aggregated, It can also operate individually without other components of the system.

Building the Health Monitor:

Step 1: Install Click Boards on PocketBeagle

The heart rate 3 click board uses the
AFE4404
analog front end IC for digital measurements of photoplethysmography (PPG) signal. The click board exposes I2C interface of the analog front end. We will use I2C1 interface of the header on PocketBeagle® to communicate with the click board. This corresponds to ‘Click board position #1’ in the above header position figure.

The weather click board uses the
BME280
sensor for temperature and humidity measurements. The weather click board exposes the I2C interface of the sensor. We will use I2C2 interface of the header on PocketBeagle® to communicate with the click board. This corresponds to ‘Click board position #2’ in the above header position figure. The following figure shows the positions of the two click boards on PocketBeagle®.

Heart Rate 3 and Weather Click Boards installed on PocketBeagle®

Step 2: Add USB Host Port for WiFi Dongle

First, the USB1 port needs to be enabled and made into a “Host” USB port. This part needs a little bit of soldering.

Back side of PocketBeagle® - See USB solder bridge connections

The above figure shows how enable the USB1 peripheral. “VI” pin (VIN) needs to be connected to the “VB” (VBUS) pin. Additionally, to set the USB port to “Host” mode, “ID” pin needs to be connected to ground (GND). We can do this by using solder jumpers on the backside of PocketBeagle®. Now that USB1 Host port is enabled, we need to connect it to a USB breakout connector. To do this, a small solderless breadboard can be used. First, wire up connections as shown in the following figure.

Solderless Breadboard with Connections for USB Breakout

The wiring setup as shown requires the header pin 1 of PocketBeagle® to be inserted in Row 2 and the USB breakout board header pin 1 to be inserted in Row 25. Please note that while the power (VBUS) and ground (GND) wires can be different lengths, the D+/D- wires (i.e. the two middle wires) should be the same length. Additionally, a piece of double-sided sticky foam can be placed on the breadboard to provide mechanical support to the USB breakout board. The following figure shows PocketBeagle® with the two click boards and the USB port installed.

PocketBeagle® with click boards and USB host port

Step 3: Connect PocketBeagle® via Cloud9 IDE

Use a Micro-USB to USB cable to connect PocketBeagle® to a computer/laptop. You should be able to bring up the Cloud9 IDE by entering the URL:
http://192.168.7.2:3000/ide.html
into the web browser. (use
http://192.168.6.2:3000/ide.html
for MAC o/s) Make sure you are using Chrome or Firefox. The IDE should look like the following figure:

Cloud9 IDE

Step 4: Connect WiFi Adapter and Connect to Internet

The Python code for this project relies on some external packages and code repositories. To install these things, you will need to first connect PocketBeagle® to the internet. You can either use
this tutorial
on how to connect to the internet or you can use a USB WiFi adapter to connect directly to a WiFi router that can provide internet connectivity.

You will eventually need to use the WiFi adapter to connect to the IoT gateway but first we need to setup the software. This section will go through how to connect to a WiFi network and can be referenced later. If you only want to see the sensor outputs on a terminal in Cloud9, you do not need a WiFi adapter.

First, install the USB WiFi adapter as shown:

USB WiFi Adapter Installed

In a Cloud9 terminal, run the command ‘ifconfig’. The output should show a "wlan" interface as shown below:

debian@beaglebone:/var/lib/cloud9$ ifconfig

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

       inet 127.0.0.1  netmask 255.0.0.0

  

...

  

wlan0: flags=-28669<UP,BROADCAST,MULTICAST,DYNAMIC>  mtu 1500

       ether 74:da:38:ed:7f:7f  txqueuelen 1000  (Ethernet)

       RX packets 0  bytes 0 (0.0 B)

       RX errors 0  dropped 0  overruns 0  frame 0

       TX packets 0  bytes 0 (0.0 B)

       TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


Now we can use the "connman" program to connect our WiFi adapter to a WiFi access point. You will need to run the following commands:

debian@beaglebone:/var/lib/cloud9$ connmanctl

connmanctl> enable wifi

Error wifi: Already enabled

connmanctl> scan wifi

Scan completed for wifi

connmanctl> agent on

Agent registered

connmanctl> services

   octavo_guest         wifi_xxxxxxxxxxxx_xxxxxxxxxxxx_managed_psk

   ...

connmanctl> connect wifi_xxxxxxxxxxxx_xxxxxxxxxxxx_managed_psk

Agent RequestInput wifi_xxxxxxxxxxxx_xxxxxxxxxxxx_managed_psk

 Passphrase = [ Type=psk, Requirement=mandatory ]

Passphrase? xxxxxxxxxxxx

Connected wifi_xxxxxxxxxxxx_xxxxxxxxxxxx_managed_psk

connmanctl> exit


Occasionally, the WiFi adapter may not work (i.e. you will not see any services when you try to list the services) and needs to be restarted. This can be done using the ‘ifconfig’ command as well:

debian@beaglebone:/var/lib/cloud9$ sudo ifconfig wlan0 down

debian@beaglebone:/var/lib/cloud9$ sudo ifconfig wlan0 up


Once you have connected to a network, the PocketBeagle® will try to reconnect to the same network on a reboot.

Step 5: Install Software

To install the system software, we will need to run the following commands:

sudo apt-get update

sudo apt-get install git zip build-essential python-pip python-dev python-smbus


To install the python packages, we will need to run the following commands:

sudo pip install serbus


Note: You can also install "ez_setup" in case you want to install the Adafruit Python modules. However, this is not necessary given the PYTHONPATH settings in the ‘run.sh’ script.

To install the necessary Adafruit code repositories, we will need to run the following commands (Note: the ‘run.sh’ script assumes that these commands are executed in the /var/lib/cloud9 directory):

git clone https://github.com/adafruit/Adafruit_Python_PureIO

git clone https://github.com/adafruit/Adafruit_Python_GPIO

git clone https://github.com/adafruit/Adafruit_Python_BME280


The Weather Click Board uses a different I2C address setting than the default address in the Adafruit_Python_BME280 library. Therefore, we need to edit Adafruit_Python_BME280/Adafruit_BME280.py to change the I2C address of BME280 from 0x77 to 0x76:

nano Adafruit_Python_BME280/Adafruit_BME280.py

  

< ---- change line ---- >

  

# BME280 default address.

BME280_I2CADDR = 0x76


Step 6: Run in "Standalone" Mode

At this point, we can now install the health monitor code. Download ‘health_monitor.zip’ from this project and place that in the /var/lib/cloud9 directory. Unzip the file:

unzip health_monitor.zip


Then we can run the ‘run script’ that will set up all of the environment variables for the program:

./health_monitor/run.sh


The program should then run and produce output that looks like:

Initializing Temp/Humidity Sensor

Initializing Heart Rate Sensor

..........................................done.

Starting Health Monitor

| Heart Rate | Temperature (C) | Humidity (%) | Pressure (kPa) |

|------------|-----------------|--------------|----------------|

|          0 |          33.473 |        20.86 |         101.32 |

|         72 |          33.395 |        23.68 |         101.32 |

|         78 |          33.452 |        22.22 |         101.32 |

|         78 |          33.638 |        23.55 |         101.33 |

^C--- 33.80 seconds ---


To stop the program you can press "Ctrl-C".

Step 7: Install IoT Gateway Code

If we would like to use the IoT Gateway, we need to do a few more things.

First, make sure that the USB WiFi adapter is installed, and that the health monitor is connected to the IoT Gateway (See Step 4 above for instructions on how to do this). Then we need to install the IoT Gateway code attached to this project (‘sensor_gateway.zip’). The IoT Gateway code creates a command line interface to transfer data from a client sensor to an IoT Gateway.

Download ‘sensor_gateway.zip’ and drag it into the /var/lib/cloud9 directory.

Upload gw_demo.zip to cloud9 interface

Unzip the file:

unzip sensor_gateway.zip


Then we need to build the executables:

cd sensor_gateway/

make


When this is done, you should see the executable ‘msg_client’ in the /var/lib/cloud9/sensor_gateway directory.

Now, you can run the health monitor code and it will transmit the results to the IoT Gateway. If the health monitor is not connected to the IoT Gateway, then you will see:

Initializing Temp/Humidity Sensor

Initializing Heart Rate Sensor

..........................................done.

Starting Health Monitor

| Heart Rate | Temperature (C) | Humidity (%) | Pressure (kPa) |

|------------|-----------------|--------------|----------------|

|          0 |          33.473 |        20.86 |         101.32 |

unable to connect to server 192.168.0.1 on port 50000

Cannot transmit results!

|         72 |          33.395 |        23.68 |         101.32 |

Cannot transmit results!

|         78 |          33.452 |        22.22 |         101.32 |

Cannot transmit results!

|         78 |          33.638 |        23.55 |         101.33 |

^C--- 33.80 seconds ---


Please check the connection to the IoT Gateway to resolve this error.

The message format that the health monitor uses to transmit the data to the IoT Gateway is:

HR [Heart rate]bpm [Temperature]C [Pressure]kPa [Relative Humidity]%

An example of this would be:

HR 94 31.728 102.36 37.57

HR 95 32.004 102.32 41.69

HR 93 32.259 102.29 41.32


This data can be parsed, analyzed, stored, and/or displayed depening on the end application.

IoT Gatway

At this time, we have not published the project that shows the full functionality of the IoT Gateway. Please check back in the future for a link to that project.

Extending the Project

Currently, the IoT Gateway message client is hard coded to use a "msg_id" of 10 and a "src_id" of 200. By modifying the message client code to take both "msg_id" and "src_id" as command line input, it would be easy to pass that information in as part of the health monitor Python code. This could then be further extended so that the health monitor itself took in an ID that would allow the IoT Gateway and cloud infrastructure to support multiple health monitors.

Conclusion

This project shows how easy it is to prototype IoT measurement systems
such as health monitors
by using low cost and easy to use open hardware, such as PocketBeagle® featuring the OSD335x System in Package along with Click Boards, as well as the associated open software resources. We hope you build your own health monitor and enhance the project.

Comments are not currently available for this post.