Jack Hansdampf / Mbed OS DS1820mitWebserver

Dependencies:   LCD_i2c_GSOE ESP8266WebserverGSOE DS1820

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 //basiert auf dem DS1820-Example von Paul Staron
00002 
00003 #include "mbed.h"
00004 #include "DS1820.h"
00005 #include "LCD.h"
00006 #include "ESP8266Webserver.h"
00007 
00008 
00009 DigitalOut led(LED1);
00010 lcd myLCD;
00011 
00012 #define DATA_PIN        PB_0
00013 #define MAX_PROBES      16
00014 DS1820* probe[MAX_PROBES];
00015 
00016 ESP8266Webserver myWebserver;
00017 
00018 Timer t;
00019 
00020 int     DS;
00021 float   Temp[16]; 
00022 
00023 string getRootPage()
00024 {
00025       string webpage;
00026       webpage="<!DOCTYPE html>";
00027       //HTML
00028       webpage+="<html>";
00029       webpage+="<head>";
00030       webpage+="<title>STM32 HTTP</title>";
00031       webpage+="</head>";
00032       webpage+="<body>";
00033       webpage+="<h1>WIFI mit STM32 ESP01</h1>\n";
00034       webpage+="<p>Temperatur= "+to_string(Temp[0])+"C</p>\n"; 
00035       webpage+="</body>";
00036       webpage+="</html>";
00037       return webpage;
00038 }
00039     
00040 void testfunc()
00041 {
00042     myWebserver.send(200,"text/html",getRootPage());
00043 }
00044 
00045 int main(){
00046     myWebserver.on("/",&testfunc);
00047     myWebserver.begin();    
00048     myLCD.clear();
00049     myLCD.cursorpos(0);
00050     myLCD.printf("%s",myWebserver.gibIP());
00051     
00052     printf("\033[0m\033[2J\033[HInitialise...!\n\n");
00053 
00054     while (DS1820::unassignedProbe(DATA_PIN)) {
00055         probe[DS] = new DS1820(DATA_PIN);
00056         DS++;
00057         if (DS == MAX_PROBES) {
00058             break;
00059         }
00060     }
00061     
00062     if (!DS) {        
00063         printf("No Sensors found!\n\n");
00064         ThisThread::sleep_for(chrono::milliseconds(1000));
00065         NVIC_SystemReset();
00066     }
00067 
00068     // set each probe resolution, default is 12bit (750ms)
00069     probe[0]->setResolution(9);
00070 //    probe[0]->setResolution(10);
00071 //    probe[0]->setResolution(11);
00072 //    probe[0]->setResolution(12);
00073 //    probe[1]->setResolution(9);
00074 //    probe[2]->setResolution(10);
00075 
00076     t.start();
00077 
00078     while(1) {
00079         myWebserver.handleClient();
00080         printf("\033[0m\033[2J\033[HDS Sensor data..\n\n");
00081 
00082         int DS_error = 0;
00083         for (int i = 0; i < DS; i++) {
00084             Temp[i] = probe[i]->temperature();
00085             if(Temp[i]==-1000) {
00086                 Temp[i] = probe[i]->temperature();  // get read temp again if error
00087                 DS_error++;
00088             }
00089             printf("Probe %d:  %3.2f %cc\r\n",i,Temp[i],0xb0);
00090             
00091             myLCD.cursorpos(0x40);
00092             myLCD.printf("%3.1f    ",Temp[0]);
00093         }
00094         printf("\nDS errors:  %d\n\n", DS_error);
00095 
00096         printf("Start conversion\n");
00097         t.reset();
00098         // don't wait for conversion, but do something that takes at least 750ms before reading the sensors
00099         //if(DS>0){probe[0]->convertTemperature(0, DS1820::all_devices);}
00100         
00101         // wait for conversion, can take up to 750ms(12 bit mode)
00102         if(DS>0){probe[0]->convertTemperature(1, DS1820::all_devices);}        
00103         
00104         printf("\nConvert process time: %0.6f Seconds\n", chrono::duration<float>(t.elapsed_time()).count());
00105 
00106         ThisThread::sleep_for(chrono::milliseconds(1000));
00107     }
00108 }