DS1820 DS18B20 ESP01 Webserver STM32NucleoL152RE basiert auf dem DS1820-Example von Paul Staron
Dependencies: LCD_i2c_GSOE ESP8266WebserverGSOE DS1820
main.cpp
- Committer:
- jack1930
- Date:
- 2021-08-07
- Revision:
- 3:33bd03e2244f
- Parent:
- 2:2c947079aae0
File content as of revision 3:33bd03e2244f:
//basiert auf dem DS1820-Example von Paul Staron
#include "mbed.h"
#include "DS1820.h"
#include "LCD.h"
#include "ESP8266Webserver.h"
DigitalOut led(LED1);
lcd myLCD;
#define DATA_PIN PB_0
#define MAX_PROBES 16
DS1820* probe[MAX_PROBES];
ESP8266Webserver myWebserver;
Timer t;
int DS;
float Temp[16];
string getRootPage()
{
string webpage;
webpage="<!DOCTYPE html>";
//HTML
webpage+="<html>";
webpage+="<head>";
webpage+="<title>STM32 HTTP</title>";
webpage+="</head>";
webpage+="<body>";
webpage+="<h1>WIFI mit STM32 ESP01</h1>\n";
webpage+="<p>Temperatur= "+to_string(Temp[0])+"C</p>\n";
webpage+="</body>";
webpage+="</html>";
return webpage;
}
void testfunc()
{
myWebserver.send(200,"text/html",getRootPage());
}
int main(){
myWebserver.on("/",&testfunc);
myWebserver.begin();
myLCD.clear();
myLCD.cursorpos(0);
myLCD.printf("%s",myWebserver.gibIP());
printf("\033[0m\033[2J\033[HInitialise...!\n\n");
while (DS1820::unassignedProbe(DATA_PIN)) {
probe[DS] = new DS1820(DATA_PIN);
DS++;
if (DS == MAX_PROBES) {
break;
}
}
if (!DS) {
printf("No Sensors found!\n\n");
ThisThread::sleep_for(chrono::milliseconds(1000));
NVIC_SystemReset();
}
// set each probe resolution, default is 12bit (750ms)
probe[0]->setResolution(9);
// probe[0]->setResolution(10);
// probe[0]->setResolution(11);
// probe[0]->setResolution(12);
// probe[1]->setResolution(9);
// probe[2]->setResolution(10);
t.start();
while(1) {
myWebserver.handleClient();
printf("\033[0m\033[2J\033[HDS Sensor data..\n\n");
int DS_error = 0;
for (int i = 0; i < DS; i++) {
Temp[i] = probe[i]->temperature();
if(Temp[i]==-1000) {
Temp[i] = probe[i]->temperature(); // get read temp again if error
DS_error++;
}
printf("Probe %d: %3.2f %cc\r\n",i,Temp[i],0xb0);
myLCD.cursorpos(0x40);
myLCD.printf("%3.1f ",Temp[0]);
}
printf("\nDS errors: %d\n\n", DS_error);
printf("Start conversion\n");
t.reset();
// don't wait for conversion, but do something that takes at least 750ms before reading the sensors
//if(DS>0){probe[0]->convertTemperature(0, DS1820::all_devices);}
// wait for conversion, can take up to 750ms(12 bit mode)
if(DS>0){probe[0]->convertTemperature(1, DS1820::all_devices);}
printf("\nConvert process time: %0.6f Seconds\n", chrono::duration<float>(t.elapsed_time()).count());
ThisThread::sleep_for(chrono::milliseconds(1000));
}
}