#include <Wire.h>
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <LiquidCrystal_I2C.h>
#include <esp_sleep.h>
#include <WiFi.h>
#include "time.h"
#include "DHTesp.h"
//初始化 MPU6050
Adafruit_MPU6050 mpu;
//LiquidCrystal lcd(12,11,5,4,3,2);
LiquidCrystal_I2C lcd(0x27,16,2);
const int DHT_PIN = 15;
DHTesp dhtSensor;
float angle = 0;
float last_angle = 0;
float step_length = 0.65;
int steps = 0;
struct tm timeinfo;
char ssid [] = "Wokwi-GUEST";
char pwd [] = "";
void setup() {
Serial.begin(115200);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
WiFi.begin(ssid,pwd);
while(WiFi.status()!=WL_CONNECTED){
Serial.print("Connecting.");
delay(100);
}
Serial.print("Connected");
configTime(8*3600,0,"pool.ntp.org");
while(!time(nullptr)){
delay(1000);
}
Serial.begin(9600);
if(!mpu.begin()){
Serial.println("Failed to find MPU6050 chip");
while(1){
delay(10);
}
}
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
//lcd.print("Step Counter");
}
void loop() {
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Serial.println("---");
delay(1000);
if(!getLocalTime(&timeinfo)){
lcd.print("Failed to get time");
return;
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Time:");
lcd.print(String(timeinfo.tm_hour)+":"+String(timeinfo.tm_min)+":"+String(timeinfo.tm_sec));
esp_sleep_enable_timer_wakeup(60000000);
esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH,ESP_PD_OPTION_ON);
esp_deep_sleep_start();
delay(1000);
sensors_event_t event,event2,event3;
mpu.getEvent(&event,&event2,&event3);
float raw_angle = atan2(event.acceleration.y,event.acceleration.z);
angle = raw_angle * 180/PI;
if(angle > 0 && last_angle < 0){
steps++;
lcd.setCursor(0,1);
lcd.print("Steps:");
lcd.print(steps);
}
last_angle = angle;
delay(10);
}