Javascript from HTML causes Photon to SOS


#1

Hi gentlemen

I am having some issues with my sketch, probably because of my beginner entry level. I am learning html/css/javascript and C from scratch. so let me explain:

I built on @bko’s tutorial trying to output the value of a temperature sensor on an html page. The temperature value updates every 5 seconds, as per the above tutorial.
Here is my code. I am using a DS18B20 Digital temperature sensor.


Photon Code

    // This #include statement was automatically added by the Particle IDE.
    #include "OneWire/OneWire.h"
    
    // This #include statement was automatically added by the Particle IDE.
    #include "spark-dallas-temperature/spark-dallas-temperature.h"
    
    // Data wire is plugged into pin 2 on the Arduino
    #define ONE_WIRE_BUS 2
     
    // Setup a oneWire instance to communicate with any OneWire devices 
    // (not just Maxim/Dallas temperature ICs)
    // Init Dallas on pin digital pin 3
    DallasTemperature dallas(new OneWire(D3));
    void setup(){
    dallas.begin();
    }
    
    void loop(){
        dallas.requestTemperatures();
        float celsius = dallas.getTempCByIndex( 0 );
        Particle.variable ("temperature", String(celsius));
        Particle.publish ("room temperature", String(celsius));
        delay(5000); }   

HTML/Javascript

Now, on the html side, here is the crucial part:

    <!-- Javascript for first module
      –––––––––––––––––––––––––––––––––––––––––––––––––– -->
    <script type="text/javascript">
    
         window.setInterval(function() {
    
            var deviceID = "20001c001347353236343033";
            var accessToken = "accessTokenHere";
            var varName1 = "temperature";
    
            requestURL = "https://api.particle.io/v1/devices/" + deviceID + "/" + varName1 + "/?access_token=" + accessToken;
            $.getJSON(requestURL, function(json) {
                     document.getElementById("data3").innerHTML = json.result + "C";
                     });
                 }, 5000);
        </script>
    <!-- End Document

The problem

When I run the html on my page the photon blinks in SOS and restarts. I get readings in the HTML, in the form of a float. When I close the tab from my browser with the html page, the Photon returns to a steady behaviour of publishing the data every 5 secs.

I believe the problem is at the photon code. It’s actually my first one.
I am also publishing the temperature in order to check the values at the dashboard.

I would appreciate any input.

Thanks!
John


#2

This won’t work.
You need to put this instruction into setup() and use a global variable to expose.

double celsius;
void setup()
{
  ...
  Particle.variable ("temperature", celsius);
}

void loop()
{
  dallas.requestTemperatures();
  celsius = dallas.getTempCByIndex( 0 );
  ...
}

#3

@ScruffR thank you for your reply.

I have revised the code based on your suggestion. Unfortunately it still doesn’t work. As soon as I open the html in my browser the Photon blinks in SOS and restarts.

Here is the new code:

DallasTemperature dallas(new OneWire(D3));
double celsius;

void setup(){
    dallas.begin();
    Particle.variable ("temperature", celsius);
}

void loop(){
    dallas.requestTemperatures();
    celsius = dallas.getTempCByIndex( 0 );
    Particle.publish ("room temperature", String(celsius));
    delay(5000);
}

The device gets restarted every a number of seconds. Here is a screenshot from the dashboard.

I have no idea. Any input is welcome!

Cheers
John


#4

How does your device react to a variable request via one of these pages
http://jordymoors.nl/interface/
http://suda.github.io/particle-web-interface/


#5

@ScruffR Thanks, using the interfaces above does not make the Photon to go into SOS mode. But I do not get any values for the variable.

Clicking the update button does not give any results either. Only removes the questionmark from the field :confused:

Thanks


#6

And the other page?

Mark the variable type in your screenshot.
This would suggest your device is not running the code you posted above.
You should get a double not a string due to double celcius; and Particle.variable ("temperature", celsius);.


#7

@ScruffR ok, I get a value but the variable remains a string.


Regarding the other site, it shows a value as well:

The events published by the Photon look ok as well. Here they are if they make sense to you.

Many thanks
John


#8

@ScruffR I am looking at the photon code again. I commented out this line

Particle.publish ("room temperature", String(celsius));

And it seems that my html/javascript in not breaking the photon.

So, what might be wrong with this line? Is it the variable?

Update:

Ok i think i am getting somewhere. I included the publish command but used different name. Here is what i did.


DallasTemperature dallas(new OneWire(D3));
double celsius;
double celsiusValue;

void setup(){
    dallas.begin();
    Particle.variable ("temperature", celsius);
}

void loop(){
    dallas.requestTemperatures();
    celsius = dallas.getTempCByIndex( 0 );
    celsiusValue = celsius;                               // I am not sure if this is a good practice
    Particle.publish ("room temperature", String(celsiusValue));    // Instead of celsius, now i am calling celciusValue
    delay(5000);
}

And now, after flashing the sketch I am actually getting DOUBLE values like 26.75 instead of long floats as before. However -weirdly- after a while I start to get values like 26.6525 again, including my html interface as well.

Good thing is that Photon does not go in SOS mode anymore.

I am not sure though if this is a proper solution indeed. Is this valid to behave this way?

Many thanks!
John


#9

I’d say this is not expected and the code before should have worked as well.
How is it when you revert back to celsius?