Prepared chart example

This commit is contained in:
Ollo 2021-12-15 21:20:27 +01:00
parent 32e868b176
commit c26ee6342c
4 changed files with 35 additions and 5 deletions

View File

@ -54,7 +54,15 @@ The following pins are used:
* BMP280 sensor * BMP280 sensor
* some wire * some wire
# Webserver
This version has a webserver activated, if MQTT server is set to **localhost**.
Every 20 seconds a measurement is performed.
This is shown in a diagram via chart.js
# Sources # Sources
For the Witty board For the Witty board
* [https://github.com/amkuipers/witty Witty pinout] * [https://github.com/amkuipers/witty Witty pinout]
* [https://arduino.ua/products_pictures/large_AOC361-5.jpg Schematics] * [https://arduino.ua/products_pictures/large_AOC361-5.jpg Schematics]
* [https://www.chartjs.org/docs/latest/getting-started/integration.html]

BIN
data/chart.min.js.gz Normal file

Binary file not shown.

View File

@ -14,6 +14,7 @@
background-color: #b8b8b8; color: black; background-color: #b8b8b8; color: black;
} }
</style> </style>
<script src="chart.min.js.gz"></script>
<script type="text/javascript"> <script type="text/javascript">
function mySensorTimer(){ function mySensorTimer(){
const xhttp = new XMLHttpRequest(); const xhttp = new XMLHttpRequest();

View File

@ -84,10 +84,27 @@
#define MQTT_DUMMYHOST "localhost" #define MQTT_DUMMYHOST "localhost"
#define NODE_BUTTON "button" #define NODE_BUTTON "button"
#define PORTNUMBER_HTTP 80 /**< IANA TCP/IP port number, used for HTTP / web traffic */
#define SERIAL_RCEVBUF_MAX 80 /**< Maximum 80 characters can be received from the PM1006 sensor */
#define MEASURE_POINT_MAX 1024 /**< Amount of measure point, that can be stored */
/****************************************************************************** /******************************************************************************
* TYPE DEFS * TYPE DEFS
******************************************************************************/ ******************************************************************************/
typedef struct {
long timestamp;
float temp;
#ifdef BME680
uint32_t gas_resistance;
float humidity;
#endif
float pressure;
int pm25;
} sensor_point;
/****************************************************************************** /******************************************************************************
* FUNCTION PROTOTYPES * FUNCTION PROTOTYPES
******************************************************************************/ ******************************************************************************/
@ -146,7 +163,7 @@ Adafruit_BMP280 bmx; // connected via I2C
Adafruit_NeoPixel strip(PIXEL_COUNT, GPIO_WS2812, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel strip(PIXEL_COUNT, GPIO_WS2812, NEO_GRB + NEO_KHZ800);
// Variablen // Variablen
uint8_t serialRxBuf[80]; uint8_t serialRxBuf[SERIAL_RCEVBUF_MAX];
uint8_t rxBufIdx = 0; uint8_t rxBufIdx = 0;
int mParticle_pM25 = 0; int mParticle_pM25 = 0;
int last = 0; int last = 0;
@ -154,6 +171,9 @@ unsigned int mButtonPressed = 0;
bool mSomethingReceived = false; bool mSomethingReceived = false;
bool mConnectedNonMQTT = false; bool mConnectedNonMQTT = false;
sensor_point mMeasureSeries[MEASURE_POINT_MAX];
uint32_t mMeasureIndex = 0;
/****************************************************************************** /******************************************************************************
* LOCAL FUNCTIONS * LOCAL FUNCTIONS
*****************************************************************************/ *****************************************************************************/
@ -299,7 +319,7 @@ void bmpPublishValues() {
/** /**
* @brief Generate JSON with last measured values * @brief Generate JSON with last measured values
* For the update intervall, please check @see PM1006_MQTT_UPDATE * For the update interval, please check @see PM1006_MQTT_UPDATE
* @return String with JSON * @return String with JSON
*/ */
String sensorAsJSON(void) { String sensorAsJSON(void) {
@ -433,7 +453,8 @@ void setup()
rgbDim.setDefaultValue(100).setValidator([] (long candidate) { rgbDim.setDefaultValue(100).setValidator([] (long candidate) {
return (candidate > 1) && (candidate <= 200); return (candidate > 1) && (candidate <= 200);
}); });
memset(serialRxBuf, 0, 80); memset(serialRxBuf, 0, SERIAL_RCEVBUF_MAX);
memset(mMeasureSeries, 0, sizeof(sensor_point) * MEASURE_POINT_MAX);
pmSerial.begin(PM1006_BIT_RATE); pmSerial.begin(PM1006_BIT_RATE);
Homie.setup(); Homie.setup();
@ -509,7 +530,7 @@ void setup()
for (int i=0;i < (PIXEL_COUNT / 2); i++) { for (int i=0;i < (PIXEL_COUNT / 2); i++) {
strip.setPixelColor(0, strip.Color(0,128,0)); strip.setPixelColor(0, strip.Color(0,128,0));
} }
mHttp = new AsyncWebServer(80); mHttp = new AsyncWebServer(PORTNUMBER_HTTP);
mHttp->on("/heap", HTTP_GET, [](AsyncWebServerRequest *request){ mHttp->on("/heap", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(200, "text/plain", String(ESP.getFreeHeap())); request->send(200, "text/plain", String(ESP.getFreeHeap()));
}); });
@ -533,7 +554,7 @@ void loop()
if (!mConnectedNonMQTT) { if (!mConnectedNonMQTT) {
Homie.loop(); Homie.loop();
} else { } else {
/* call the custom loop direclty, as Homie is deactivated */ /* call the custom loop directly, as Homie is deactivated */
loopHandler(); loopHandler();
} }
/* use the pin, receiving the soft serial additionally as button */ /* use the pin, receiving the soft serial additionally as button */