欢迎光临
我们一直在努力

ArduinoI2C12864+DHT11温湿度显示教程。

2018041617314822

==概述==

    今天我们一起来研究一个关于I2C12864显示屏,来显示一个DHT11温湿度模块的例程。

    RSCG12864B是Arduino驱动IIC接口(I2C接口)的LCD12864液晶模块,中贝首发的第一块支持I2C接口的标准128*64液晶显示屏。

液晶显示模块目前在中国发展已经有30多个年头了,市场上应用最广泛的要属于128*64点阵的显示屏,从类型上分COB,COG及OLED, 稳定性和经济性最好要属于COB工艺的液晶显示模块。在百度一搜索就可以找到COB简介及工艺COB Chip-on-Board 也称为芯片直接贴装技术,是指将裸芯片直接粘贴在印刷电路板上,然后进行引线键合,再用有机胶将芯片和引线包封保护的工……

12864点阵的液晶屏主控芯片一般是ST7920及KS0107+KS0108及KS0086等IC,这一款COB液晶带(RSCG12864B) 拥有I2C接口,内建中文字库(GB2312),ASCII有5*7点阵,6*12点阵,8*16点阵三种之多,可谓目前市场最全,这款液晶屏最出色的要属于可以存储多达2000张图片,可以一般界面只需在电脑上做好BIN格式图片,配合相应的下载工具,就可以存储到液晶模块上。。

    DHT11温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。

我们将用到一个很好用的函数,dtostrf,可以将字符变成字符串形式,显示内容。粗略了对RSCG12864B的程序进行了修改。没有进一步的完善程序,目前来说,显示没有问题。

本次是以小实验的方式写的,对于模块不了解的,可以先看一下我们的模块教程,了解掌握模块使用方法后,再尝试本小实验。

(对于非本店模块不提供技术支持!如果无法做通,可能是不兼容导致,请自行尝试)。

所需材料:

产品套装购买链接:https://item.taobao.com/item.htm?spm=0.7095261.0.0.7ea61deb9REryd&id=567855681805

模块教程:

I2C12864:http://arduino365.com/2017/04/05/i2c-lcd12864%E6%98%BE%E7%A4%BA%E5%B1%8F%E5%85%BC%E5%AE%B9arduino/

DHT11:http://arduino365.com/2016/08/31/%E6%B8%A9%E6%B9%BF%E5%BA%A6%E4%BC%A0%E6%84%9F%E5%99%A8dht11/

==接线方式==

I2C 12864                      Arduino

VDD                                  5V

GND                                  GND

SCL                                   A5

SDA                                  A4

BUSY                                A3

特别注明:BUSY接MEGA2560的34号引脚,详见模块教程里边有说明。

==========================

DHT11                             Arduino

vcc                                      3.3V(可以接5V)

gnd                                     gnd

data                                    D2


==接线图==

i2c12864_bb_11


==例子程序==

#include <RSCG12864B.h>//引用库文件
double Fahrenheit(double celsius)
{
return 1.8 * celsius + 32;
}    //摄氏温度度转化为华氏温度

double Kelvin(double celsius)
{
return celsius + 273.15;
}     //摄氏温度转化为开氏温度

// 露点(点在此温度时,空气饱和并产生露珠)
// 参考: http://wahiduddin.net/calc/density_algorithms.htm
double dewPoint(double celsius, double humidity)
{
double A0= 373.15/(273.15 + celsius);
double SUM = -7.90298 * (A0-1);
SUM += 5.02808 * log10(A0);
SUM += -1.3816e-7 * (pow(10, (11.344*(1-1/A0)))-1) ;
SUM += 8.1328e-3 * (pow(10,(-3.49149*(A0-1)))-1) ;
SUM += log10(1013.246);
double VP = pow(10, SUM-3) * humidity;
double T = log(VP/0.61078);   // temp var
return (241.88 * T) / (17.558-T);
}

// 快速计算露点,速度是5倍dewPoint()
// 参考: http://en.wikipedia.org/wiki/Dew_point
double dewPointFast(double celsius, double humidity)
{
double a = 17.271;
double b = 237.7;
double temp = (a * celsius) / (b + celsius) + log(humidity/100);
double Td = (b * temp) / (a - temp);
return Td;
}
#include <dht11.h>//程序中调用了dht11的库

dht11 DHT11;//定义一个名字叫做DHT11,类型为dht11的值。

#define DHT11PIN 2//定义DHT11的引脚号为D2。
void setup()
{
Serial.begin(9600);//设置串口波特率9600
RSCG12864B.begin();//串口初始化
    RSCG12864B.brightness(255);//屏幕亮度
Serial.println("DHT11 TEST PROGRAM ");
Serial.print("LIBRARY VERSION: ");
Serial.println(DHT11LIB_VERSION);
Serial.println();
}
void loop()
{
Serial.println("\n");

int chk = DHT11.read(DHT11PIN);

Serial.print("Read sensor: ");
switch (chk)
{
case DHTLIB_OK:
Serial.println("OK");
break;
case DHTLIB_ERROR_CHECKSUM:
Serial.println("Checksum error");
break;
case DHTLIB_ERROR_TIMEOUT:
Serial.println("Time out error");
break;
default:
Serial.println("Unknown error");
break;
}

Serial.print("Humidity (%): ");
Serial.println((float)DHT11.humidity, 2);

Serial.print("Temperature (oC): ");
Serial.println((float)DHT11.temperature, 2);

Serial.print("Temperature (oF): ");
Serial.println(Fahrenheit(DHT11.temperature), 2);

Serial.print("Temperature (K): ");
Serial.println(Kelvin(DHT11.temperature), 2);

Serial.print("Dew Point (oC): ");
Serial.println(dewPoint(DHT11.temperature, DHT11.humidity));

Serial.print("Dew PointFast (oC): ");
Serial.println(dewPointFast(DHT11.temperature, DHT11.humidity));

delay(2000);
unsigned char i;
    char chn[]={  0xCE, 0xC2,0xB6, 0xC8,0xA3, 0xBA,0,};//温度
    char zay[]={  0xCA, 0xAA,0xB6, 0xC8,0xA3, 0xBA,0,};//湿度
   
    RSCG12864B.clear();//屏幕清屏
    RSCG12864B.print_string_16_xy(0,0,chn);//坐标0,0,显示chn里的内容
    RSCG12864B.print_string_16_xy(0,20,zay);//坐标0,20,显示zay里的内容
   char text[5];
   {
     dtostrf(DHT11.temperature,5,2,text);//dtostrf函数很好用,可以将字符变成字符串显示。
    RSCG12864B.print_string_12_xy(40,5,text);//定义字符串坐标。
     }
char work[5];
     dtostrf(DHT11.humidity,5,2,work);//dtostrf函数很好用,可以将字符变成字符串显示。
     RSCG12864B.print_string_12_xy(40,25,work);//定义字符串坐标。
    
}

==程序说明==

程序中这一步骤很关键。就是让字符转换成字符串显示。

image

【函数解析】:

  1. dtostrf(floatVar, minStringWidthIncDecimalPoint, numVarsAfterDecimal, charBuf); 

dtostrf    浮点数转字符串函数。

floatVar  浮点数即DHT11.temperature

minStringWidthIncDecimalPoint         最小字符串数,程序中为5

numVarsAfterDecimal                         小数点后几位,程序中为小数点后二位。

charBuf                                                 字符缓冲区即text

text     字符串名称:text

==实验效果==

==相关下载==

库文件:https://pan.baidu.com/s/1Igc0j-EXMw0Wp5CTi9uOdQ

未经允许不得转载:Arduino-Maker » ArduinoI2C12864+DHT11温湿度显示教程。

支付宝扫码打赏 微信打赏

原创文章,若帮到您,欢迎打赏

分享到:更多 ()

评论 抢沙发

评论前必须登录!

 

线上商城

中贝斯特创客空间蘑菇云创客教育