极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 17329|回复: 3

最简单的 DHT22+OLED 测试

[复制链接]
发表于 2017-3-16 23:08:58 | 显示全部楼层 |阅读模式
考虑到DHT11比较渣,就买了据说好点点的DHT22。接上后看输出完全是个坏的,不甘心就继续折腾,终于找到原因,库有问题,即使宣称支持DHT22的库,好些也是错的。最后发现IDE联网下载的库 SimpleDHT 可以读出数据,但处理是针对DHT11的,不得已自己处理了40位数据,终于让DHT22工作起来了。
考虑到这个是常见应用,做物联网页的入门测试,就把程序修改下适合快速重现。
如图,插上,上传程序即可,不需要面包板和杜邦线。
需要条件是OLED的线序和板上IIC接口一致,D12持续输出高电平给DHT22供电,
拼凑的程序比较渣,在IDE 1.8.1 下编译通过, 库就在IDE里面联网下载即可。





  1. // 參考網址[url=http://arduino-er.blogspot.tw/20]http://arduino-er.blogspot.tw/20[/url] ... -monitor-using.html
  2. // 度 C 有完整顯示
  3. // display on 0.96 inch 128X64 I2C OLED

  4. #include <U8glib.h>
  5. #include <SimpleDHT.h>
  6. int pinDHT11 = 13;   // DHT22 数据引脚
  7. SimpleDHT11 dht11;
  8. U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);   
  9. char str[10];
  10. void drawTest(void)
  11. {
  12.    u8g.setFont(u8g_font_unifont);
  13. }
  14. void setup()
  15. {
  16.     pinMode(12, OUTPUT);
  17.     digitalWrite(12, HIGH); // DHT22 供电:  D12/D13/Gnd 正好可以插上DHT22
  18.    
  19.     Serial.begin(115200);
  20.    u8g.firstPage();  
  21.    do
  22.    {
  23.      drawTest();
  24.    }
  25.    while( u8g.nextPage() );
  26. }
  27. void loop() {
  28.   Serial.println("--------------------------------------------");
  29.   byte data[40] = {0};  // DHT raw data , 40 digital.
  30.   byte temperature = 0;
  31.   byte humidity = 0;
  32.   byte h[16] = {0};
  33.   byte t[16] = {0};
  34.   String hh;
  35.   String tt;
  36.   float hhh;
  37.   float ttt;

  38.   if (dht11.read(pinDHT11, &temperature, &humidity, data)) {
  39.     Serial.print("Read DHT11 failed");
  40.     return;
  41.   }
  42. //----------------Print DHT raw data , 40 digital.
  43.   Serial.print("Sample RAW Bits: ");   
  44.   for (int i = 0; i < 40; i++) {
  45.     Serial.print((int)data[i]);
  46.     if (i > 0 && ((i + 1) % 4) == 0) {
  47.       Serial.print(' ');
  48.     }
  49.   }
  50.     Serial.println("");
  51. //----------------
  52. //----------------from raw data, split  h/t to h[]
  53.       for (int i = 0; i < 16; i++) {
  54.       h[i] = data[i];     
  55.      }
  56.        for (int i = 0; i < 16; i++) {
  57.       Serial.print((int)h[i]);
  58.      }
  59.         Serial.println("");         

  60.       for (int i = 0; i < 16; i++) {
  61.       t[i] = data[i+16];     
  62.      }
  63.        for (int i = 0; i < 16; i++) {
  64.       Serial.print((int)t[i]);
  65.      }
  66.         Serial.println("");
  67. //----------------
  68. /*---------------- h[] to char, test only
  69.    for(int i=0;i<16;i++){
  70.     hh += h[i];
  71.     }
  72.     Serial.println(hh);
  73.    
  74.    for(int i=0;i<16;i++){
  75.     tt += t[i];
  76.     }
  77.     Serial.println(tt);
  78.   */
  79. //----------------h[] to float
  80.    hhh=0;
  81.    ttt=0;
  82.    for(int i=0;i<16;i++){
  83.     hhh = hhh +  h[i]*(pow(2,(15-i)));
  84.     }   
  85.    for(int i=0;i<16;i++){
  86.     ttt = ttt +  t[i]*(pow(2,(15-i)));
  87.     }
  88. //----------------
  89.   hhh=hhh/10;
  90.   ttt=ttt/10;
  91.   Serial.print(hhh); Serial.print(" % ");
  92.   Serial.print(ttt); Serial.println(" *C, ");
  93. /* 如下可以 Ctrl+Alt+L , IDE自带串口绘图器 查看双通道图形
  94.   Serial.print(hhh);
  95.   Serial.print(" ");
  96.   Serial.print(ttt);
  97.   Serial.println();
  98. */

  99. u8g.firstPage();  //OLED左上角为0,0 ;字符定位为 左下角
  100.    do {
  101.      u8g.setFont(u8g_font_helvB18);     
  102.      u8g.drawStr( 0, 63, "H="); //顯示 H=
  103.      u8g.drawStr( 40, 63, dtostrf(hhh, 5, 2, str));
  104.      u8g.drawStr( 105, 63, "%"); //顯示 %     
  105.      u8g.drawStr( 0, 32, "T="); //顯示 T=
  106.      u8g.drawStr( 37, 32, dtostrf(ttt, 5, 2, str));
  107.      u8g.drawStr( 100, 32, "\260C"); //顯示 度C     
  108.    } while( u8g.nextPage() );


  109.   delay(500); //repeat
  110. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2017-3-17 11:48:56 | 显示全部楼层
3Q for sharing,DHT22會比DHT11準嗎?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-17 11:55:02 | 显示全部楼层
jasonwang1208 发表于 2017-3-17 11:48
3Q for sharing,DHT22會比DHT11準嗎?

DHT11湿度值是有严重问题的,  DHT22贵些,略好.  至于专业用途还有更贵更好的.
回复 支持 反对

使用道具 举报

发表于 2017-3-24 21:32:24 | 显示全部楼层
讚,頂一個。
辛苦了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-17 00:23 , Processed in 0.045407 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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