diff --git a/examples/AHT10_ATtinny85_LCD_i2c/AHT10_ATtinny85_LCD_i2c.ino b/examples/AHT10_ATtinny85_LCD_i2c/AHT10_ATtinny85_LCD_i2c.ino new file mode 100644 index 0000000..201ccff --- /dev/null +++ b/examples/AHT10_ATtinny85_LCD_i2c/AHT10_ATtinny85_LCD_i2c.ino @@ -0,0 +1,128 @@ +/***************************************************************************************************/ +/* + 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 +#include +#include //https://github.com/enjoyneering/LiquidCrystal_I2C + +#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 +#define LED 1 //connect led to ATtiny85 pin physical pin no.6 in series with 470 Ohm resistor + +float valueTH = 0; + +const uint8_t temperature_icon[8] PROGMEM = {0x04, 0x0A, 0x0A, 0x0E, 0x0E, 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() +{ + pinMode(LED, OUTPUT); + + /* LCD connection check */ + while (lcd.begin(LCD_COLUMNS, LCD_ROWS) != true) //20 colums, 4 rows + { + digitalWrite(LED, HIGH); + delay(500); + digitalWrite(LED, LOW); + delay(500); + } + + /* AHT10 connection check */ + while (myAHT10.begin() != true) + { + lcd.print(F("AHT10 error")); //(F()) saves string to flash & keeps dynamic memory free + delay(5000); + } + + lcd.clear(); + +//Wire.setClock(400000); //experimental I2C speed! 400KHz, default 100KHz + + lcd.print(F("AHT10 OK")); + delay(2000); + + 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); + lcd.write(0); //print custom tempereture symbol from CGRAM + + lcd.setCursor(0, 1); //set 1-st colum & 2-nd row, first colum & row started at zero + lcd.write(1); //print custom humidity symbol from CGRAM +} + + +void loop() +{ + /* prints dynamic temperature data */ + lcd.setCursor(1, 0); + valueTH = myAHT10.readTemperature(); //read 6 bytes over I2C + if (valueTH != AHT10_ERROR) + { + lcd.print(myAHT10.readTemperature()); + 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 ")); + } + else + { + lcd.print(F("i2c error ")); + } + + /* prints dynamic humidity data */ + lcd.setCursor(1, 1); + valueTH = myAHT10.readHumidity(); //read 6 bytes over I2C + if (valueTH != AHT10_ERROR) + { + lcd.print(valueTH); + lcd.write(2); + lcd.print(F("2% ")); + } + else + { + lcd.print(F("i2c error ")); + } + + delay(10000); //recomended polling frequency 8sec..30sec +}