First program on xenon


This is my first application to write in the particle world…except for the blink apps. I have the MS5803 pressure sensor connected to the xenon on the featherwing. I connected the pressure sensor’s I2C sda wire to pin 17 of the spare place on the featherwing, and scl to pin 18. 3.3 volts (pin 2) and ground to pin 4 for the I2c interface.

I know there are problems with this code. It is written for an arduino, which has a serial monitor. I don’t think I have a serial monitor in the particle environment, so I don’t know how to see the output from the pressure sensor.

It seems that there should be three ways to see the data: Using the cell phone app, through the ethernet cable or possibly that little header on the board, for development. Could someone clue me in on how I should read the data from the sensor?

When I get the boron I will have to explore that step too, but this is my first step. Code below:

#include <Wire.h>
#include <MS5803_I2C.h>

// Begin class with selected address
// available addresses (selected by jumper on board) 
// default is ADDRESS_HIGH

//  ADDRESS_HIGH = 0x76
//  ADDRESS_LOW  = 0x77

MS5803 sensor(ADDRESS_LOW);

//Create variables to store results
float temperature_c, temperature_f;
double pressure_abs, pressure_relative, altitude_delta, pressure_baseline;

// Create Variable to store altitude in (m) for calculations;
double base_altitude = 1655.0; // Altitude of SparkFun's HQ in Boulder, CO. in (m)

void setup() {
    //Retrieve calibration constants for conversion math.
    pressure_baseline = sensor.getPressure(ADC_4096);

void loop() {
  // To measure to higher degrees of precision use the following sensor settings:
  // ADC_256 
  // ADC_512 
  // ADC_1024
  // ADC_2048
  // ADC_4096
  // Read temperature from the sensor in deg C. This operation takes about 
  temperature_c = sensor.getTemperature(CELSIUS, ADC_512);
  // Read temperature from the sensor in deg F. Converting
  // to Fahrenheit is not internal to the sensor.
  // Additional math is done to convert a Celsius reading.
  temperature_f = sensor.getTemperature(FAHRENHEIT, ADC_512);
  // Read pressure from the sensor in mbar.
  pressure_abs = sensor.getPressure(ADC_4096);
  // Let's do something interesting with our data.
  // Convert abs pressure with the help of altitude into relative pressure
  // This is used in Weather stations.
  pressure_relative = sealevel(pressure_abs, base_altitude);
  // Taking our baseline pressure at the beginning we can find an approximate
  // change in altitude based on the differences in pressure.   
  altitude_delta = altitude(pressure_abs , pressure_baseline);
  // Report values via UART
  Serial.print("Temperature C = ");
  Serial.print("Temperature F = ");
  Serial.print("Pressure abs (mbar)= ");
  Serial.print("Pressure relative (mbar)= ");
  Serial.print("Altitude change (m) = ");


// Thanks to Mike Grusin for letting me borrow the functions below from 
// the BMP180 example code. 

 double sealevel(double P, double A)
// Given a pressure P (mbar) taken at a specific altitude (meters),
// return the equivalent pressure (mbar) at sea level.
// This produces pressure readings that can be used for weather measurements.

double altitude(double P, double P0)
// Given a pressure measurement P (mbar) and the pressure at a baseline P0 (mbar),
// return altitude (meters) above baseline.


The first method you should use is debug serial. The USB connector on the Xenon will present as a serial port to your computer, which you can read using the Particle CLI, a program like CoolTerm or Putty on Windows, or screen on Mac and Linux.

Those Serial.print commands in the code are printing there.

More information about the USB serial:

After you get that working you can advance to the other techniques.