#include #include #include #include const char* username = "..."; // 修改为您的用户名 const char* password = "..."; // 修改为您的密码 const char* device_id = "A00002"; const char* ssid = ".."; // 您的 WiFi 网络名称 const char* passwords = "..."; // 您的 WiFi 密码 const char* serverAddress = "192.168.3.31"; // 服务器地址 const int serverPort = 5001; // 服务器端口 const uint8_t address = 0x38; // AHT10 设备地址,默认为 0x38 float temperature; // 温度变量 float humidity; // 湿度变量 int data[6]; // 存储传感器数据的数组 WiFiClient wifiClient; // WiFi 客户端 HttpClient httpClient = HttpClient(wifiClient, serverAddress, serverPort); void AHT10_measure() { // 先读 Wire.requestFrom(address, (uint8_t)6); // 从设备地址请求 6 个字节的数据 while (Wire.available()){ for (int i = 0; i < 6; i++) { data[i] = Wire.read(); // 读取数据存储到数组中 } } // 解析温湿度数据 humidity = ((data[1] << 12) | (data[2] << 4)) | (data[3] >> 4); temperature = ((data[3] & 0x0f) << 16) | (data[4] << 8) | data[5]; humidity = (humidity / pow(2, 20)) * 100; temperature = (temperature / pow(2, 20)) * 200 - 50; // 等待 delay(500) // 发送 Wire.beginTransmission(address); // 发送开始信号,并指定设备地址 if ((data[0] & 0x08) == 0) { Wire.write(0xE1); // 发送初始化命令 Wire.write(0x08); Wire.write(0x00); } else { Wire.write(0xAC); // 发送测量命令 Wire.write(0x33); Wire.write(0x00); delayMicroseconds(75); // 延迟等待传感器完成测量 } // 结束发送 Wire.endTransmission(); // 发送到服务器 sendDataToServer(); } void sendDataToServer() { // 构造 URL,包含温度和湿度数据 String url = "/data?temperature=" + String(temperature) + "&humidity=" + String(humidity) + "&device_id=" + String(device_id); // 添加身份验证信息到请求头 String auth = String(username) + ":" + String(password); String base64Auth = base64::encode(auth); // 编码为 Base64 字符串 // 构造 Authorization 请求头 httpClient.beginRequest(); httpClient.get(url); // 修改此处为包含温度、湿度和设备ID参数的完整URL httpClient.sendHeader("Host", serverAddress); httpClient.sendHeader("Authorization", "Basic " + base64Auth); httpClient.sendHeader("Connection", "close"); httpClient.sendHeader("Content-Type", "application/json"); httpClient.endRequest(); // 打印温度和湿度信息 Serial.print("发送温度: "); Serial.print(temperature); Serial.println(" ℃"); Serial.print("发送湿度: "); Serial.print(humidity); Serial.println(" %"); // 连接服务器 int statusCode = httpClient.responseStatusCode(); // 获取响应状态码 if (statusCode == 200) { Serial.println("数据上传成功!"); } else { Serial.println("数据上传失败!"); } } void connectToWiFi() { Serial.println(); // 打印空行 Serial.println(); Serial.print("连接wifi: "); Serial.println(ssid); // 打印连接到的 WiFi 网络名称 Serial.print("wifi密码: "); Serial.println(passwords); Serial.print("服务器地址: "); Serial.println(serverAddress); WiFi.begin(ssid, passwords); // 连接到 WiFi 网络 while (WiFi.status() != WL_CONNECTED) { delay(500); // 延迟 0.5 秒 Serial.print("."); } Serial.println(""); // 打印空行 Serial.println("wifi连接成功!"); // 打印 WiFi 连接成功信息 Serial.print("IP地址: "); Serial.println(WiFi.localIP()); // 打印获取到的 IP 地址 Serial.print("信号强度"); Serial.println(WiFi.RSSI()); } void setup() { Wire.begin(20, 21); // 初始化 I2C 总线,指定 SDA 和 SCL 引脚 Serial.begin(9600); // 初始化串口通信 connectToWiFi(); // 连接到 WiFi 网络 } void loop() { AHT10_measure(); // 测量温湿度数据 delay(2000); // 延迟 2 秒 }