使用软件包dht11,读取数据为0,怎么回事?

2020-1-24 12:45 [复制链接] 2 110

01.png 4 W7 L9 K! }8 z
02.png ; m5 O* d# k9 h% ]

+ K0 S" e  D: p) [( O# s* u7 _+ U( o7 G' D2 K: [& ~

3 x' E: C5 n/ }  Q& Z3 \" G- M
" ^9 n& D( s% q5 ?* ~代码我参考了事例:https://github.com/murphyzhao/dht11_rtt/blob/master/dht11_sample.c/ ~5 ]* t# T8 O; D. C8 h% a6 S6 B
我只是引脚修改成了:#define DHT11_DATA_PIN    GET_PIN(A, 8)
& F( l* J% A! w1 R% s$ v: Q8 B2 A. P1 u6 ?: A- n9 u9 U) H
如何修改才能读取到数值?1 \3 F4 D) D; Z/ n$ [* \. l) e

. K' [+ m6 ?* _4 b( r如下main全部代码:
: F! A/ p3 W) w
  1. /*0 d& _$ z" ]" H$ @3 z( V
  2. * Copyright (c) 2006-2019, RT-Thread Development Team
    6 Y  v1 D- J6 t% {. J
  3. */ m9 O& m- H0 {% l3 H
  4. * SPDX-License-Identifier: Apache-2.0$ ?9 x( g3 e- o- \% i0 r: {
  5. *
    + T. Z7 v) s# \  _, N& B8 C
  6. * Change Logs:
    7 @3 G* K1 F: j. \! l- n( }! u
  7. * Date           Author       Notes
    1 {" v; K, a3 S7 u
  8. * 2019-09-09     RT-Thread    first version% l& @7 w6 E( w9 M$ r
  9. */
    - _- D8 |2 N5 V, g5 w% f

  10. ) v( l1 y8 }' D$ n( _6 j
  11. #include <rtthread.h>  x1 Z! f) d+ _8 h' v
  12. #include <board.h>
    , ?, y2 g8 D$ ~7 ~* N7 @2 M
  13. #define DBG_TAG "main"
    . ]( n, ~3 M' ?8 Z# i4 C
  14. #define DBG_LVL DBG_LOG6 [5 i  |; ?9 G9 O* |
  15. #include "sensor.h"
    2 {4 e# p( B  a% s3 G% `
  16. #include "sensor_dallas_dht11.h"
    3 S, a! ?' L# b& @
  17. /* PLEASE DEFINE the LED0 pin for your board, such as: PA5 */5 \' P# a6 J6 I
  18. //#define LED0_PIN GET_PIN(C, 13)
    ' l8 k# k0 t0 G. j8 X" r$ t
  19. //#define OUT11_PIN GET_PIN(A,  11)
    5 {! _, i4 m  o
  20. #define DHT11_DATA_PIN    GET_PIN(A, 8)
    : F+ x0 F7 ]9 y7 ]
  21. int main(void)3 c! H. [7 \0 G  k4 G
  22. {
    8 }3 o% i# q% V9 [$ i& n/ F0 h' _

  23. & X* a0 J" w% E. W
  24.     //int count = 1;: ~7 B0 G7 C0 o* G, G$ G! Z. L
  25.     /* set LED0 pin mode to output */+ S  w1 p, N- s! P' {* s. k; |9 m
  26.     //rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);) q4 I3 [/ V; F# m  b" |
  27.     //rt_pin_mode(OUT11_PIN,PIN_MODE_INPUT);
    7 \! w! g8 ]0 G& @/ t  x8 _* x
  28.     /** {6 i) I) C" N
  29.     while (count++), E. e% ^4 M7 Z5 ~9 [
  30.     {4 m/ \, B8 W0 a8 `# J
  31.         rt_thread_delay(1000);$ m& f0 F3 o* }4 X8 N
  32.         LOG_D("thread run count : %d_%d\r\n", count,rt_pin_read(OUT11_PIN));  O4 F6 |, z9 o0 ^
  33.         rt_pin_write(LED0_PIN, PIN_HIGH);
    " t; G# M9 E# [9 _6 x
  34.         rt_thread_delay(1000);6 Z9 [9 [9 l4 x) O
  35.         rt_pin_write(LED0_PIN, PIN_LOW);
    ( Y% W& m: b: \& q3 w
  36.     }
    , I, A" x) O; I$ ^
  37.     */' l1 X7 E: D& G4 ?2 q3 W0 r' [
  38. # t$ P" B2 G+ n0 t

  39. " l9 W$ x+ d3 g# |% u
  40.     return RT_EOK;4 L* ?. B# Q8 t4 W6 ]9 p
  41. }
    ) N0 P5 m  s( S2 I0 |9 L, {
  42. static void read_temp_entry(void *parameter)6 d" h2 D! B9 ]7 v# ]% f; p4 t, l7 c
  43. {
    ' N, S: h  T* E4 c
  44.     rt_device_t dev = RT_NULL;
    . ^% H9 n6 U- e$ Q6 X; m
  45.     struct rt_sensor_data sensor_data;
    % p8 S/ b; u9 j! @8 e
  46.     rt_size_t res;: W' {: U: p; h( t$ n0 m  s: B) B$ f
  47.     rt_uint8_t get_data_freq = 1; /* 1Hz */+ k2 p! R+ U5 P9 T& ^: s  _
  48. " F& M$ B3 `' q/ |. l( {& A
  49.     dev = rt_device_find("temp_dht11");
    ) ~7 R! d1 t% B
  50.     if (dev == RT_NULL)
    : d7 F* W* B/ t4 b
  51.     {
    6 k5 L4 |+ Q( s9 g4 O
  52.         return;
      W" s. ~; N1 j3 p
  53.     }
    2 Z. N# ~$ Q. I+ q8 _7 N

  54. & g! ^3 P$ Q) a8 A5 g
  55.     if (rt_device_open(dev, RT_DEVICE_FLAG_RDWR) != RT_EOK)
    6 g! a& E& p' i) B& s9 c' {
  56.     {: c5 A0 n  ~7 j) A3 q0 U5 U
  57.         rt_kprintf("open device failed!\n");( B& t7 H" A* Z$ Z6 e# t/ c$ O7 y
  58.         return;$ V- D# C, g. l8 k0 Y
  59.     }
    / c# k# B) T. A( B
  60. " ~  a8 N# k) S! n3 |6 E
  61.     rt_device_control(dev, RT_SENSOR_CTRL_SET_ODR, (void *)(&get_data_freq));
    ) ?0 \4 w3 Y8 ]$ T+ f
  62. 1 \/ i) _0 B. ?# ?
  63.     while (1)% |% C( m- s" A& j2 J9 K
  64.     {$ j6 }3 b8 m5 i9 z
  65.         res = rt_device_read(dev, 0, &sensor_data, 1);
    / H, O. h  V0 X$ a% f/ d, c

  66. 3 O) j: z8 o; M
  67.         if (res != 1)
    . u7 y3 |9 ^* d6 A, I  W
  68.         {
    # b8 s* s& J/ a3 U2 A
  69.             rt_kprintf("read data failed! result is %d\n", res);
    4 _& y( L) K5 V" ], d
  70.             rt_device_close(dev);2 K9 G# \* h/ [4 S5 Y
  71.             return;
    & A0 W" b1 T) q1 _( d2 K
  72.         }
    " W# G6 M5 }" ]
  73.         else
    : L# C1 K) q) i2 d2 v6 R
  74.         {; N) l* Q8 s4 ~
  75.             if (sensor_data.data.temp >= 0)/ T6 m; x* V8 @/ B! X2 e" `
  76.             {/ g- G' g1 [7 L
  77.                 uint8_t temp = (sensor_data.data.temp & 0xffff) >> 0;      // get temp
    5 M# e; w( N+ K1 y0 y3 n, R2 V
  78.                 uint8_t humi = (sensor_data.data.temp & 0xffff0000) >> 16; // get humi- c6 V2 @) Z3 v6 R  c
  79.                 rt_kprintf("temp:%d, humi:%d\n" ,temp, humi);5 L" h4 T2 B% d6 S3 K2 u+ R
  80.             }8 Q! Z8 `4 `6 s- `' E5 S
  81.         }
    / v; B, i# h4 a

  82. % O" e5 j1 ^6 g2 F+ _* j
  83.         rt_thread_delay(1000);) n* [. P1 Q$ e* H
  84.     }
      g3 P" @/ j4 j- L  z
  85. }
    ) h+ E& a3 V6 ]: n' S! q
  86. ( o  d  k  y. r* C8 L1 o
  87. static int dht11_read_temp_sample(void)
    ! k# f* X, \$ J! X- x/ k0 n5 N
  88. {1 k8 `6 r+ ]* ]4 a9 h
  89.     rt_thread_t dht11_thread;; B( K& {5 @. o0 g3 l, T6 m" Z

  90. % C4 y5 V) e, Q4 v6 F, _
  91.     dht11_thread = rt_thread_create("dht_tem",
    2 @1 y$ Q4 {% r& V" U
  92.                                      read_temp_entry,* O6 e3 }) ^/ I# L2 A" I$ Z2 P
  93.                                      RT_NULL,8 o! N4 K. J! c4 ^$ `6 H
  94.                                      1024,* B, q5 u$ O+ p( H, O4 @$ ?0 B2 W
  95.                                      RT_THREAD_PRIORITY_MAX / 2,
    * X/ Y  D( O- u  z- O0 h& [; @( U) @7 _
  96.                                      20);* S! c# @- g6 Y5 u, m2 t% G* ]
  97.     if (dht11_thread != RT_NULL)
    , g$ C; `9 C2 O! N
  98.     {" w) M) f5 e( f
  99.         rt_thread_startup(dht11_thread);* v: {; m% q6 K9 d4 n. D1 a0 I
  100.     }  E6 i4 c" l6 p. s$ Q( d
  101. ; ^2 Q) ^6 S7 k& n
  102.     return RT_EOK;. s( |. M4 }" }/ M5 C& ?$ o
  103. }
    4 n7 {2 \! F! `) _. F  c* C9 b
  104. INIT_APP_EXPORT(dht11_read_temp_sample);
    ( p8 F! S% C: u. ?5 @: i

  105. ( k, `& L6 k! v+ N7 w- k. r1 m& g
  106. static int rt_hw_dht11_port(void)
    , Y( ~0 V0 t; j, o
  107. {
    8 @2 e  @: p' p4 I4 p
  108.     struct rt_sensor_config cfg;, B6 ~- X5 i/ U
  109. 8 b$ |; z' E5 {5 ~0 K, G; `& l0 x! |" ^
  110.     cfg.intf.user_data = (void *)DHT11_DATA_PIN;
    & F* E6 V8 e# E7 Y
  111.     rt_hw_dht11_init("dht11", &cfg);
    / H5 j& K7 d& b
  112. 2 W9 E/ t* K6 I- L5 J( s5 s
  113.     return RT_EOK;
    , K: v/ F9 R1 ~
  114. }, T# H. m$ U* c# l
  115. INIT_COMPONENT_EXPORT(rt_hw_dht11_port);- b1 u2 l7 k, l
复制代码

3 C. Z, \5 ^. p: @
+ E, L5 B8 _9 J, i. C  ]3 R
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2020-1-25 13:16:45 | 显示全部楼层
最直接的方法是 (如果手头有示波器)看单总线有无数据交互,借此排除硬件问题与上拉问题
使用道具 举报 回复
发表于 2020-2-1 14:15:35 | 显示全部楼层
StackYuan 发表于 2020-1-25 13:16# m% T) t, d5 b& h4 E, c% L
最直接的方法是 (如果手头有示波器)看单总线有无数据交互,借此排除硬件问题与上拉问题 ...
+ A/ A# D* M' E$ S
没有此工具
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|RT-Thread开发者社区 ( 沪ICP备13014002号-1

有害信息举报电话:021-31165890 手机:18930558079

© 2006-2019 上海睿赛德电子科技有限公司

Powered by RT-Thread

快速回复 返回顶部 返回列表