Серийный монитор в .txt: Как подружить Arduino и Python (без СМС и регистрации!)
Введение
Мир Arduino и DIY-электроники полон способов визуализации данных: яркие LCD-дисплеи, собственные веб-серверы, транслирующие показатели на весь мир (или хотя бы на ваш смартфон), и даже сообщения в Telegram или Discord. Кажется, что ваши данные могут оказаться где угодно, кроме... ну, простого текстового файла на вашем компьютере. Странно, правда?
Многие ищут пути, как сохранить логи с Serial Monitor, и часто натыкаются на сложные решения или платные программы. Но зачем платить больше (или вообще платить), когда у нас есть друг – могучий и гибкий Python? Именно об этом и поговорим.
Сегодня мы покажем простой, но эффективный способ записывать данные с Arduino прямо в текстовый файл на вашем ПК. Arduino будет старательно измерять и отправлять данные в последовательный порт, а хитрый Python-скрипт будет их ловить "на лету", добавлять временную метку и аккуратно складывать в .txt файл. В результате вы получите детальный лог событий, который можно просмотреть в любое время, даже когда интернет решил взять выходной.
Серийный монитор — как лучший друг Arduino: всегда готов выслушать. Но если не записать его мудрость, она растает, как код без loop()!
- Arduino Nano (1252 - код товара): Мозг нашей операции. Она будет собирать данные. (Выбирайте ту, что лежит ближе или просто нравится!).
- Датчик температуры и влажности DHT22 (1502 - код товара): Наш надежный информатор погоды в комнате. Можно взять и DHT11, если DHT22 ушел в отпуск.
- Компьютер с установленным Python: Наш аналитический центр и хранилище данных.
- USB-кабель: Мост между Arduino и компьютером.
- Провода для соединения: Кровеносная система нашего проекта.
Первый "последовательный порт" (RS-232) был стандартизирован еще в 1960 году! Он старше большинства технологий, которыми мы пользуемся ежедневно, но до сих пор остается актуальным для микроконтроллеров и промышленного оборудования. Настоящий ветеран!
Схема подключения

Gnd к Gnd, VCC датчика к +3,3В (если это модуль DHT22, то к +5В), и сигнальный провод к пину 2. Больше ничего не нужно. Далее переходим к самому интересному и познакомимся с Python.
Прежде чем тыкать провода наугад, вспомни о своем кошельке. Он любит, когда ты проверяешь схему дважды (или трижды!). Потому что каждая ошибка с полярностью может превратиться в незапланированное путешествие в магазин радиодеталей и грустное прощание с купюрами.
Скетч Arduino
Прежде чем приступить к программированию, убедитесь, что у вас установлена библиотека для работы с датчиком DHT.
1. Откройте Arduino IDE.
2. Перейдите в Sketch -> Include Library -> Manage Libraries...
3. В поиске введите "DHT sensor library" (обычно от Adafruit).
4. Найдите библиотеку "DHT sensor library by Adafruit" и нажмите "Install".
Теперь загрузите следующий скетч на Arduino:
#include#define DHT_PIN 2 #define DHT_TYPE DHT22 DHT dht(DHT_PIN, DHT_TYPE); unsigned long lastReadTime = 0; const unsigned long READ_INTERVAL = 2000; void setup() { Serial.begin(9600); dht.begin(); readAndPrintSensorData(); } void loop() { unsigned long currentTime = millis(); if (currentTime - lastReadTime >= READ_INTERVAL) { readAndPrintSensorData(); lastReadTime = currentTime; } } void readAndPrintSensorData() { float humidity = dht.readHumidity(); float temperature = dht.readTemperature(); if (isnan(humidity) || isnan(temperature)) { Serial.println("Ошибка"); } else { Serial.print("Темп: "); Serial.print(temperature); Serial.print(" °C, Влажность: "); Serial.print(humidity); Serial.println(" %"); } }
После загрузки зайдите в монитор порта и должны увидеть, что в монитор порта поступают значения температуры и влажности с интервалом 2 секунды.

Почему именно 9600 бод? Это классическая, стабильная скорость для простых задач. Можно использовать и более высокие скорости (115200 и т.д.), но тогда нужно изменить Serial.begin(9600) в Arduino и соответствующий параметр в Python-скрипте. Главное – чтобы скорость была одинаковой с обеих сторон.
Знакомимся с Python (Время великих дел!)
Если у вас еще нет Python, самое время это исправить!
1. Установка Python:
- Зайдите на официальный сайт: https://www.python.org/downloads/
- Скачайте последнюю стабильную версию для вашей операционной системы.
- Во время установки ОБЯЗАТЕЛЬНО поставьте галочку напротив "Add Python X.X to PATH". Это очень важно, чтобы вы могли запускать Python из командной строки. В других опциях также можно смело ставить галочки (особенно напротив "pip").
2. Установка библиотеки pyserial:
- Откройте командную строку (на Windows: Win+R, введите cmd, Enter. На MacOS/Linux: откройте Terminal).
- Проверим, установились ли Python и pip (менеджер пакетов Python):
python --version pip --version
Если команды выдают версии, все в порядке.
- Теперь установим библиотеку, которая позволит Python общаться через последовательный порт:
pip install pyserial
Вы должны увидеть сообщение об успешной установке.
pip install ... – это как заклинание для Python-разработчика. Произнес – и нужная функциональность появилась из ниоткуда (то есть из интернета). Главное – не ошибиться в названии заклинания, а то можно вызвать не ту библиотеку!
Создаем Python-скрипт для записи данных
Убедитесь, что монитор порта Arduino IDE закрыт! Это очень важно, поскольку только одна программа может использовать последовательный порт одновременно.
Теперь создайте текстовый файл с именем serial_logger.py и добавьте в него следующий код:
import serial import datetime port = 'COM3' baudrate = 9600 ser = serial.Serial(port, baudrate, timeout=1) def write_to_file(data): with open("arduino1.txt", "a") as file: timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") file.write(f"[{timestamp}] {data}\n") try: while True: if ser.in_waiting > 0: line = ser.readline().decode('utf-8').strip() if line: print(line) write_to_file(line) except KeyboardInterrupt: print("Программа завершена.") finally: ser.close()
И в строке port = 'COM3' нужно указать свой номер порта, такой же, как в Arduino IDE. Сохраните файл и закройте редактор.
Запускаем логгер
Теперь откройте командную строку (Win+R, введите cmd):

Перейдите в директорию, где вы сохранили файл serial_logger.py, используя команду cd. Например:
cd C:\Users\YourUser\Documents\ArduinoProjects
Запустите скрипт командой:
python serial_logger.py
Скрипт создаст файл arduino1.txt в текущей директории. Если все настроено правильно, вы увидите, что в консоли начнут появляться данные с Arduino, которые одновременно будут записываться в файл.
Открыв файл arduino1.txt в любом текстовом редакторе, вы увидите записи с временными метками:

И если закрыть этот файл и снова открыть, записи увеличатся, и вы ничего не пропустите.
Почему COM-порты так странно нумеруются (COM1, COM3, COM8...)? Это наследие старых систем, где физические порты имели фиксированные адреса. Современные USB-to-Serial преобразователи получают номера динамически, и иногда система "теряет" старые номера, назначая все более высокие. Поэтому не удивляйтесь, если ваша Arduino вдруг окажется на COM21!
Что-то пошло не так? (Скорая помощь)
Ошибка "Serial Error" или "Could not open port COMx":
- Проверьте, правильно ли указан номер COM-порта в Python-скрипте
- Убедитесь, что Arduino подключена к компьютеру и определяется системой
- Самое главное: проверьте, закрыт ли Serial Monitor в Arduino IDE или любая другая программа, которая может использовать этот порт
- Попробуйте отключить и снова подключить Arduino к USB
- Перезагрузите компьютер
В консоли Python ничего не появляется:
- Проверьте, одинакова ли скорость порта (baudrate в Python и Serial.begin() в Arduino)
- Проверьте качество USB-кабеля и соединений на макетной плате
- Убедитесь, что Arduino отправляет данные
Команда python или pip не найдена:
- Вы забыли поставить галочку "Add Python to PATH" во время установки Python
- Переустановите Python, не забыв про эту галочку
На этом все! В монитор порта можно вывести что угодно из Arduino IDE, а это дает возможность сохранять в текстовый файл что угодно. +1 к выводу информации.
© 2025 Мій Проект. Автор: Ardu_miha. Использование материалов разрешено только с указанием источника.
Написать комментарий