This repository has been archived by the owner on Sep 26, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 19
/
AHT10_ESP8266_LCD_i2c.ino
131 lines (97 loc) · 4.93 KB
/
AHT10_ESP8266_LCD_i2c.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/***************************************************************************************************/
/*
This is an Arduino library for Aosong ASAIR AHT10, AHT15 Digital Humidity & Temperature Sensor
written by : enjoyneering79
sourse code: https://github.com/enjoyneering/
This chip uses I2C bus to communicate, specials pins are required to interface
Board: SDA SCL Level
Uno, Mini, Pro, ATmega168, ATmega328..... A4 A5 5v
Mega2560................................. 20 21 5v
Due, SAM3X8E............................. 20 21 3.3v
Leonardo, Micro, ATmega32U4.............. 2 3 5v
Digistump, Trinket, ATtiny85............. 0/physical pin no.5 2/physical pin no.7 5v
Blue Pill, STM32F103xxxx boards.......... PB7 PB6 3.3v/5v
ESP8266 ESP-01........................... GPIO0/D5 GPIO2/D3 3.3v/5v
NodeMCU 1.0, WeMos D1 Mini............... GPIO4/D2 GPIO5/D1 3.3v/5v
ESP32.................................... GPIO21/D21 GPIO22/D22 3.3v
Frameworks & Libraries:
ATtiny Core - https://github.com/SpenceKonde/ATTinyCore
ESP32 Core - https://github.com/espressif/arduino-esp32
ESP8266 Core - https://github.com/esp8266/Arduino
STM32 Core - https://github.com/stm32duino/Arduino_Core_STM32
- https://github.com/rogerclarkmelbourne/Arduino_STM32
GNU GPL license, all text above must be included in any redistribution,
see link for details - https://www.gnu.org/licenses/licenses.html
*/
/***************************************************************************************************/
#include <Wire.h> //use bug free i2c driver https://github.com/enjoyneering/ESP8266-I2C-Driver
#include <AHT10.h>
#include <LiquidCrystal_I2C.h> //https://github.com/enjoyneering/LiquidCrystal_I2C
#include <ESP8266WiFi.h>
#define LCD_ROWS 4 //qnt. of LCD rows
#define LCD_COLUMNS 20 //qnt. of LCD columns
#define DEGREE_SYMBOL 0xDF //degree symbol from LCD ROM
float valueTH = 0;
const uint8_t temperature_icon[8] PROGMEM = {0x04, 0x0A, 0x0A, 0x0A, 0x0A, 0x1F, 0x1F, 0x0E}; //PROGMEM saves variable to flash & keeps dynamic memory free
const uint8_t humidity_icon[8] PROGMEM = {0x04, 0x0E, 0x0E, 0x1F, 0x1F, 0x1F, 0x0E, 0x00};
const uint8_t plus_minus_icon[8] PROGMEM = {0x00, 0x04, 0x0E, 0x04, 0x00, 0x0E, 0x00, 0x00};
AHT10 myAHT10();
LiquidCrystal_I2C lcd(PCF8574_ADDR_A21_A11_A01, 4, 5, 6, 16, 11, 12, 13, 14, POSITIVE);
void setup()
{
WiFi.persistent(false); //disable saving wifi config into SDK flash area
WiFi.forceSleepBegin(); //disable AP & station by calling "WiFi.mode(WIFI_OFF)" & put modem to sleep
Serial.begin(115200);
/* LCD connection check */
while (lcd.begin(LCD_COLUMNS, LCD_ROWS, LCD_5x8DOTS, SDA, SCL) != true) //20 colums, 4 rows, 5x8 pixels char size
{
digitalWrite(LED, LOW);
delay(500);
digitalWrite(LED, HIGH);
delay(500);
}
lcd.print(F("PCF8574 is OK")); //(F()) saves string to flash & keeps dynamic memory free
delay(1000);
lcd.clear();
/* AHT10 connection check */
while (myAHT10.begin(SDA, SCL) != true)
{
lcd.setCursor(0, 0);
lcd.print(F("AHT10 error"));
delay(5000);
}
lcd.clear();
//Wire.setClock(400000); //experimental I2C speed! 400KHz, default 100KHz
lcd.print(F("AHT10 OK"));
delay(1000);
lcd.clear();
/* load custom symbol to CGRAM */
lcd.createChar(0, temperature_icon);
lcd.createChar(1, humidity_icon);
lcd.createChar(2, plus_minus_icon);
/* prints static text */
lcd.setCursor(0, 0); //set 1-st colum & 1-st row
lcd.write(0); //print custom tempereture symbol from CGRAM
lcd.setCursor(0, 1);
lcd.write(1);
}
void loop()
{
/* prints dynamic temperature data */
lcd.setCursor(1, 0);
valueTH = myAHT10.readTemperature(AHT10_FORCE_READ_DATA); //read 6-bytes over I2C
if (valueTH != AHT10_ERROR) lcd.print(valueTH);
else lcd.print(F("xxx"));
lcd.write(2); //print custom plus/minus symbol
lcd.print(F("0.3"));
lcd.write(DEGREE_SYMBOL); //print degree symbol from the LCD ROM
lcd.print(F("C "));
/* prints dynamic humidity data */
lcd.setCursor(1, 1);
valueTH = myAHT10.readTemperature(AHT10_USE_READ_DATA); //use same 6-bytes
if (valueTH != AHT10_ERROR) lcd.print(valueTH);
else lcd.print(F("xxx"));
lcd.write(2);
lcd.print(F("2% "));
delay(10000); //recomended polling frequency 8sec..30sec
}