|windowHandler | Temperature 66.537498F | spare_and_working|4/4/23 at 10:10:34 am|
|windowHandler | Open Windows|spare_and_working | 4/4/23 at 10:10:34 am|
But my subscriber doesn’t appear to be working. Here is my Subscribe program.
Any ideas? I am new to this.
int relay1 = D5; // set pin for relay1
int relay2 = D6; // set pin for relay2
void setup() {
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
}
// Function to handle the particle event
void windowHandler(const char *event, const char *data) {
Serial.print("Received event: ");
Serial.println(event);
Serial.print("Received data: ");
Serial.println(data);
If the event is "Open Window", set D5 and D6 to HIGH
if (strcmp(data, "Open Windows") == 0) {
Serial.println("Opening windows");
digitalWrite(relay1, HIGH);
digitalWrite(relay2, HIGH);
}
// If the event is "Close Window", set D5 and D6 to LOW
else if (strcmp(data, "Close Windows") == 0) {
Serial.println("Closing windows");
digitalWrite(relay1, LOW);
digitalWrite(relay2, LOW);
}
}
Thank you Colleen,
After looking a the documents you mentioned,
I made some changes, and here are the resulting programs.
–Publish–
// This #include statement was automatically added by the Particle IDE.
#include "lib1.h"
// This #include statement was automatically added by the Particle IDE.
#include <spark-dallas-temperature.h>
#include <OneWire.h>
//#include <DallasTemperature.h>
// Data wire is plugged into pin D7 on Particle Photon
#define ONE_WIRE_BUS D6
// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature sensor
DallasTemperature sensors(&oneWire);
void setup() {
// handleOpenWindows
// Start serial communication
Serial.begin(9600);
// Initialize the DS18B20 sensor
sensors.begin();
}
void loop() {
// Request temperature readings from the DS18B20 sensor
sensors.requestTemperatures();
// Get the temperature value in Fahrenheit
float temperature = sensors.getTempFByIndex(0);
if (temperature > 74) {
// Close window code here
Particle.publish("handleCloseWindows", "Close Windows", PRIVATE);
} else if (temperature >= 57 && temperature <= 67){ //62
// Open window code here
Particle.publish("handleOpenWindows", "Open Windows", PRIVATE);
}
{
Particle.publish("windowHandler", "Temperature " + String(temperature) + "F", PRIVATE);
}
{
// Wait for a few seconds before requesting another reading
delay(60000); //900,000 = 15 munites/ 1,200,000 = 20 minutes
}
}
This is what it’s putting out:
windowHandlerTemperature 58.549999Fspare_and_working4/4/23 at 5:08:40 pmhandleOpenWindowsOpen Windowsspare_and_working4/4/23 at 5:08:40 pmwindowHandlerTemperature 58.325001Fspare_and_working4/4/23 at 5:07:39 pmhandleOpenWindowsOpen Windowsspare_and_working4/4/23 at 5:07:39 pm
Here is the Subscribe Program:
–Subscribe–
int relay1 = D5; // set pin for relay1
int relay2 = D6; // set pin for relay2
void setup() {
Particle.subscribe("Open Windows", handleOpenWindows);
Particle.subscribe("Close Windows", handleCloseWindows);
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
}
void loop() {
// your main loop code here, if any
}
void handleOpenWindows(const char *event, const char *data) {
digitalWrite(relay1, HIGH);
digitalWrite(relay2, HIGH);
}
void handleCloseWindows(const char *event, const char *data) {
digitalWrite(relay1, LOW);
digitalWrite(relay2, LOW);
}
What did I do wrong? As a nube, it looks correct to me. Any help is greatly appreciated.
Since you don't use the payload (Open Windows | Close Windows) in your event handlers anyhow, you can also omit it in the publish statement.
As for coding style, proper indentation would help readability - particularly with more elaborate projects.
There is also little benefit in using anonymous code blocks like here
BTW, there is no PUBLIC / PRIVATE distinction for events anymore, so you can just omit the last parameter.