Получится у нас такая штука:
Для начала определимся с тем, что нам нужно:
1. +- Прямые руки
2. Arduino nano/uno(без разницы)
3. LCD1602 + I2C
4. DHT11
5. инфракрасный пульт
Все есть? Можно продолжать
Для начала напишем нужный код(для ардуино и для пк)
1. Arduino
Хочу немного пояснить за части кода для общего понимания:
Все остальное я +- объяснил в коде.
Теперь напишем код для стороны пк(c++):
Ничего пояснять не буду, т.к просто попросил этот код у GPT
А, ну вот кроме того, что вам нужно будет вписать порт в который вы подключили ардуинку(88 строка)
Такс, код мы написали, теперь осталось все подключить
Правильное подключение всех компонентов вы можете найти в гугле, но я все же распишу(первое - на компоненте, второе - на ардуино):
1. LCD1602:
GND -> GND
VCC -> 5v
SJA -> A5
SCL -> A4
2.DHT11:
VCC -> 5v
DATA -> (любой D пин, например 12)
GND -> GND
3. Приемник(от лицевой стороны):
первая нога -> (любой D пин, например 11)
вторая нога(середина) - > GND
третья нога -> 5v
Вы можете подключать GND и 5v к одному проводу, все работает отлично.
Теперь нам нужно все загрузить на ардуинку
Сначала скачиваем программу - https://www.arduino.cc/ (сами там найдете)
Скачали? Молодцы! Теперь нам нужно все настроить и загрузить.
1. Открываем файлик pc.ino(ну если вы скачали)
2. Загружаем библиотеки. Скетч -> Подключить библиотеку -> Добавить .zip библиотеку
3. Добавляем все библиотеки
4. Ищем нужный порт и выбираем вашу ардуинку(у меня это nano)
5. Нажимаем на стрелочку загрузки
6. Profit!
Скачать все исходники + библиотеки:
VT - https://www.virustotal.com/gui/file...1408cffe25318cc7e397490ea627f75fdd3?nocache=1
Ебать я от VT в ахуе, если боитесь, то сами компильте
Идею спиздил у AlexGyver, код, подключение и все остальное - моё
Спасибо за то что прочитал Если хочешь поддержать меня, можешь написать в тг(ну хз, может денюжку подкинуть)
Для начала определимся с тем, что нам нужно:
1. +- Прямые руки
2. Arduino nano/uno(без разницы)
3. LCD1602 + I2C
4. DHT11
5. инфракрасный пульт
Все есть? Можно продолжать
Для начала напишем нужный код(для ардуино и для пк)
1. Arduino
Arduino:
#include <DFRobot_DHT11.h>
#include <IRremote.h>
#include <Wire.h>
#include <LiquidCrystal_PCF8574.h>
DFRobot_DHT11 DHT;
#define DHT11_PIN 12
LiquidCrystal_PCF8574 lcd(0x27); // Адрес ЖК-дисплея 0x27 (может быть другим)
IRrecv irrecv(11); // Пин, к которому подключен ИК-приемник
decode_results results;
int currentDisplayMode = 0; // Текущий режим отображения
void setup() {
Serial.begin(9600);
irrecv.enableIRIn();
lcd.begin(16, 2);
lcd.setBacklight(255);
}
void loop() {
DHT.read(DHT11_PIN);
if (irrecv.decode(&results)) {
unsigned long value = results.value; // Конвертация
// кнопки на пульте
switch (value) {
case 0xFF30CF: // Код кнопки "1" на пульте
currentDisplayMode = 1; // режим отображения 1
break;
case 0xFF18E7: // Код кнопки "1" на пульте
currentDisplayMode = 2; // режим отображения 1
break;
default:
break;
}
irrecv.resume(); // Принимаем следующую команду
}
// Отображение различных режимов на ЖК-дисплее
switch (currentDisplayMode) {
case 1:
displayTemperatureAndHumidity();
break;
case 2:
displayCPUGPU();
break;
default:
break;
}
}
// Функция отображения температуры и влажности на ЖК-дисплее
void displayTemperatureAndHumidity() {
lcd.clear();
// Выводим данные на экран
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(DHT.temperature);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Humidity: ");
lcd.print(DHT.humidity);
lcd.print("%");
}
// GPU отображение
void displayCPUGPU(){
int gpuload = Serial.parseInt();
int gpuTemperature = Serial.parseInt();
lcd.clear();
// Выводим данные на экран
lcd.setCursor(0, 0);
lcd.print("GPU: ");
lcd.print(gpuload);
lcd.print("%");
lcd.setCursor(0, 1);
lcd.print("GPU: ");
lcd.print(gpuTemperature);
lcd.print("C");
delay(500);
}
#define DHT11_PIN 12
Здесь мы подключаем DHT11, вам нужно написать тот пин, в который подключили. У меня это 12 пинIRrecv irrecv(11);
Подключение приемника пульта. Вам нужно вписать то значение, куда вы подключили его. У меня это 11 пинВсе остальное я +- объяснил в коде.
Теперь напишем код для стороны пк(c++):
PC:
#include <iostream>
#include <Windows.h>
#include <nvml.h>
#include <string>
#include <pdh.h>
#include <pdhmsg.h>
#pragma comment(lib, "nvml.lib")
#pragma comment(lib, "pdh.lib")
// Функция для получения нагрузки GPU (для NVIDIA)
double getGpuLoad() {
nvmlReturn_t result;
nvmlDevice_t device;
unsigned int deviceCount;
// Инициализация NVML
result = nvmlInit();
if (result != NVML_SUCCESS) {
std::cerr << "Failed to initialize NVML: " << nvmlErrorString(result) << std::endl;
return -1.0;
}
// Получение количества доступных устройств NVIDIA
result = nvmlDeviceGetCount(&deviceCount);
if (result != NVML_SUCCESS) {
std::cerr << "Failed to get device count: " << nvmlErrorString(result) << std::endl;
nvmlShutdown();
return -1.0;
}
// Открытие первого устройства NVIDIA
result = nvmlDeviceGetHandleByIndex(0, &device);
if (result != NVML_SUCCESS) {
std::cerr << "Failed to get device handle: " << nvmlErrorString(result) << std::endl;
nvmlShutdown();
return -1.0;
}
// Получение данных о нагрузке GPU
nvmlUtilization_t gpuUtilization;
result = nvmlDeviceGetUtilizationRates(device, &gpuUtilization);
double gpuLoad = (result == NVML_SUCCESS) ? static_cast<double>(gpuUtilization.gpu) : -1.0;
nvmlShutdown();
return gpuLoad;
}
// Функция для получения температуры GPU (для NVIDIA)
double getGpuTemperature() {
nvmlReturn_t result;
nvmlDevice_t device;
unsigned int deviceCount;
// Инициализация NVML
result = nvmlInit();
if (result != NVML_SUCCESS) {
std::cerr << "Failed to initialize NVML: " << nvmlErrorString(result) << std::endl;
return -1.0;
}
// Получение количества доступных устройств NVIDIA
result = nvmlDeviceGetCount(&deviceCount);
if (result != NVML_SUCCESS) {
std::cerr << "Failed to get device count: " << nvmlErrorString(result) << std::endl;
nvmlShutdown();
return -1.0;
}
// Открытие первого устройства NVIDIA
result = nvmlDeviceGetHandleByIndex(0, &device);
if (result != NVML_SUCCESS) {
std::cerr << "Failed to get device handle: " << nvmlErrorString(result) << std::endl;
nvmlShutdown();
return -1.0;
}
// Получение данных о температуре GPU
unsigned int temperature;
result = nvmlDeviceGetTemperature(device, NVML_TEMPERATURE_GPU, &temperature);
double gpuTemperature = (result == NVML_SUCCESS) ? static_cast<double>(temperature) : -1.0;
nvmlShutdown();
return gpuTemperature;
}
int main() {
const std::wstring portName = L"\\\\.\\COM3"; // Укажите правильный COM-порт Arduino
HANDLE hSerial = CreateFileW(
portName.c_str(),
GENERIC_READ | GENERIC_WRITE,
0,
nullptr,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
nullptr
);
if (hSerial == INVALID_HANDLE_VALUE) {
std::cerr << "Failed to open serial port." << std::endl;
return 1;
}
DCB dcbSerialParams = { 0 };
dcbSerialParams.DCBlength = sizeof(dcbSerialParams);
if (!GetCommState(hSerial, &dcbSerialParams)) {
std::cerr << "Failed to get serial port parameters." << std::endl;
CloseHandle(hSerial);
return 1;
}
dcbSerialParams.BaudRate = CBR_9600; // Скорость передачи данных
dcbSerialParams.ByteSize = 8; // Биты данных
dcbSerialParams.Parity = NOPARITY; // Паритет
dcbSerialParams.StopBits = ONESTOPBIT; // Стоп-биты
if (!SetCommState(hSerial, &dcbSerialParams)) {
std::cerr << "Failed to set serial port parameters." << std::endl;
CloseHandle(hSerial);
return 1;
}
COMMTIMEOUTS timeouts = { 0 };
timeouts.ReadIntervalTimeout = 50;
timeouts.ReadTotalTimeoutConstant = 50;
timeouts.ReadTotalTimeoutMultiplier = 10;
timeouts.WriteTotalTimeoutConstant = 50;
timeouts.WriteTotalTimeoutMultiplier = 10;
if (!SetCommTimeouts(hSerial, &timeouts)) {
std::cerr << "Failed to set serial port timeouts." << std::endl;
CloseHandle(hSerial);
return 1;
}
while (true) {
double gpuload = getGpuLoad();
double gpuTemperature = getGpuTemperature();
std::string data = "GPU Temp: " + std::to_string(static_cast<int>(gpuload)) + " GPU Temp: " + std::to_string(static_cast<int>(gpuTemperature)) + "\n";
DWORD bytesWritten;
if (!WriteFile(hSerial, data.c_str(), data.size(), &bytesWritten, nullptr)) {
std::cerr << "Failed to write data to serial port." << std::endl;
break;
}
// Задержка между отправками данных (в миллисекундах)
Sleep(100); // 100 мс = 0.1 секунды
}
CloseHandle(hSerial);
return 0;
}
А, ну вот кроме того, что вам нужно будет вписать порт в который вы подключили ардуинку(88 строка)
Такс, код мы написали, теперь осталось все подключить
Правильное подключение всех компонентов вы можете найти в гугле, но я все же распишу(первое - на компоненте, второе - на ардуино):
1. LCD1602:
GND -> GND
VCC -> 5v
SJA -> A5
SCL -> A4
2.DHT11:
VCC -> 5v
DATA -> (любой D пин, например 12)
GND -> GND
3. Приемник(от лицевой стороны):
первая нога -> (любой D пин, например 11)
вторая нога(середина) - > GND
третья нога -> 5v
Вы можете подключать GND и 5v к одному проводу, все работает отлично.
Теперь нам нужно все загрузить на ардуинку
Сначала скачиваем программу - https://www.arduino.cc/ (сами там найдете)
Скачали? Молодцы! Теперь нам нужно все настроить и загрузить.
1. Открываем файлик pc.ino(ну если вы скачали)
2. Загружаем библиотеки. Скетч -> Подключить библиотеку -> Добавить .zip библиотеку
3. Добавляем все библиотеки
4. Ищем нужный порт и выбираем вашу ардуинку(у меня это nano)
5. Нажимаем на стрелочку загрузки
6. Profit!
GND - земля(минус)
5v - +
VCC - 3v/5v
DATA - передача данных по этому проводу
D пин - цифровой пин
A пин - аналоговый пин
5v - +
VCC - 3v/5v
DATA - передача данных по этому проводу
D пин - цифровой пин
A пин - аналоговый пин
Скачать все исходники + библиотеки:
927.2 KB file on MEGA
mega.nz
Ебать я от VT в ахуе, если боитесь, то сами компильте
Перед тем как запускать программу на пк закрой ардуино, она может занимать нужный порт
Проверь подключил ли ты библиотеки
Проверь Выбрал ли ты нужный порт и версию ардуино
Попробуй выбрать другой процессор ардуино - Инструменты -> Processor
Проверь подключил ли ты библиотеки
Проверь Выбрал ли ты нужный порт и версию ардуино
Попробуй выбрать другой процессор ардуино - Инструменты -> Processor
Идею спиздил у AlexGyver, код, подключение и все остальное - моё
Спасибо за то что прочитал Если хочешь поддержать меня, можешь написать в тг(ну хз, может денюжку подкинуть)