Каталог товарів
Клієнту
Тема сайту:
+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

Serial Monitor в .txt: Як Подружити Arduino та Python (Без СМС та Реєстрації!)

Вступ

Світ Arduino та DIY-електроніки сповнений способів візуалізації даних: яскраві LCD-дисплеї, власні веб-сервери, що транслюють показники на весь світ (або хоча б на ваш смартфон), і навіть повідомлення у Telegram чи Discord. Здається, що ваші дані можуть опинитися будь-де, крім... ну, простого текстового файлу на вашому комп'ютері. Дивно, правда?

Багато хто шукає шляхи, як зберегти логи з Serial Monitor, і часто натрапляє на складні рішення або платні програми. Але навіщо платити більше (або взагалі платити), коли у нас є друг – могутній та гнучкий Python? Саме про це й поговоримо.

Сьогодні ми покажемо простий, але ефективний спосіб записувати дані з Arduino прямо у текстовий файл на вашому ПК. Arduino буде старанно вимірювати та надсилати дані в послідовний порт, а хитрий Python-скрипт буде їх ловити "на льоту", додавати часову мітку і акуратно складати в .txt файл. У результаті ви отримаєте детальний лог подій, який можна переглянути будь-коли, навіть коли інтернет вирішив взяти вихідний.

Serial Monitor — як найкращий друг 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 <DHT.h>
#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. Використання матеріалів дозволено лише з посиланням на джерело.