Particle.publish stops sending events (sensor data) after a few loops

I’m trying to get a Particle Xenon to publish temp sensor data to the cloud console as events, but after a few iterations it just stops sending data.

Thanks in advance for the help!

My code:

#include <OneWire.h>

int DS18S20_Pin = 0; //DS18S20 Signal pin on digital 2

//Temperature chip i/o
OneWire ds(DS18S20_Pin);  // on digital pin 2

  void selectExternalMeshAntenna() 

        digitalWrite(ANTSW1, 1);
        digitalWrite(ANTSW2, 0);
       digitalWrite(ANTSW1, 0);
        digitalWrite(ANTSW1, 0);
        digitalWrite(ANTSW2, 1);

void setup() {

void loop() {
  float temp = getTemp();
  Particle.publish("temperature", String::format("%.2f",temp), PRIVATE, NO_ACK);
  //Mesh.publish(String::format("%.2f",temp), "temp");
  delay(100); //just here to slow down the output so it is easier to read


float getTemp(){
  //returns the temperature from one DS18S20 in DEG Celsius

  byte data[12];
  byte addr[8];

  if ( ! {
      //no more sensors on chain, reset search
      return -1000;

  if ( OneWire::crc8( addr, 7) != addr[7]) {
      Serial.println("CRC is not valid!");
      return -1000;

  if ( addr[0] != 0x10 && addr[0] != 0x28) {
      Serial.print("Device is not recognized");
      return -1000;

  ds.write(0x44,1); // start conversion, with parasite power on at the end

  byte present = ds.reset();;
  ds.write(0xBE); // Read Scratchpad

  for (int i = 0; i < 9; i++) { // we need 9 bytes
    data[i] =;


  byte MSB = data[1];
  byte LSB = data[0];

  float tempRead = ((MSB << 8) | LSB); //using two's compliment
  float TemperatureSum = tempRead / 16;

  return TemperatureSum;

Log readouts:

Bro, your code is calling a Particle Publish 10 times a second :slight_smile:

Your limited to a short burst of like 5 or 10 per second and then 1 publish per second maximum.

If you Publish to often Particle will throttle your messages and they will not come through like your experiencing.

Increase your delay to something that makes more sense like every 60 seconds, or 5 mins, or 30 mins since it’s just temp that usually does not change that fast if your talking about room temperature.

The burst limit is 4 with a cooldown to keep the average at or below 1 per second.

@Alex, consulting the docs first might be a good habit to develop


1 Like

@RWB @ScruffR Thanks for the friendly reminder, fixed, forgot these were in milliseconds!

1 Like