Введение
Когда я впервые начал работать с ESP32, я потратил три вечера на то, чтобы заставить датчик BME280 отдавать данные по I2C. Проблема оказалась в неправильном адресе — но я перепробовал кучу библиотек, пока не догадался проверить адрес сканером. Сейчас такие задачи решаются за минуты, если правильно общаться с ChatGPT. В этой подборке — 11 промтов, которые я сам использую для Arduino, ESP32, Raspberry Pi и умного дома. Они не заменят инженера, но снимут рутину: подбор компонентов, генерацию скетчей, отладку шин, оптимизацию энергопотребления и интеграцию с Home Assistant. Каждый промт проверен на реальных проектах, а примеры кода можно сразу копировать в IDE.
1. Подбор компонентов под задачу
Проблема: Нужно собрать метеостанцию с ESP32, но непонятно, какой датчик температуры и влажности выбрать — DHT22, BME280 или SHT31. Каждый имеет свои интерфейсы, точность и цену.
Промт:
Ты — инженер по электронике. Помоги подобрать компоненты для проекта: [краткое описание]. Учти бюджет, точность, интерфейсы (I2C, SPI, UART), напряжение питания и доступность на рынке. Предложи 3 варианта с плюсами и минусами. Для каждого укажи ссылку на датасет.
Пример использования:
Ты — инженер по электронике. Помоги подобрать компоненты для проекта: метеостанция на ESP32 с выводом в Home Assistant. Нужны температура, влажность, давление. Бюджет до 1500 руб. Питание от USB.
Результат: ChatGPT предложил BME280 (I2C, 3.3 В, точность ±0.5°C), SHT31 (высокая точность, но дороже) и DHT22 (дешёвый, но медленный). Я выбрал BME280 — и не пожалел.
2. Генерация скетча для Arduino с объяснением
Проблема: Нужно написать скетч для управления шаговым двигателем через драйвер A4988, но нет времени разбираться с библиотеками.
Промт:
Напиши скетч для Arduino [модель] на C++. Задача: [описание]. Используй библиотеку [название, если есть]. Добавь комментарии к каждой строке. Объясни логику работы и возможные проблемы.
Пример:
Напиши скетч для Arduino Uno. Задача: управлять шаговым двигателем NEMA17 через драйвер A4988. Двигатель должен делать 200 шагов по часовой стрелке, затем 200 против. Используй библиотеку AccelStepper. Добавь комментарии.
Код (сокращённо):
#include <AccelStepper.h>
AccelStepper stepper(1, 9, 8); // STEP=9, DIR=8
void setup() {
stepper.setMaxSpeed(1000);
stepper.setAcceleration(500);
}
void loop() {
stepper.moveTo(200);
stepper.runToPosition();
delay(500);
stepper.moveTo(0);
stepper.runToPosition();
delay(500);
}
ChatGPT сгенерировал рабочий код за 10 секунд.
3. Отладка I2C: сканер и диагностика
Проблема: ESP32 не видит датчик по I2C. Непонятно, проблема в проводке, адресе или питании.
Промт:
Напиши скетч для сканирования I2C-шин на [платформа]. Выведи адреса всех найденных устройств в Serial. Добавь обработку ошибок. Объясни, как интерпретировать результаты.
Пример:
Напиши скетч для сканирования I2C на ESP32. Используй стандартные пины SDA=21, SCL=22. Выведи адреса в Hex.
Код:
#include <Wire.h>
void setup() {
Wire.begin(21, 22);
Serial.begin(115200);
Serial.println("Scanning...");
for (byte addr = 1; addr < 127; addr++) {
Wire.beginTransmission(addr);
if (Wire.endTransmission() == 0) {
Serial.print("Found: 0x");
Serial.println(addr, HEX);
}
}
}
void loop() {}
Запустив сканер, я обнаружил, что BME280 имеет адрес 0x76, а не 0x77, как я думал. Проблема решена.
4. Оптимизация энергопотребления ESP32
Проблема: Устройство на ESP32 работает от батареи 18650 всего 2 дня. Нужно продлить жизнь.
Промт:
Предложи способы снижения энергопотребления для [платформа] в режиме [описание]. Укажи конкретные настройки: deep sleep, отключение Wi-Fi, понижение частоты. Приведи пример кода с deep sleep и пробуждением по таймеру.
Пример:
Предложи способы снижения энергопотребления для ESP32 в проекте датчика температуры, отправляющего данные раз в 10 минут по Wi-Fi. Нужно, чтобы батарея 18650 держала месяц.
Ответ: ChatGPT предложил использовать deep sleep с пробуждением по таймеру, отключать Wi-Fi перед сном, использовать esp_sleep_enable_timer_wakeup(). Пример кода:
#define uS_TO_S_FACTOR 1000000
#define TIME_TO_SLEEP 600
void setup() {
esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
// измерение и отправка
esp_deep_sleep_start();
}
Потребление упало с 80 мА до 10 мкА в сне — батарея теперь держит больше месяца.
5. Настройка MQTT для умного дома
Проблема: Нужно подключить ESP32 к Home Assistant через MQTT, но не хочется разбираться с форматами топиков.
Промт:
Напиши код для [платформа] для подключения к MQTT-брокеру и отправки данных [тип данных] в Home Assistant. Используй библиотеку PubSubClient. Укажи топики для discovery и состояния. Добавь комментарии.
Пример:
Напиши код для ESP32 для подключения к MQTT и отправки температуры в Home Assistant. Используй PubSubClient. Топик для discovery: homeassistant/sensor/esp32_temp/config. Топик состояния: homeassistant/sensor/esp32_temp/state.
Код (фрагмент):
client.publish("homeassistant/sensor/esp32_temp/config", "{\"name\":\"ESP32 Temp\",\"state_topic\":\"homeassistant/sensor/esp32_temp/state\",\"unit_of_measurement\":\"°C\"}");
client.publish("homeassistant/sensor/esp32_temp/state", String(temp).c_str());
Home Assistant автоматически обнаружил сенсор.
6. Диагностика по логам Serial Monitor
Проблема: ESP32 перезагружается каждые несколько минут. В Serial Monitor куча мусора.
Промт:
Проанализируй лог из Serial Monitor: [вставить лог]. Найди причину перезагрузки. Предложи шаги для устранения.
Пример:
Проанализируй лог: Guru Meditation Error: Core 1 panic'ed (LoadProhibited). Exception was unhandled. ...
Ответ: ChatGPT объяснил, что ошибка LoadProhibited часто возникает при разыменовании нулевого указателя. Рекомендовал проверить код на предмет обращения к неинициализированным объектам. Я нашёл баг: использовал String без проверки на null.
7. Генерация документации и комментариев
Проблема: Нужно задокументировать скетч для команды, но лень писать комментарии.
Промт:
Добавь комментарии к коду ниже. Объясни назначение каждой функции и переменной. Оформи в стиле Doxygen.
Пример: Вставил скетч на 200 строк — ChatGPT добавил комментарии и сгенерировал HTML-документацию.
8. Конвертация между платформами
Проблема: Код написан для Arduino Uno, но нужно портировать на ESP32.
Промт:
Порти код с [платформа1] на [платформа2]. Учти различия в напряжении, пинах и библиотеках. Предложи изменения.
Пример: Перенёс скетч с Arduino Uno на ESP32. ChatGPT заменил analogRead на analogRead с учётом 12-битного АЦП, указал другие пины I2C.
9. Интеграция с Raspberry Pi и Python
Проблема: Нужно собрать данные с ESP32 на Raspberry Pi и сохранить в базу.
Промт:
Напиши Python-скрипт для Raspberry Pi, который читает данные с [устройство] по [протокол] и сохраняет в [база данных]. Используй библиотеки [названия].
Пример: Скрипт для чтения MQTT и записи в SQLite. ChatGPT предложил использовать paho-mqtt и sqlite3.
10. Отладка SPI-шины
Проблема: Дисплей ST7735 не работает по SPI.
Промт:
Напиши скетч для проверки SPI-шины на [платформа]. Выведи данные на дисплей [модель]. Укажи распиновку.
Пример: ChatGPT дал код инициализации ST7735 с правильными пинами CS, DC, RST. Проблема была в неправильном DC.
11. Автоматизация рутины: генерация кода для кнопок и меню
Проблема: Нужно создать меню на LCD с управлением энкодером.
Промт:
Сгенерируй код для меню на LCD [модель] с управлением энкодером. Пункты: [список]. Используй библиотеку [название].
Пример: Меню для настройки Wi-Fi и MQTT. ChatGPT предложил использовать библиотеку LiquidCrystal_I2C и RotaryEncoder.
Заключение
Эти 11 промтов покрывают 90% рутинных задач при работе с микроконтроллерами. Главное — давать ChatGPT конкретные входные данные: модель платы, библиотеки, ограничения. Тогда он становится полноценным вторым инженером. Попробуйте применить их в следующем проекте — и вы удивитесь, сколько времени освободится для творчества. А если у вас есть свои любимые промты, делитесь в комментариях.
Комментарии