欢迎光临
我们一直在努力

ArduinoLCD12864+DHT11温湿度教程

1231231312

==概述==

    今天我们一起来研究一个关于LCD12864显示屏,来显示一个DHT11温湿度模块的例程。主要是让DHT11输出的温度浮点数,显示在LCD12864显示屏上。

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

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

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

所需材料:

UNO主控板一个:点我购买

DHT11温湿度传感器一个:点我购买

LCD12864显示屏(串并联)一个:点我购买

杜邦线若干(公对母):点我购买

大面包板一个:点我购买


模块教程:

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/

LCD12864显示屏(串口):http://arduino365.com/2016/09/01/lcd12864%E6%98%BE%E7%A4%BA%E5%B1%8F/


==接线方式==

*LCD  Arduino
*VSS = GND
*VDD = 5V
*RS(CS) = 8;
*RW(SID)= 9;
*EN(CLK) = 3;
*PIN15 PSB = GND;
*BLA = 5V
*BLK = GND

——————————————–

DHT11                             Arduino

vcc                                      3.3V(可以接5V)

gnd                                     gnd

data                                    D2

==接线图==

23213141241241

==例子程序==

#include <LCD12864RSPI.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;
#define DHT11PIN 2//定义DHT11的引脚号为D2。
#define AR_SIZE( a ) sizeof( a ) / sizeof( a[0] )

void setup() {
LCDA.Initialise(); // 屏幕初始化
delay(100);
Serial.begin(9600);//设置串口波特率9600
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;
unsigned char show0[]={ 0xCE, 0xC2,0xB6, 0xC8,0xA3, 0xBA};//温度:
unsigned char show1[]={  0xCA, 0xAA,0xB6, 0xC8,0xA3, 0xBA};//湿度:
LCDA.CLEAR();//清屏
delay(100);
LCDA.DisplayString(0,0,show0,AR_SIZE(show0));//第一行第一格开始,显示温度:
delay(100);
LCDA.DisplayString(2,0,show1,AR_SIZE(show1));//第三行第一格开始,显示湿度:

char text[5];
{
   dtostrf(DHT11.temperature,5,2,text);//dtostrf函数很好用,可以将字符变成字符串显示。
   LCDA.DisplayString(0,20,text,AR_SIZE(text));//第一行第二十格开始,显示温度的值
}
char work[5];
      dtostrf(DHT11.humidity,5,2,work);//dtostrf函数很好用,可以将字符变成字符串显示。
      LCDA.DisplayString(2,20,work,AR_SIZE(work));//第三行第二十格开始,显示湿度的值 

}

==程序说明==

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

image

【函数解析】:

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

dtostrf    浮点数转字符串函数。

floatVar  浮点数即DHT11.temperature

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

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

charBuf                                                 字符缓冲区即text

text     字符串名称:text

==模块说明==

LCD12864显示屏使用串口连接的话,干扰会很大,可能您人在旁边挥一下手,就乱码了。建议尽可能使用长一点的杜邦线连接。PSB引脚拉低,可以让乱码少一点。

==实验效果==

==相关下载==

LCD12864显示屏库文件(内附汉字内码提取软件):https://pan.baidu.com/s/1slLLlBf#list/path=%2F&parentPath=%2F%E4%B8%AD%E8%B4%9D%E6%96%AF%E7%89%B9%E7%BD%91%E7%AB%99%E6%95%99%E7%A8%8B%E8%B5%84%E6%96%99

DHT11库文件(本店模块,请添加修改后的库文件):https://pan.baidu.com/s/1skIhmeL#list/path=%2F



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

支付宝扫码打赏 微信打赏

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

分享到:更多 ()

评论 抢沙发

评论前必须登录!

 

线上商城

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