Files
Bionic_sphere/test/driver_test/drivers_test.c
T

195 lines
5.5 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//
// Created by misaki on 2025/8/23.
//
#include <esp_log.h>
#include "I2C_Driver.h"
#include "QMI8658.h"
extern IMUdata Accel;
extern IMUdata Gyro;
void imu_test(void)
{
I2C_Init();
QMI8658_Init();
while (1) {
QMI8658_Loop();
ESP_LOGI("app_main", "Accel x: %f, y: %f, z: %f", Accel.x, Accel.y, Accel.z);
ESP_LOGD("app_main", "Gyro X: %f, Y: %f, Z: %f", Gyro.x, Gyro.y, Gyro.z);
}
}
#include "BAT_Driver.h"
void battery_test(void)
{
// 初始化电池驱动
BAT_Init();
while(1) {
float voltage = BAT_Get_Volts();
ESP_LOGI("BAT_TEST", "Battery Voltage: %.2f V", voltage);
// 电池状态判断
if (voltage > 4.0) {
ESP_LOGI("BAT_TEST", "Battery Status: Full");
} else if (voltage > 3.7) {
ESP_LOGI("BAT_TEST", "Battery Status: Good");
} else if (voltage > 3.4) {
ESP_LOGI("BAT_TEST", "Battery Status: Low");
} else {
ESP_LOGI("BAT_TEST", "Battery Status: Critical");
}
}
}
#include "Wireless.h"
void wireless_test(void)
{
printf("Starting wireless scan test...\n");
// 初始化无线模块
Wireless_Init();
// 等待扫描完成
while (!Scan_finish) {
printf("Waiting for scan to complete...\n");
vTaskDelay(pdMS_TO_TICKS(1000));
}
// 打印所有WiFi AP信息
wireless_print_wifi_aps();
// 打印所有BLE设备信息
wireless_print_ble_devices();
}
#include "SD_MMC.h"
void sd_card_module_test(void)
{
printf("\n=== 开始SD卡模块测试 ===\n\n");
// 1. 初始化SD卡
printf("1. 初始化SD卡...\n");
SD_Init();
if(SDCard_Size > 0) {
printf(" SD卡初始化成功,容量: %lu MB\n", SDCard_Size);
} else {
printf(" SD卡初始化失败!\n");
return; // 如果SD卡初始化失败,终止测试
}
// 2. 获取Flash大小
printf("2. 获取Flash大小...\n");
Flash_Searching();
printf(" Flash大小: %lu MB\n", Flash_Size);
// 3. 测试文件写入
printf("3. 测试文件写入...\n");
char test_file_path[] = MOUNT_POINT"/test.txt";
char test_data[] = "这是一段测试数据,用于验证SD卡写入功能。";
esp_err_t write_result = s_example_write_file(test_file_path, test_data);
if(write_result == ESP_OK) {
printf(" 文件写入成功: %s\n", test_file_path);
} else {
printf(" 文件写入失败!\n");
}
// 4. 测试文件读取
printf("4. 测试文件读取...\n");
esp_err_t read_result = s_example_read_file(test_file_path);
if(read_result != ESP_OK) {
printf(" 文件读取失败!\n");
}
// 5. 测试文件打开功能
printf("5. 测试文件打开功能...\n");
FILE* test_file = Open_File(test_file_path);
if(test_file != NULL) {
printf(" 文件打开成功\n");
fclose(test_file); // 记得关闭文件
} else {
printf(" 文件打开失败!\n");
}
// 6. 测试文件夹检索功能
printf("6. 测试文件夹检索功能...\n");
char file_names[10][100]; // 存储最多10个文件名
uint16_t file_count = Folder_retrieval(MOUNT_POINT, ".txt", file_names, 10);
printf(" 找到 %d 个txt文件:\n", file_count);
for(int i = 0; i < file_count; i++) {
printf(" %d. %s\n", i+1, file_names[i]);
}
// 7. 清理测试文件
printf("7. 清理测试文件...\n");
if(remove(test_file_path)) {
printf(" 删除文件失败: %s\n", test_file_path);
} else {
printf(" 成功删除测试文件: %s\n", test_file_path);
}
printf("\n=== SD卡模块测试完成 ===\n");
}
#include "PCF85063.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
static const char *TAG = "PCF85063_TEST";
void pcf85063_test(void)
{
/* 1. 初始化 I2C 与 PCF85063 */
I2C_Init(); // 初始化 ESP32 I2C 外设
PCF85063_Init(); // 配置 PCF85063 进入 24h 模式、RTC 启动
ESP_LOGI(TAG, "PCF85063 初始化完成");
/* 2. 设置当前系统时间(示例:2025-08-24 周日 14:30:00*/
datetime_t set_time = {
.year = 2025,
.month = 8,
.day = 24,
.dotw = 0, // 0 表示星期日
.hour = 14,
.minute = 30,
.second = 0
};
PCF85063_Set_All(set_time);
ESP_LOGI(TAG, "已设置时间:2025-08-24 14:30:00");
/* 3. 设置闹钟(示例:14:31:15 触发一次)*/
datetime_t alarm_time = {
.hour = 14,
.minute = 31,
.second = 15,
/* 日/星期字段无需关心,已在 PCF85063_Set_Alarm 中屏蔽 */
};
PCF85063_Set_Alarm(alarm_time);
PCF85063_Enable_Alarm(); // 使能闹钟中断并清除 AF 标志
ESP_LOGI(TAG, "已设置闹钟:14:31:15");
/* 4. 周期性读取时间与检查闹钟标志位 */
char str_buf[64];
while (true)
{
/* 4.1 读取当前时间 */
datetime_t now;
PCF85063_Read_Time(&now);
datetime_to_str(str_buf, now);
ESP_LOGI(TAG, "当前时间:%s", str_buf);
/* 4.2 检查闹钟标志位 */
uint8_t flag = PCF85063_Get_Alarm_Flag();
if (flag & RTC_CTRL_2_AF)
{
ESP_LOGI(TAG, "闹钟触发!AF=1");
/* 如需重复闹钟,可在此重新设置新时间或清除 AF 后再次使能 */
PCF85063_Enable_Alarm(); // 清除 AF 并重新使能
}
vTaskDelay(pdMS_TO_TICKS(1000)); // 每秒读一次
}
}