Каталог товаров
Клиенту
Тема сайта:
+38 (066) 305-77-25
Наш адрес
Харьков, времено - только доставка Новой Почтой, УкрПочтой, МистЕкспрес, ROZETKA Delivery
Телефоны:
Время работы
  • Пн-Пт: с 9 до 18
  • Сб.: с 10 до 17
  • Вс: с 11 до 16
E-mail
Мы в соцсетях
Перейти в контакты
0 0
Каталог
Главная
Закладки
0
Сравнить
0
Контакты

Serial Monitor to .txt

Чи була корисною ця стаття?
Serial Monitor to .txt

Серийный монитор в .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 году! Он старше большинства технологий, которыми мы пользуемся ежедневно, но до сих пор остается актуальным для микроконтроллеров и промышленного оборудования. Настоящий ветеран!

Схема подключения

Схема подключения Arduino с DHT22

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 к выводу информации.

Вместе с myproject.com.ua

Автор: Ardu_miha

© 2025 Мій Проект. Автор: Ardu_miha. Использование материалов разрешено только с указанием источника.