-
Notifications
You must be signed in to change notification settings - Fork 81
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #20 from joelkoz/update-examples
Update examples
- Loading branch information
Showing
3 changed files
with
148 additions
and
31 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,26 +1,61 @@ | ||
#include <Arduino.h> | ||
|
||
#include "sensesp_app.h" | ||
#include "wiring_helpers.h" | ||
#include "devices/analog_input.h" | ||
#include "transforms/linear.h" | ||
|
||
// SensESP builds upon the ReactESP framework. Every ReactESP application | ||
// defines an "app" object vs defining a "main()" method. | ||
ReactESP app([] () { | ||
|
||
// Some initialization boilerplate when in debug mode... | ||
#ifndef SERIAL_DEBUG_DISABLED | ||
Serial.begin(115200); | ||
|
||
// A small arbitrary delay is required to let the | ||
// serial port catch up | ||
|
||
delay(100); | ||
Debug.setSerialEnabled(true); | ||
#endif | ||
|
||
|
||
// Create the global SensESPApp() object. | ||
sensesp_app = new SensESPApp(); | ||
|
||
setup_analog_input( | ||
sensesp_app, | ||
"sensors.indoor.illumination", | ||
1, 0, | ||
"/sensors/indoor_illumination"); | ||
|
||
// The "SignalK path" identifies this sensor to the SignalK network. Leaving | ||
// this blank would indicate this particular sensor (or transform) does not | ||
// broadcast SignalK data | ||
const char* sk_path = "sensors.indoor.illumination"; | ||
|
||
|
||
// The "Configuration path" is combined with "/config" to formulate a URL | ||
// used by the RESTful API for retrieving or setting configuration data. | ||
// It is ALSO used to specify a path to the SPIFFS file system | ||
// where configuration data is saved on the MCU board. It should | ||
// ALWAYS start with a forward slash if specified. If left blank, | ||
// that indicates this sensor or transform does not have any | ||
// configuration to save. | ||
// Note that if you want to be able to change the sk_path at runtime, | ||
// you will need to specify a config_path. | ||
const char* config_path = "/sensors/indoor_illumination"; | ||
|
||
|
||
// Create a "device" that is the source of our data | ||
auto* pAnalogInput = new AnalogInput(); | ||
|
||
|
||
// Create a "transform" that can modify the data and/or broadcast it | ||
// over the SignalK network. | ||
const float multiplier = 1.0; | ||
const float offset = 0.0; | ||
auto* pTransform = new Linear(sk_path, multiplier, offset, config_path); | ||
|
||
|
||
// Wire up the output of the analog input to the transform | ||
pAnalogInput->connectTo(pTransform); | ||
|
||
|
||
// Start the SensESP application running | ||
sensesp_app->enable(); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
#include <Arduino.h> | ||
|
||
#include "sensesp_app.h" | ||
#include "transforms/linear.h" | ||
#include "devices/analog_input.h" | ||
|
||
#include "transforms/analogvoltage.h" | ||
#include "transforms/voltagedividerR2.h" | ||
#include "transforms/temperatureinterpreter.h" | ||
|
||
// SensESP builds upon the ReactESP framework. Every ReactESP application | ||
// defines an "app" object vs defining a "main()" method. | ||
ReactESP app([] () { | ||
|
||
// Some initialization boilerplate when in debug mode... | ||
#ifndef SERIAL_DEBUG_DISABLED | ||
Serial.begin(115200); | ||
|
||
// A small arbitrary delay is required to let the | ||
// serial port catch up | ||
|
||
delay(1000); | ||
Debug.setSerialEnabled(true); | ||
#endif | ||
|
||
// Create the global SensESPApp() object. | ||
sensesp_app = new SensESPApp(); | ||
|
||
|
||
// The "SignalK path" identifies this sensor to the SignalK network. Leaving | ||
// this blank would indicate this particular sensor (or transform) does not | ||
// broadcast SignalK data | ||
const char* sk_path = "electrical.generator.engine.water.temp"; | ||
|
||
|
||
// A blank sk path means you do not want any SignalK generated from that | ||
// particular transform... | ||
const char* no_sk_wanted = ""; | ||
|
||
|
||
// Connecting a "sender" to the MCU involves using a "voltage divider" circuit. A resistor (R1) is connected | ||
// to the voltage output of the board (3.3v or 5v, specified in Vin) to an intersection of two wires. One | ||
// wire connects to the AnalogInput pin of the MCU, and the other wire connects to the sending | ||
// unit doing the measurement. The sender is itself a variable resistor that is then connected to ground, forming | ||
// the "R2" of a voltage divider circuit. The transform "VoltageDividerR2" can take a known | ||
// voltage in, resistance R1, and based on the current voltage read from AnalogInput, compute | ||
// the current resistance of the sender (R2). | ||
const float Vin = 3.3; // Voltage sent into the voltage divider circuit that includes the analog sender | ||
const float R1 = 51.0; // The resistance, in ohms, of the R1 resitor in the analog sender divider circuit | ||
|
||
auto* pAnalogInput = new AnalogInput(); | ||
|
||
// Translating the number returned by AnalogInput into a temperature requires several transformations. | ||
// Wire them up in sequence... | ||
pAnalogInput->connectTo(new AnalogVoltage()) -> | ||
connectTo(new VoltageDividerR2(R1, Vin, no_sk_wanted, "/gen/temp/sender")) -> | ||
connectTo(new TemperatureInterpreter(no_sk_wanted, "/gen/temp/curve")) -> | ||
connectTo(new Linear(sk_path, 1.0, 0.0, "/gen/temp/adjust")); | ||
|
||
|
||
// Start the SensESP application running | ||
sensesp_app->enable(); | ||
|
||
}); |