mirror of
https://github.com/skot/ESP-Miner.git
synced 2025-03-18 05:42:16 +01:00
104 lines
2.4 KiB
C
104 lines
2.4 KiB
C
#include <stdio.h>
|
|
#include <string.h>
|
|
#include "esp_log.h"
|
|
|
|
#include "driver/i2c.h"
|
|
#include "driver/gpio.h"
|
|
|
|
#include "led_controller.h"
|
|
#include "DS4432U.h"
|
|
#include "EMC2101.h"
|
|
#include "INA260.h"
|
|
#include "adc.h"
|
|
#include "oled.h"
|
|
|
|
#define USE_OLED 1 //Set to 1 to use OLED, 0 to not use it
|
|
|
|
static const char *TAG = "system";
|
|
|
|
void init_system(void) {
|
|
|
|
//test the LEDs
|
|
// ESP_LOGI(TAG, "Init LEDs!");
|
|
// ledc_init();
|
|
// led_set();
|
|
|
|
//Playing with BI level
|
|
gpio_set_direction(GPIO_NUM_10, GPIO_MODE_OUTPUT);
|
|
gpio_set_level(GPIO_NUM_10, 0);
|
|
|
|
//Init I2C
|
|
ESP_ERROR_CHECK(i2c_master_init());
|
|
ESP_LOGI(TAG, "I2C initialized successfully");
|
|
|
|
ADC_init();
|
|
|
|
//DS4432U tests
|
|
DS4432U_set_vcore(1.2);
|
|
|
|
//Fan Tests
|
|
EMC2101_init();
|
|
EMC2101_set_fan_speed(0);
|
|
vTaskDelay(500 / portTICK_PERIOD_MS);
|
|
|
|
//oled
|
|
#ifdef USE_OLED
|
|
if (!OLED_init()) {
|
|
ESP_LOGI(TAG, "OLED init failed!");
|
|
} else {
|
|
ESP_LOGI(TAG, "OLED init success!");
|
|
OLED_clear();
|
|
OLED_writeString(0, 0, "The bitaxe!");
|
|
}
|
|
#endif
|
|
}
|
|
|
|
void get_stats(void) {
|
|
char oled_buf[20];
|
|
|
|
uint16_t fan_speed = EMC2101_get_fan_speed();
|
|
float chip_temp = EMC2101_get_chip_temp();
|
|
float current = INA260_read_current();
|
|
float voltage = INA260_read_voltage();
|
|
float power = INA260_read_power();
|
|
uint16_t vcore = ADC_get_vcore();
|
|
|
|
ESP_LOGI(TAG, "Fan Speed: %d RPM", fan_speed);
|
|
ESP_LOGI(TAG, "Chip Temp: %.2f C", chip_temp);
|
|
|
|
//Current Sensor tests
|
|
ESP_LOGI(TAG, "Current: %.2f mA", current);
|
|
ESP_LOGI(TAG, "Voltage: %.2f mV", voltage);
|
|
ESP_LOGI(TAG, "Power: %.2f mW", power);
|
|
|
|
//ESP32 ADC tests
|
|
ESP_LOGI(TAG, "Vcore: %d mV\n", vcore);
|
|
|
|
if (OLED_status()) {
|
|
memset(oled_buf, 0, 20);
|
|
snprintf(oled_buf, 20, "Fan: %d RPM", fan_speed);
|
|
OLED_clearLine(1);
|
|
OLED_writeString(0, 1, oled_buf);
|
|
|
|
memset(oled_buf, 0, 20);
|
|
snprintf(oled_buf, 20, "Temp: %.2f C", chip_temp);
|
|
OLED_clearLine(2);
|
|
OLED_writeString(0, 2, oled_buf);
|
|
|
|
memset(oled_buf, 0, 20);
|
|
snprintf(oled_buf, 20, "Pwr: %.2f mW", power);
|
|
OLED_clearLine(3);
|
|
OLED_writeString(0, 3, oled_buf);
|
|
}
|
|
|
|
}
|
|
|
|
void SysTask(void *arg) {
|
|
|
|
init_system();
|
|
|
|
while(1){
|
|
get_stats();
|
|
vTaskDelay(5000 / portTICK_PERIOD_MS);
|
|
}
|
|
} |