Simple library for the DHT11 temperature and humidity sensor. Forked from an existing Mbed DHT11 project.
DHT11.h@13:11d0770eb603, 2021-09-15 (annotated)
- Committer:
- ajp109
- Date:
- Wed Sep 15 14:47:06 2021 +0000
- Revision:
- 13:11d0770eb603
- Parent:
- 12:af1eadec17e5
Interface changes to remove the need for separate readData() calls
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
s_inoue_mbed | 10:f0d789f49df7 | 1 | /* Copyright (c) 2014 Shigenori Inoue, MIT License |
s_inoue_mbed | 10:f0d789f49df7 | 2 | * |
s_inoue_mbed | 10:f0d789f49df7 | 3 | * Permission is hereby granted, free of charge, to any person obtaining a copy of this software |
s_inoue_mbed | 10:f0d789f49df7 | 4 | * and associated documentation files (the "Software"), to deal in the Software without restriction, |
s_inoue_mbed | 10:f0d789f49df7 | 5 | * including without limitation the rights to use, copy, modify, merge, publish, distribute, |
s_inoue_mbed | 10:f0d789f49df7 | 6 | * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is |
s_inoue_mbed | 10:f0d789f49df7 | 7 | * furnished to do so, subject to the following conditions: |
s_inoue_mbed | 10:f0d789f49df7 | 8 | * |
s_inoue_mbed | 10:f0d789f49df7 | 9 | * The above copyright notice and this permission notice shall be included in all copies or |
s_inoue_mbed | 10:f0d789f49df7 | 10 | * substantial portions of the Software. |
s_inoue_mbed | 10:f0d789f49df7 | 11 | * |
s_inoue_mbed | 10:f0d789f49df7 | 12 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING |
s_inoue_mbed | 10:f0d789f49df7 | 13 | * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
s_inoue_mbed | 10:f0d789f49df7 | 14 | * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
s_inoue_mbed | 10:f0d789f49df7 | 15 | * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
s_inoue_mbed | 10:f0d789f49df7 | 16 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
s_inoue_mbed | 0:4d4c5ea17d86 | 17 | */ |
s_inoue_mbed | 10:f0d789f49df7 | 18 | |
s_inoue_mbed | 0:4d4c5ea17d86 | 19 | #ifndef __DHT11__ |
s_inoue_mbed | 0:4d4c5ea17d86 | 20 | #define __DHT11__ |
s_inoue_mbed | 0:4d4c5ea17d86 | 21 | #include "mbed.h" |
s_inoue_mbed | 0:4d4c5ea17d86 | 22 | |
s_inoue_mbed | 0:4d4c5ea17d86 | 23 | /** Example: |
s_inoue_mbed | 0:4d4c5ea17d86 | 24 | * @code |
s_inoue_mbed | 0:4d4c5ea17d86 | 25 | * #include "mbed.h" |
s_inoue_mbed | 0:4d4c5ea17d86 | 26 | * #include "DHT11.h" |
s_inoue_mbed | 0:4d4c5ea17d86 | 27 | * |
JohnnyK | 12:af1eadec17e5 | 28 | * DHT11 d(D8); // Here fill your PIN mask/name |
s_inoue_mbed | 0:4d4c5ea17d86 | 29 | * |
s_inoue_mbed | 0:4d4c5ea17d86 | 30 | * main() |
s_inoue_mbed | 0:4d4c5ea17d86 | 31 | * { |
ajp109 | 13:11d0770eb603 | 32 | * printf("T:%d, H:%d\r\n", d.readTemperature(), d.readHumidity()); |
s_inoue_mbed | 0:4d4c5ea17d86 | 33 | * } |
s_inoue_mbed | 0:4d4c5ea17d86 | 34 | * @endcode |
s_inoue_mbed | 0:4d4c5ea17d86 | 35 | */ |
s_inoue_mbed | 0:4d4c5ea17d86 | 36 | |
s_inoue_mbed | 0:4d4c5ea17d86 | 37 | class DHT11 |
s_inoue_mbed | 9:056d1e9b428c | 38 | { |
s_inoue_mbed | 0:4d4c5ea17d86 | 39 | public: |
s_inoue_mbed | 0:4d4c5ea17d86 | 40 | /** Create a DHT11 interface |
s_inoue_mbed | 0:4d4c5ea17d86 | 41 | * @param pin 1-wire-like serial I/O port of DHT11 |
s_inoue_mbed | 0:4d4c5ea17d86 | 42 | */ |
s_inoue_mbed | 0:4d4c5ea17d86 | 43 | DHT11(PinName pin); |
s_inoue_mbed | 0:4d4c5ea17d86 | 44 | ~DHT11(); |
s_inoue_mbed | 0:4d4c5ea17d86 | 45 | |
ajp109 | 13:11d0770eb603 | 46 | /** Reading the data from the DHT11. Calling this is not required, but |
ajp109 | 13:11d0770eb603 | 47 | * may be useful for debug. |
s_inoue_mbed | 0:4d4c5ea17d86 | 48 | * @return Error code |
s_inoue_mbed | 0:4d4c5ea17d86 | 49 | * 0: OK. |
s_inoue_mbed | 0:4d4c5ea17d86 | 50 | * 1: Reading the data too often. |
s_inoue_mbed | 0:4d4c5ea17d86 | 51 | * 2: 1-wire bus is busy. |
s_inoue_mbed | 0:4d4c5ea17d86 | 52 | * 3: DHT11 does not respond. |
s_inoue_mbed | 0:4d4c5ea17d86 | 53 | * 4: DHT11 is not ready. |
s_inoue_mbed | 0:4d4c5ea17d86 | 54 | * 5: Checksum is incorrect. |
s_inoue_mbed | 5:da586c935e88 | 55 | * 6: Timeout. |
s_inoue_mbed | 0:4d4c5ea17d86 | 56 | */ |
s_inoue_mbed | 3:8cd064147bde | 57 | int readData(void); |
s_inoue_mbed | 3:8cd064147bde | 58 | |
ajp109 | 13:11d0770eb603 | 59 | /** Returns the current humidity from the DHT11. If the existing data record |
ajp109 | 13:11d0770eb603 | 60 | * is older than 2000ms, initiates a read from the device. Note that errors |
ajp109 | 13:11d0770eb603 | 61 | * may result in infinite attempts to read. |
ajp109 | 13:11d0770eb603 | 62 | * @return Humidity in % |
s_inoue_mbed | 0:4d4c5ea17d86 | 63 | */ |
s_inoue_mbed | 0:4d4c5ea17d86 | 64 | int readHumidity(void); |
s_inoue_mbed | 3:8cd064147bde | 65 | |
ajp109 | 13:11d0770eb603 | 66 | /** Returns the current temperature from the DHT11. If the existing data record |
ajp109 | 13:11d0770eb603 | 67 | * is older than 2000ms, initiates a read from the device. Note that errors |
ajp109 | 13:11d0770eb603 | 68 | * may result in infinite attempts to read. |
ajp109 | 13:11d0770eb603 | 69 | * @return Temperature in Celcius |
s_inoue_mbed | 0:4d4c5ea17d86 | 70 | */ |
s_inoue_mbed | 0:4d4c5ea17d86 | 71 | int readTemperature(void); |
s_inoue_mbed | 3:8cd064147bde | 72 | |
s_inoue_mbed | 0:4d4c5ea17d86 | 73 | enum ErrorDHT11 { |
s_inoue_mbed | 0:4d4c5ea17d86 | 74 | OK = 0, |
s_inoue_mbed | 9:056d1e9b428c | 75 | READ_TOO_OFTEN = 1, |
s_inoue_mbed | 0:4d4c5ea17d86 | 76 | BUS_BUSY = 2, |
s_inoue_mbed | 0:4d4c5ea17d86 | 77 | NOT_PRESENT = 3, |
s_inoue_mbed | 0:4d4c5ea17d86 | 78 | NOT_READY = 4, |
s_inoue_mbed | 0:4d4c5ea17d86 | 79 | CHKSUM_ERR = 5, |
s_inoue_mbed | 0:4d4c5ea17d86 | 80 | WATCHDOG_ERR = 6, |
s_inoue_mbed | 0:4d4c5ea17d86 | 81 | }; |
s_inoue_mbed | 0:4d4c5ea17d86 | 82 | |
s_inoue_mbed | 0:4d4c5ea17d86 | 83 | private: |
s_inoue_mbed | 0:4d4c5ea17d86 | 84 | DigitalInOut io; |
s_inoue_mbed | 0:4d4c5ea17d86 | 85 | InterruptIn io_irq; |
s_inoue_mbed | 0:4d4c5ea17d86 | 86 | Timer t; |
s_inoue_mbed | 0:4d4c5ea17d86 | 87 | uint32_t t_pulse_us; |
s_inoue_mbed | 9:056d1e9b428c | 88 | const static int t_tol_start; |
s_inoue_mbed | 9:056d1e9b428c | 89 | const static int t_tol_pulse; |
s_inoue_mbed | 0:4d4c5ea17d86 | 90 | uint64_t data; |
s_inoue_mbed | 0:4d4c5ea17d86 | 91 | uint32_t chksum; |
s_inoue_mbed | 0:4d4c5ea17d86 | 92 | uint32_t cnt; |
s_inoue_mbed | 0:4d4c5ea17d86 | 93 | uint32_t wdt; |
s_inoue_mbed | 0:4d4c5ea17d86 | 94 | bool eod; |
s_inoue_mbed | 0:4d4c5ea17d86 | 95 | void init(void); |
s_inoue_mbed | 0:4d4c5ea17d86 | 96 | void pos_edge(void); |
s_inoue_mbed | 0:4d4c5ea17d86 | 97 | void neg_edge(void); |
ajp109 | 13:11d0770eb603 | 98 | void readNewData(void); |
s_inoue_mbed | 0:4d4c5ea17d86 | 99 | }; |
s_inoue_mbed | 0:4d4c5ea17d86 | 100 | |
s_inoue_mbed | 0:4d4c5ea17d86 | 101 | #endif |