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

2020-1-24 12:45 [复制链接] 3 161

01.png 7 d. h+ D* ?1 v" j
02.png
7 [* l& L+ I8 v" L5 ]2 o+ P% K! p/ E

3 g4 p/ [/ X2 V! y0 r( g" f( O5 {. c& P' r( K; e- T
0 S* X5 k% _% ~$ o) t+ X
代码我参考了事例:https://github.com/murphyzhao/dht11_rtt/blob/master/dht11_sample.c9 n7 u) p9 U7 Y1 X
我只是引脚修改成了:#define DHT11_DATA_PIN    GET_PIN(A, 8)& G' E7 x* F4 X7 h

0 q4 s1 F3 N: r2 b+ w4 y如何修改才能读取到数值?: o$ [% C9 K) ~' R% r
; O. o: s& Q5 E
如下main全部代码:
, E9 S* ]- ?6 j' ~- U7 B/ \
  1. /*
    ( e' V* K1 u. _
  2. * Copyright (c) 2006-2019, RT-Thread Development Team; O7 r! R( D7 h$ m* j3 J  C! m
  3. *
    ( |; R- K2 z) o
  4. * SPDX-License-Identifier: Apache-2.09 S# u5 v% l8 v6 K
  5. *& W$ w  |5 ]# S. \' T
  6. * Change Logs:
    * J% ~- O- i3 x; s1 S
  7. * Date           Author       Notes
    3 t' p2 W; f4 q, A- g
  8. * 2019-09-09     RT-Thread    first version
    , A8 Y* e% D, h) t- M/ H/ u. e
  9. */
    1 r& j: B" a3 N; }, i$ d# _
  10. 5 U( y; D0 L( G% D7 K
  11. #include <rtthread.h>- G4 o* q" I) K3 E$ A- e) `9 F
  12. #include <board.h>+ e5 [% |9 O; i: [
  13. #define DBG_TAG "main"0 Z: y3 ^8 f1 l! t1 ]: K4 x
  14. #define DBG_LVL DBG_LOG) C% L! j8 Z- F* X! _# k  n/ z, s
  15. #include "sensor.h"  c' J+ n) L6 \2 R5 `) b( w
  16. #include "sensor_dallas_dht11.h"1 y: e# }$ U* k' j+ `; M1 S0 Z4 ]  k
  17. /* PLEASE DEFINE the LED0 pin for your board, such as: PA5 *// M; A1 x- N$ \$ \: v1 P
  18. //#define LED0_PIN GET_PIN(C, 13). @) R* t) e: o8 |" i
  19. //#define OUT11_PIN GET_PIN(A,  11)
    % o$ g5 p' M( y1 ^6 b. _; Y
  20. #define DHT11_DATA_PIN    GET_PIN(A, 8)
    5 G9 p. T2 U( i: X: D7 s! J' F
  21. int main(void). @. p' ^* d" J' ^4 H
  22. {/ F& z5 i7 Q& t1 h! S+ e

  23. 6 z4 w) H% n9 I& J6 w
  24.     //int count = 1;
    , _% u' E  d" W/ R( C! U
  25.     /* set LED0 pin mode to output */
    ; g% |) n7 E/ ~2 E3 g
  26.     //rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);, h5 e/ A9 O# K# I4 v% t
  27.     //rt_pin_mode(OUT11_PIN,PIN_MODE_INPUT);' h0 X4 L  n- V* t# u  ]3 R" Y0 Z
  28.     /*
    ) b6 C2 o3 u  [& w2 v5 @4 _1 t
  29.     while (count++)
    / C2 t1 n) N; T; V$ t# Y) P
  30.     {4 W  U% P! f7 e2 i: f
  31.         rt_thread_delay(1000);) ^: _  W: d' n6 D4 C
  32.         LOG_D("thread run count : %d_%d\r\n", count,rt_pin_read(OUT11_PIN));/ ], y4 E  U7 }7 x5 L* G% v
  33.         rt_pin_write(LED0_PIN, PIN_HIGH);: ], _' C7 Y8 k/ w
  34.         rt_thread_delay(1000);
    0 `+ V7 [8 h; Y4 d3 A  I
  35.         rt_pin_write(LED0_PIN, PIN_LOW);! |% t* O- m& I4 n( W4 q& i
  36.     }0 C; ~  G( d; f
  37.     */6 N1 x8 @  M# n; O) q
  38. 1 }& A4 R4 e7 }9 U# I6 M
  39. 8 c0 u( P% ?0 X: M8 ~/ J! t
  40.     return RT_EOK;
    & m  s$ C4 D* b" U4 A, t
  41. }, L$ f, R8 G; q5 O9 M
  42. static void read_temp_entry(void *parameter)5 [6 f+ }6 C8 O$ g5 s% B& M2 o$ p
  43. {
    ; Z1 p, L% U/ v& K: O) w9 z* m
  44.     rt_device_t dev = RT_NULL;
    2 U) X. B, c7 A  w0 D
  45.     struct rt_sensor_data sensor_data;
    . t" C9 U' ^8 z$ Z& p4 X, o! F
  46.     rt_size_t res;
    ) r, P  s; a) ?' E# m
  47.     rt_uint8_t get_data_freq = 1; /* 1Hz */
    , J3 q7 n: l0 }& Q
  48. 2 i( C) M; G* @4 U
  49.     dev = rt_device_find("temp_dht11");
    , u1 k* o4 t8 i* V3 L
  50.     if (dev == RT_NULL)% h6 ~; H9 P% {/ e
  51.     {* G) o' _6 }8 r; U, j
  52.         return;
    ( W# e2 z/ N% W  |' P  W
  53.     }% K7 x* K, e/ ]$ x* a" l# j5 c
  54. ; ~" S6 |/ k- N+ T3 x7 P
  55.     if (rt_device_open(dev, RT_DEVICE_FLAG_RDWR) != RT_EOK)6 }* z% b& g7 B4 ~: [$ A1 r9 F
  56.     {
    0 R, y" N& s% b6 \* w. U* Q
  57.         rt_kprintf("open device failed!\n");, |1 x3 v% }' ?4 S" h( X
  58.         return;
    ; j$ X" f0 q! m+ x0 L$ b* `0 w
  59.     }& `7 K* M) f  Q* m% n
  60. ) [% j# @4 ^+ _+ t5 e
  61.     rt_device_control(dev, RT_SENSOR_CTRL_SET_ODR, (void *)(&get_data_freq));( g  o- j1 ]0 o6 q2 W

  62.   @! {6 D; ?- S% d
  63.     while (1)" s& X7 X1 Z3 e# F' V
  64.     {
    " d, |6 N; b+ Q4 }) Q& e
  65.         res = rt_device_read(dev, 0, &sensor_data, 1);
    / W" a. N/ N+ t& z& Q5 W
  66. ' z, o+ V% J( D- h5 ~3 O. I
  67.         if (res != 1)" }  {9 e, a, C5 N# e  f' p! g
  68.         {/ V. w1 F+ y6 k+ k
  69.             rt_kprintf("read data failed! result is %d\n", res);
    5 a/ O" K; @: K+ s1 v  O- m
  70.             rt_device_close(dev);
    5 ]+ @' v+ Z8 S. z  V# G$ ]9 g
  71.             return;) k6 v& X1 `! e! P
  72.         }5 G; M0 Z: Z- Q. T6 m& A" ~
  73.         else
    4 z# C( M/ D+ ^) {* W( k. j
  74.         {
    5 }1 f8 {8 {) T/ ]( \1 v6 |& ]
  75.             if (sensor_data.data.temp >= 0)
    9 J% c- n# d3 s8 M. r. s; A! N
  76.             {
    ' d4 c3 @+ |0 t! F" B8 |
  77.                 uint8_t temp = (sensor_data.data.temp & 0xffff) >> 0;      // get temp4 M* h, z/ {& c8 R! }
  78.                 uint8_t humi = (sensor_data.data.temp & 0xffff0000) >> 16; // get humi5 e8 m/ R# I$ ~5 C9 @( y$ u+ u
  79.                 rt_kprintf("temp:%d, humi:%d\n" ,temp, humi);
    4 h0 d4 {/ @# t0 `. @8 M
  80.             }5 A4 [3 g/ [. v; b: C' a
  81.         }
      Q4 r5 F6 b- `% H* n
  82.   T+ B5 S. i' m- ?
  83.         rt_thread_delay(1000);
    1 ]3 e' u9 J+ N' n
  84.     }
    # H. C/ e: S3 G' N
  85. }- h4 y  ], _3 A" M8 P0 S' W

  86. " t, `" _5 Z- M3 z" d
  87. static int dht11_read_temp_sample(void). }$ y9 g* c; p1 U' \0 u
  88. {  K* W5 m1 b  V% |. d
  89.     rt_thread_t dht11_thread;# C6 B7 u) t/ O
  90. 1 r; u, f6 I* C4 ^
  91.     dht11_thread = rt_thread_create("dht_tem",
    ) E' z  v0 C: k; ^
  92.                                      read_temp_entry," t3 u) {4 o1 D& j0 e& L; U+ y* @2 s
  93.                                      RT_NULL,
    ! ~( w' c2 [9 Q7 ?# a  z
  94.                                      1024,2 \' _9 l/ v0 B9 D2 ~/ [+ B
  95.                                      RT_THREAD_PRIORITY_MAX / 2,3 _$ I2 _4 e5 I# w9 |
  96.                                      20);
    0 X3 O2 j. i/ q; [" y% ]2 r
  97.     if (dht11_thread != RT_NULL)+ K7 l; F* s! H2 b% g+ K4 p$ u+ d9 r
  98.     {& W: {- e  }1 U- x7 s, D% X/ h. p
  99.         rt_thread_startup(dht11_thread);
    2 `$ B: c9 n. n1 j% m
  100.     }' @0 P& ?. ~* F

  101. ! c  [1 M/ S' I( k! s1 e
  102.     return RT_EOK;9 p  b# ~, z/ \$ p) T* L$ E) R
  103. }0 k' L2 G! ~) e: O( M
  104. INIT_APP_EXPORT(dht11_read_temp_sample);9 e- _3 T, i' `/ f
  105. ( `2 }, ?) z* j- o; ^1 H2 F
  106. static int rt_hw_dht11_port(void)
    & S3 v  v, e5 `2 g; T
  107. {! s. K% r$ n: [. T8 w7 p
  108.     struct rt_sensor_config cfg;: T3 ~7 x- j3 j8 o. ?7 D  ~: @
  109. ( S0 G8 ~, u2 A' M( O
  110.     cfg.intf.user_data = (void *)DHT11_DATA_PIN;
    2 X2 I) ^/ [: s0 T7 F& u6 N
  111.     rt_hw_dht11_init("dht11", &cfg);
    ; \# T, ^+ c, o, e
  112. 9 g# [1 y8 F* ?$ O
  113.     return RT_EOK;& o3 f* H& g; ]
  114. }* ^( l& W& h' X; Y* m& }5 ^
  115. INIT_COMPONENT_EXPORT(rt_hw_dht11_port);8 y6 d8 s8 M! ^2 D
复制代码

5 l, s% s7 h8 ?+ T; V/ `* C
* O! B  [& L8 ]  g# Z) p% \9 h- u  l; ]
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2020-1-25 13:16:45 | 显示全部楼层
最直接的方法是 (如果手头有示波器)看单总线有无数据交互,借此排除硬件问题与上拉问题
使用道具 举报 回复
发表于 2020-2-1 14:15:35 | 显示全部楼层
StackYuan 发表于 2020-1-25 13:16
2 _+ L  h6 U, T0 S; c" L7 x最直接的方法是 (如果手头有示波器)看单总线有无数据交互,借此排除硬件问题与上拉问题 ...

+ Q) q6 j2 d( y0 w" c没有此工具
使用道具 举报 回复
发表于 2020-3-26 18:14:23 | 显示全部楼层
你main函数里没有调用进程吧?
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  1. 3 主题
  2. 45 帖子
  3. 45 积分

Ta的主页 发消息

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

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

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

Powered by RT-Thread

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