STM32 + DHT11

рдореБрдЭреЗ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рдореЗрдВ DHT11 рддрд╛рдкрдорд╛рди рдФрд░ рдЖрд░реНрджреНрд░рддрд╛ рд╕реЗрдВрд╕рд░ рдорд┐рд▓рд╛ред 20-90% рдХреА рд╕реАрдорд╛ рдореЗрдВ рдЖрд░реНрджреНрд░рддрд╛ рдорд╛рдкрддрд╛ рд╣реИ рдФрд░ 0 рд╕реЗ 50 рдбрд┐рдЧреНрд░реА рд╕реЗрд▓реНрд╕рд┐рдпрд╕ рддрдХ рддрд╛рдкрдорд╛рди рд╣реЛрддрд╛ рд╣реИред рдЖрд░реНрджреНрд░рддрд╛ рдорд╛рдкрдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ 5% рд╣реИ, рдФрд░ рддрд╛рдкрдорд╛рди 2 рдбрд┐рдЧреНрд░реА рд╕реЗрд▓реНрд╕рд┐рдпрд╕ рд╣реИред рдХрдмреНрдЬрд╛ рд╕рдордп 1 рд╕реЗрдХрдВрдбред рд╕рдВрдЪрд╛рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдПрдХрд▓ рддрд╛рд░ ( рдбреЗрдЯрд╛рд╢реАрдЯ )ред рдЗрд╕ рддрд░рд╣ рдХреЗ рдорд╛рдореВрд▓реА рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдВрд╕рд░ рдХреА рдЧреБрдВрдЬрд╛рдЗрд╢ рдХреЗрд╡рд▓ рдШрд░реЗрд▓реВ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХрдорд░реЗ рдХреА рд╕реНрдерд┐рддрд┐ рддрдХ рд╕реАрдорд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдЫрд╡рд┐
рдореИрдВ HHT1000 + DS18B20 рдкрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рд░реАрдбрд┐рдВрдЧ рдХреА рддреБрд▓рдирд╛ DHT11 рд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред

рдореИрдВрдиреЗ рдЧрд▓рддреА рд╕реЗ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рд╛ рдХрд┐ DHT11 рдФрд░ DS18B20 рдПрдХ рд╣реА рдмрд╕ рдореЗрдВ рдорд┐рд▓реЗрдВрдЧреЗред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдмрд╣реБрдд рдЕрд▓рдЧ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реИрдВред рдПрдХ рдмреБрд░реЗ рдЕрдиреБрднрд╡ рдХреЗ рдмрд╛рдж, рдЬрд▓реНрджрдмрд╛рдЬреА рдореЗрдВ рд╕рдЪреНрдЪрд╛рдИ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ред
рдЫрд╡рд┐
рдореБрдЭреЗ STM32 рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ DHT11 рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдирд╣реАрдВ рдорд┐рд▓реАред рдпрд╣рд╛рдБ Arduino рдХреЗ рд▓рд┐рдПред рдПрдХрд▓ рддрд╛рд░ рд╕рдВрдЪрд╛рд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ 1-рддрд╛рд░ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИред рдирд╛рдбрд╝реА рдХреА рдЕрд╡рдзрд┐ рдореЗрдВ рдЕрдВрддрд░ рд╕реЗ 0 рдФрд░ 1 рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЫрд╡рд┐
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдмрд╕ рдХреЗ рд╕реНрддрд░ рдХреЛ рд▓рдЧрднрдЧ 20 ms рддрдХ рдХрдо рд░рдЦреЗрдВ, рдлрд┐рд░ рдЗрд╕реЗ рдЫреЛрдбрд╝реЗрдВ, 20 ms рдХреЗ рдмрд╛рдж рд╕реЗрдВрд╕рд░ рдЗрд╕реЗ 0 рдкрд░ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ 80 ╬╝s рд░рдЦрддрд╛ рд╣реИ, рдлрд┐рд░ рдЗрд╕реЗ 80 ╬╝s (рдПрдХ рдЙрдкрд╕реНрдерд┐рддрд┐ рд╕рдВрдХреЗрдд рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ) рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рдж 40 рдмрд┐рдЯреНрд╕ рдХрд╛ рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИ, рдПрдХ рд╣реА рд╢реБрд░реБрдЖрдд рдХреЗ рд╕рд╛рде - рдмрд╕ рдХреЛ рдкрдХрдбрд╝реЗ рд╣реБрдП 50 ╬╝s рдФрд░ рдмрд┐рдЯред рдмрд┐рдЯ 0 рд▓рдЧрднрдЧ 28 ╬╝s рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╣реИ, рдмрд┐рдЯ 1 70 ╬╝s рд╣реИред рдареАрдХ рд╣реИ, рдмрд┐рджрд╛рдИ рдореЗрдВ, рд╕реЗрдВрд╕рд░ рдХреНрд▓реИрдореНрдк рдФрд░ рдмрд╕ рдХреЛ рд░рд┐рд▓реАрдЬрд╝ рдХрд░рддрд╛ рд╣реИред 40 рдбреЗрдЯрд╛ рдмрд┐рдЯреНрд╕ 5 рдмрд╛рдЗрдЯреНрд╕ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкрд╣рд▓реЗ рджреЛ рдирдореА рд╣реИрдВ, рдЕрдЧрд▓реЗ 2 рддрд╛рдкрдорд╛рди рдФрд░ рд╕рдорддрд╛ рдмрд╛рдЗрдЯ рд╣реИрдВред рд╕рдорддрд╛ рдмрд╛рдЗрдЯ рдкрд┐рдЫрд▓реЗ рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдпреЛрдЧ рд╣реИред 1 рдмрд╛рдЗрдЯ рдФрд░ 3 рдмрд╛рдЗрдЯ рд╕рдВрдЪрд░рд┐рдд рдорд╛рди, 2 рдФрд░ 4, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рджрд╕рд╡реАрдВ рдХреЗ рд▓рд┐рдП рдЖрд░рдХреНрд╖рд┐рдд рд╣реИрдВред
рджрд╛рд▓реЛрдВ рдХреА рдЕрд╡рдзрд┐ рдкрдврд╝рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ред рдлрд┐рд░ рдЗрд╕ рд╕рд░рдгреА рдХреЛ рдмрд╛рдЗрдЯ рд╕рд░рдгреА рдореЗрдВ рдмрджрд▓ рджреЗрдВред рддреЛ dht11.c рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЬрдиреНрдо рд╣реБрдЖред
uint16_t read_cycle(uint16_t cur_tics, uint8_t neg_tic){ uint16_t cnt_tics; if (cur_tics < MAX_TICS) cnt_tics = 0; if (neg_tic) { while (!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)&&(cnt_tics<MAX_TICS)){ cnt_tics++; } } else { while (GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)&&(cnt_tics<MAX_TICS)){ cnt_tics++; } } return cnt_tics; } uint8_t read_DHT11(uint8_t *buf){ uint16_t dt[42]; uint16_t cnt; uint8_t i, check_sum; //reset DHT11 Delay(500); GPIO_LOW(GPIOA,GPIO_Pin_2); Delay(20); GPIO_HIGH(GPIOA,GPIO_Pin_2); //start reading cnt = 0; for(i=0;i<83 && cnt<MAX_TICS;i++){ if (i & 1){ cnt = read_cycle(cnt, 1); } else { cnt = read_cycle(cnt, 0); dt[i/2]= cnt; } } //release line GPIO_HIGH(GPIOA,GPIO_Pin_2); if (cnt>=MAX_TICS) return DHT11_NO_CONN; //convert data for(i=2;i<42;i++){ (*buf) <<= 1; if (dt[i]>20) (*buf)++; if (!((i-1)%8) && (i>2)) buf++; } //calculate checksum buf -= 5; check_sum = 0; for(i=0;i<4;i++){ check_sum += *buf; buf++; } if (*buf != check_sum) return DHT11_CS_ERROR; return DHT11_OK; } 

рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЬрд┐рд╕рдореЗрдВ dht11.c рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ, рдпрд╣рд╛рдВ рд╣реИ ред


Source: https://habr.com/ru/post/In160017/


All Articles