// Program for attiny3216 to control esp32 // created by Jans Hendry // Universitas Gadjah Mada, Indonesia // Kamakura Node, Japan // fab academy MIT - 2022 // I2C connection #include // Liquid crystal library #include // Servo #include // create lcd as an object // format: address, num of columns, num of rows LiquidCrystal_I2C lcd(0x27, 20, 4); // servo object Servo serv; unsigned long waitagain = 500; // sec unsigned long tdelta = 0; const int sigToesp = 10; const int Confbtn = 12; const int indic = 16; const int servopin = 5; const int sigFromesp = 6; byte ch0[8] = { 0b00001, 0b00011, 0b00111, 0b11111, 0b11111, 0b00111, 0b00011, 0b00001 }; byte ch1[8] = { 0b00000, 0b00100, 0b01110, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000 }; void setup(){ // start serial Serial.begin(9600); // setting up lcd.init(); // turn on backlight <- the variable resistor has been adjusted lcd.backlight(); // clear screen lcd.clear(); // create costum character lcd.createChar(8, ch0); // arrow lcd.createChar(9, ch1); // unordered list // setup pins for signaling pinMode(sigToesp, OUTPUT); pinMode(Confbtn, INPUT_PULLUP); pinMode(indic, OUTPUT); pinMode(sigFromesp, INPUT); digitalWrite(indic, HIGH); digitalWrite(sigToesp, LOW); delay(500); // delay 0.5 sec serv.attach(servopin); // servo pin serv.write(0); menu(); // call menu } void loop(){ if (digitalRead(sigFromesp) == HIGH){ // Sweep from 0 to 180 degrees: for (int angle = 0; angle <= 180; angle += 1) { serv.write(angle); delay(15); } // And back from 180 to 0 degrees: for (int angle = 180; angle >= 0; angle -= 1) { serv.write(angle); delay(30); } } delay(2000); // take a breath } void menu(){ // clear screen lcd.clear(); // write menu lcd.setCursor(4, 0); lcd.write((byte)9); lcd.setCursor(5, 0); lcd.print(" WELCOME "); lcd.setCursor(14, 0); lcd.write((byte)9); lcd.setCursor(0, 1); lcd.print("IoT Using ATTiny3216"); lcd.setCursor(0, 2); lcd.print("Cloud: ThingSpeak"); delay(3000); // Connect to WIFI lcd.clear(); lcd.setCursor(0, 0); lcd.print("SSID: Baskom"); lcd.setCursor(0, 1); lcd.print("Connecting ..."); lcd.setCursor(0, 2); lcd.print("Frequency: 2.4 GHz"); delay(1000); lcd.setCursor(0, 3); lcd.print("Connected"); delay(1000); // confirm to send data to cloud lcd.clear(); lcd.setCursor(0, 0); lcd.write((byte)8); lcd.setCursor(2, 0); lcd.print("Send Data Now?"); while(digitalRead(Confbtn) != HIGH){ // do nothing } lcd.clear(); lcd.setCursor(0, 0); lcd.print("Temper: "); lcd.setCursor(0, 1); lcd.print("Humid : "); digitalWrite(sigToesp, HIGH); // send temperature and humidity to esp32 for cloud transmision lcd.setCursor(8, 0); lcd.print("Sending.."); lcd.setCursor(8, 1); lcd.print("Sending.."); digitalWrite(sigToesp, LOW); }