Dependencies:   LCD_i2c_GSOE ESP8266MQTT

Committer:
jack1930
Date:
Tue Aug 10 15:10:47 2021 +0000
Revision:
6:151a46f6c3a4
Parent:
5:c9ad1d365f86
Child:
7:d6edeec51e62
Neu DHT11

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JENG 0:8fe7d36af056 1
JENG 0:8fe7d36af056 2 #include "mbed.h"
jack1930 6:151a46f6c3a4 3 #include "PubSubClient.h" //MQTT- Bibliothek
jack1930 1:e6f838f99eeb 4 #include "LCD.h"
JENG 0:8fe7d36af056 5
JENG 0:8fe7d36af056 6
JENG 0:8fe7d36af056 7
JENG 0:8fe7d36af056 8 #define DHTLIB_OK 0
JENG 0:8fe7d36af056 9 #define DHTLIB_ERROR_CHECKSUM -1
JENG 0:8fe7d36af056 10 #define DHTLIB_ERROR_TIMEOUT -2
JENG 0:8fe7d36af056 11
JENG 0:8fe7d36af056 12 Timer tmr;
jack1930 1:e6f838f99eeb 13 lcd mylcd;
JENG 0:8fe7d36af056 14
jack1930 6:151a46f6c3a4 15
jack1930 6:151a46f6c3a4 16 PubSubClient client; //Deklaration des MQTT-Clients
mueller1930 5:c9ad1d365f86 17 DigitalInOut data_pin(PB_0); //Anschluss S (Data)
jack1930 2:85f2573de3e4 18 //Anschluss - an GND
jack1930 2:85f2573de3e4 19 //mittlerer Anschluss an 3,3V
JENG 0:8fe7d36af056 20
JENG 0:8fe7d36af056 21 int humidity;
JENG 0:8fe7d36af056 22 int temperature;
JENG 0:8fe7d36af056 23
JENG 0:8fe7d36af056 24 //########################################
JENG 0:8fe7d36af056 25 // DHT11 Library
JENG 0:8fe7d36af056 26 //########################################
JENG 0:8fe7d36af056 27 int dht_read(void){
JENG 0:8fe7d36af056 28
JENG 0:8fe7d36af056 29 // BUFFER TO RECEIVE
JENG 0:8fe7d36af056 30 uint8_t bits[5];
JENG 0:8fe7d36af056 31 uint8_t cnt = 7;
JENG 0:8fe7d36af056 32 uint8_t idx = 0;
JENG 0:8fe7d36af056 33
JENG 0:8fe7d36af056 34 tmr.stop();
JENG 0:8fe7d36af056 35 tmr.reset();
JENG 0:8fe7d36af056 36
JENG 0:8fe7d36af056 37 // EMPTY BUFFER
JENG 0:8fe7d36af056 38 for(int i=0; i< 5; i++) bits[i] = 0;
JENG 0:8fe7d36af056 39
JENG 0:8fe7d36af056 40 // REQUEST SAMPLE
JENG 0:8fe7d36af056 41 data_pin.output();
JENG 0:8fe7d36af056 42 data_pin.write(0);
jack1930 1:e6f838f99eeb 43 wait_us(18000);
JENG 0:8fe7d36af056 44 data_pin.write(1);
JENG 0:8fe7d36af056 45 wait_us(40);
JENG 0:8fe7d36af056 46 data_pin.input();
JENG 0:8fe7d36af056 47
JENG 0:8fe7d36af056 48 // ACKNOWLEDGE or TIMEOUT
jack1930 1:e6f838f99eeb 49 unsigned int loopCnt = 20000;
JENG 0:8fe7d36af056 50
JENG 0:8fe7d36af056 51 while(!data_pin.read())if(!loopCnt--)return DHTLIB_ERROR_TIMEOUT;
JENG 0:8fe7d36af056 52
jack1930 1:e6f838f99eeb 53 loopCnt = 20000;
JENG 0:8fe7d36af056 54
JENG 0:8fe7d36af056 55 while(data_pin.read())if(!loopCnt--)return DHTLIB_ERROR_TIMEOUT;
JENG 0:8fe7d36af056 56
JENG 0:8fe7d36af056 57 // READ OUTPUT - 40 BITS => 5 BYTES or TIMEOUT
JENG 0:8fe7d36af056 58 for(int i=0; i<40; i++){
JENG 0:8fe7d36af056 59
jack1930 1:e6f838f99eeb 60 loopCnt = 20000;
JENG 0:8fe7d36af056 61
JENG 0:8fe7d36af056 62 while(!data_pin.read())if(loopCnt-- == 0)return DHTLIB_ERROR_TIMEOUT;
JENG 0:8fe7d36af056 63
JENG 0:8fe7d36af056 64 //unsigned long t = micros();
JENG 0:8fe7d36af056 65 tmr.start();
JENG 0:8fe7d36af056 66
jack1930 1:e6f838f99eeb 67 loopCnt = 20000;
JENG 0:8fe7d36af056 68
JENG 0:8fe7d36af056 69 while(data_pin.read())if(!loopCnt--)return DHTLIB_ERROR_TIMEOUT;
JENG 0:8fe7d36af056 70
JENG 0:8fe7d36af056 71 if(tmr.read_us() > 40) bits[idx] |= (1 << cnt);
JENG 0:8fe7d36af056 72
JENG 0:8fe7d36af056 73 tmr.stop();
JENG 0:8fe7d36af056 74 tmr.reset();
JENG 0:8fe7d36af056 75
JENG 0:8fe7d36af056 76 if(cnt == 0){ // next byte?
JENG 0:8fe7d36af056 77
JENG 0:8fe7d36af056 78 cnt = 7; // restart at MSB
JENG 0:8fe7d36af056 79 idx++; // next byte!
JENG 0:8fe7d36af056 80
JENG 0:8fe7d36af056 81 }else cnt--;
JENG 0:8fe7d36af056 82
JENG 0:8fe7d36af056 83 }
JENG 0:8fe7d36af056 84
JENG 0:8fe7d36af056 85 // WRITE TO RIGHT VARS
JENG 0:8fe7d36af056 86 // as bits[1] and bits[3] are allways zero they are omitted in formulas.
JENG 0:8fe7d36af056 87 humidity = bits[0];
JENG 0:8fe7d36af056 88 temperature = bits[2];
JENG 0:8fe7d36af056 89
JENG 0:8fe7d36af056 90 uint8_t sum = bits[0] + bits[2];
JENG 0:8fe7d36af056 91
JENG 0:8fe7d36af056 92 if(bits[4] != sum)return DHTLIB_ERROR_CHECKSUM;
JENG 0:8fe7d36af056 93
JENG 0:8fe7d36af056 94 return DHTLIB_OK;
JENG 0:8fe7d36af056 95
JENG 0:8fe7d36af056 96 }
JENG 0:8fe7d36af056 97
jack1930 6:151a46f6c3a4 98 char buffer[20];
JENG 0:8fe7d36af056 99
JENG 0:8fe7d36af056 100 //########################################
JENG 0:8fe7d36af056 101 // End of DHT11 Library
JENG 0:8fe7d36af056 102 //########################################
JENG 0:8fe7d36af056 103
jack1930 6:151a46f6c3a4 104 //Subscribe-Callbacks
jack1930 6:151a46f6c3a4 105 void subscribeCallback(MessageData& mymessage)
jack1930 6:151a46f6c3a4 106 {
jack1930 6:151a46f6c3a4 107 mylcd.cursorpos(0);
jack1930 6:151a46f6c3a4 108 //Der Inhalt einer Botschaft (payload) kann als String mit gibPayload
jack1930 6:151a46f6c3a4 109 //abgerufen werden
jack1930 6:151a46f6c3a4 110 mylcd.printf("%s ",client.gibPayload(mymessage).c_str());
jack1930 6:151a46f6c3a4 111 }
jack1930 6:151a46f6c3a4 112
jack1930 6:151a46f6c3a4 113 void subscribeCallback2(MessageData& mymessage)
jack1930 6:151a46f6c3a4 114 {
jack1930 6:151a46f6c3a4 115 mylcd.cursorpos(0x40);
jack1930 6:151a46f6c3a4 116 mylcd.printf("%s ",client.gibPayload(mymessage).c_str());
jack1930 6:151a46f6c3a4 117 }
jack1930 6:151a46f6c3a4 118
jack1930 6:151a46f6c3a4 119
JENG 0:8fe7d36af056 120 int main(void){
JENG 0:8fe7d36af056 121
jack1930 1:e6f838f99eeb 122 mylcd.clear();
jack1930 1:e6f838f99eeb 123 mylcd.cursorpos(0);
JENG 0:8fe7d36af056 124
jack1930 1:e6f838f99eeb 125 mylcd.printf("Nucleo - DHT11");
JENG 0:8fe7d36af056 126
jack1930 6:151a46f6c3a4 127 client.connect((char*)"joerg"); //Verbinde Client mit ID
jack1930 6:151a46f6c3a4 128 //Client für topic einschreiben
jack1930 6:151a46f6c3a4 129 client.subscribe("MBED/joerg/temp", QOS0, subscribeCallback);
jack1930 6:151a46f6c3a4 130 client.subscribe("MBED/joerg/hum", QOS0, subscribeCallback2);
jack1930 6:151a46f6c3a4 131
JENG 0:8fe7d36af056 132 for(;;){
jack1930 6:151a46f6c3a4 133 client.loop(); //Auf neue Botschaften prüfen
jack1930 1:e6f838f99eeb 134 int fehler=dht_read();
jack1930 6:151a46f6c3a4 135 //Temperatur veröffentlichen
jack1930 6:151a46f6c3a4 136 sprintf(buffer, "Temp=%2dC", temperature); //Temperaturwert in buffer speichern
jack1930 6:151a46f6c3a4 137 client.publish("MBED/joerg/temp", buffer); //unter Topic veröffentlichen
jack1930 6:151a46f6c3a4 138 //HAL_Delay(200);
jack1930 6:151a46f6c3a4 139 //Luftfeuchte veröffentlichen
jack1930 6:151a46f6c3a4 140 sprintf(buffer, "Luftfeuchte=%d", humidity); //diag in buffer speichern
jack1930 6:151a46f6c3a4 141 client.publish("MBED/joerg/hum", buffer); //unter Topic veröffentlichen
JENG 0:8fe7d36af056 142
jack1930 1:e6f838f99eeb 143
jack1930 6:151a46f6c3a4 144
jack1930 6:151a46f6c3a4 145 wait_us(500000);
JENG 0:8fe7d36af056 146
jack1930 1:e6f838f99eeb 147
JENG 0:8fe7d36af056 148
JENG 0:8fe7d36af056 149 }
JENG 0:8fe7d36af056 150
JENG 0:8fe7d36af056 151 }