Arduino.ru
Доброго времени суток форумчане, в этой статье я расскажу как управлять ардуино с помощью python.
— Как происходит управление ардуино с помощью python?
На самом деле мы просто отправляем команды на наш последовательный порт, ардуино получает информацию и выполняет команду.
— Для чего это надо?
Вы можете управлять пинами ардуино и получать информацию с датчиков. Можно сделать бота для какой-то социальной сети и через бота вы сможете управлять ардуино. Есть и другие варианты применения, например создание графиков из данных датчика, запись данных в файл, автоматическое включение света когда кто-то прошёл перед веб камерой компьютера или ноутбука, так же можно использовать ардуино с кнопками как доп. клавиатура. Вообщем применений много, но главное имеет идею.
Итак есть три более распространённых пайтон модулей, это: pyfirmata, pyserial, ArduinoPyApi. На самом деле все эти модули почти похожи, но есть различия в написании кода и в способе работы.
Давайте рассмотрим как мы можем мигнуть светодиодом разными способами.
Для использования нам надо скачать библиотеку в Arduino ide firmata и pyfirmata для пайтона: pip install pyfirmata
from pyfirmata import util, Arduino
Arduino Python api
Нам надо загрузить скетч в ардуино, скачиваем репозиторий (там есть файл для ардуино и есть примеры на пайтон) https://github.com/mkals/Arduino-Python3-Command-API
from Arduino import Arduino
board = Arduino() # plugged in via USB, serial com at rate 115200
С этим модулем всё по-другому, мы сначала пишем код в Arduino ide, а потом просто отправляем какой-то текст на порт, а ардуино проверяет этот текст и выполняет какие-то действия. Скачиваем вот так: pip install pyserial
while ( Serial .available())
data = Serial .read();
digitalWrite (LED, HIGH);
else if (data == ‘0’)
digitalWrite (LED, LOW);
import serial #for Serial communication
import time #for delay functions
arduino.write(‘1’) #send 1
arduino.write(‘0’) #send 0
Все подробности об установке и использовании каждого модуля тут
- Войдите на сайт для отправки комментариев
Arduino, Raspberry Pi
Arduino — аппаратная платформа для разработки устройств, с платой ввода/вывода и простой средой разработки на Processing/Wiring. Базируется на МК Atmel AVR (ATmega), большинство плат программируются через USB. Платы Arduino позволяют своими руками создавать различные устройства, являются хорошим инструментом для начинающих и обучения МК. Большинство устройств можно собрать даже не прибегая к помощи паяльника!
В данном разделе вы найдете различные интересные схемы и проекты для платформы Arduino, их клонов Freeduino, Seeeduino, а также плат Raspberry Pi, Python и др. Не забудьте посетить форум по Arduino
- Недорогой тепловизор своими руками
- Солнечный трекер
- Система распознавания и слежения за лицами
- Интервалометр с LCD для Sony NEX
- Поворотная вебкамера контролируемая Arduino
- Ethernet камера на базе Arduino
- Простая камера для замедленной съемки (timelapse) с использованием Raspberry Pi
- Модернизация поворотного стола для 3D-фото
- Измеритель ёмкости аккумуляторов (Li-Ion/NiMH/NiCD/Pb)
- Простой тестер емкости Li-ion аккумуляторов
- Измерение емкости конденсаторов с помощью Arduino
- Измеритель индуктивности на базе Arduino
- Намоточный станок на Arduino
- Намоточный станок на Arduino версия 2.0
- Счетчик расхода воды
- Тахометр на Arduino
- Измерение тока потребления устройств при помощи токовых датчиков серии ZXCT
- Мониторинг потребляемой электроэнергии в реальном времени при помощи Arduino и LabView
- Дисплей для отображения частоты сети электропитания
- Цифровой вольтметр на Arduino с подключением к ПК через последовательный порт
- 4-канальный вольтметр с ЖК-индикатором на базе Arduino
- Парктроник своими руками
- Велосипедный спидометр на Arduino
- Как СМСнуть обогревателю?
- Запуск и сборка GSM модуля M590E
- GPS-трекер для авто с отправкой данных на сервер с использованием GSM/GPRS шилда
- Ошейник для кота с GPS навигацией на базе микроконтроллера TinyDuino
- Портативный компас TinyCompass
- Текстовой дисплей для удаленной связи с офисом на базе Arduino Uno
- Умный магнит для холодильника на базе Arduino
- Устройство мониторинга сейсмоактивности
- Термобарометр с функцией UW-метра на ИН-13
- Барометр с расширенными функциями
- Барометр на Arduino
- Барометр своими руками
- Бесконтактный контроль температуры при RFID-доступе сотрудников с отправкой данных в облако LORAWAN
- ИК-термометр своими руками
- Инфракрасный датчик движения (PIR сенсор)
- Автоматическое освещение AtMega328 (PIR)
- Автономный светодиодный прожектор на Arduino
- Сложно о простом: цифровой термометр
- Термореле на NTC резисторе
- Arduino, датчик движения и релейный модуль
- Самодельное противоугонное устройство на Ардуино и датчике отпечатков пальцев
- GSM охранная система для дома на базе Arduino
- Радиочастотное (RFID) управление доступом с помощью Arduino UNO и модуля EM-18
- Электронная система учета посетителей
- Декодер и передатчик азбуки Морзе на Arduino
- Прием сигнала от нескольких передатчиков 433МГц на Arduino
- Радио на Arduino
- Аудиоплеер на Arduino
- Умный дом с Arduino
- Cервер домашней метеостанции на Arduino + Виджет на Android для вывода данных
- Cервер домашней метеостанции на Arduino + Виджет на Android. Добавление датчика BMP085
- Cервер домашней метеостанции на Arduino — виджет для OS X
- Метеостанция на Arduino и MR3020 для народного мониторинга
- Считываем показания температурного датчика DS18B20
- Метеостанция на Arduino с беспроводным датчиком температуры
- Arduino: Делаем самостоятельно датчик температуры
- Метеостанция + построение графика + C#
- IoT сканер штрих-кода с отправкой результатов в облако
- Отправка данных с IoT-устройства по сети LORAWAN в сервис The Things Network
- Мониторинг данных коронавируса Covid-19
- Климатический монитор Смотрителя Убежища в стилe Fallout на ESP8266
- Датчик температуры и влажности с использованием модуля Wi-Fi ESP8266
- WiFi ESP8266. Nodemcu Lua для ESP-01. Управление нагрузками по web интерфейсу
- Установка цвета RGB светодиодной ленты с помощью клавиатуры Capacitive Touch Disk Pad
- NodeMCU — быстрый старт для любителей Arduino
- WeMos D1R2
- Подключение Arduino к Интернету: настройка режима клиент-сервер, обработка GET и POST запросов
- Интернет — советчик
- Отправка данных с Arduino на сервер (ENC28J60)
- Детектор загрязнения окружающего воздуха
- Подключения модуля датчика газа MQ-2 и Arduino
- Резистивный датчик давления FSR402
- DDS-генератор синусоидального сигнала
- Генератор сигналов на Arduino
- LCD осциллограф на Arduino
- Подключаем к Arduino модуль Bluetooth
- Передача данных по Bluetooth между Android и Arduino
- Управление лампами через смартфон
- Система управления приборами 220В со смартфона
- Интернет вещей с RemoteXY
- Интернет вещей с RemoteXY: конфигурация подключения.
- Интернет вещей с RemoteXY: работа с он-лайн редактором и элементы оформления интерфейса
- Интернет вещей с RemoteXY: элементы управления, часть 2
- Интернет вещей с RemoteXY: элементы индикации
- Интернет вещей с RemoteXY: элементы управления
- Умная розетка на примере чайника
- Arduino как HID устройство
- Передача MIDI данных в компьютер
- USB MIDI контроллер на Arduino
- Емкостная сенсорная Midi клавиатура
- Мини синтезатор на Arduino с использованием зуммера
- Простые часы на газоразрядных индикаторах, оптронах и Arduino
- Простые многофункциональные часы-барометр-термометр на LCD-дисплее на контроллере PCF8576
- Часы на Arduino с использованием стандартного индикатора
- Настройка модуля часов реального времени RTC для Arduino
- Часы на ардуино из дисплея покупателя (VFD)
- Часы из дисплея покупателя (VFD) v2
- Часы на Ардуино
- Светодиодные часы на Ардуино
- O-Clock – простые часы-будильник на Arduino и матричном индикаторе 8х32
- Будильник с обратным отсчетом на Arduino с дисплеем Nokia 5110
- Универсальный 8 канальный таймер на Arduino
- OLED i2c дисплей 128х64 пикселя
- Цветной OLED дисплей 96х64 пикселя
- Arduino и динамические индикаторы
- Ambilight своими руками
- Динамическая подсветка для телевизора
- RGB светодиодная подсветка для пианино
- JoyLED — нестандартное управление RGB-светодиодом
- Управление светодиодной лентой с помощью ТВ-пульта и Ардуино
- Светодиодный диско-пол на Arduino
- Игровая ТВ-приставка на Arduino. Часть 1
- Игровая ТВ-приставка на Arduino. Часть 2
- Тетрис на базе Arduino и двухцветных светодиодных матриц
- Контроллер кнопок для игры Что? Где? Когда?
- «Умная гантель»
- ГТО по-современному
- Логическая игра Переправа на Arduino
- Игрушка на Arduino: Саймон сказал
- Игра Кости на Arduino
- Необычное управление светодиодными (и не только) матрицами на Arduino и 74HC585
- Новогоднее волшебство или магическая коробочка на Arduino
- Спортивный счётчик на Arduino
- Датчик проходов на arduino
- Дигитайзер на arduino uno
- Управление камерой, приборами и данные с датчиков на экране телевизора
- TV-выход на Arduino
- VGA на Arduino
- Необычный кодовый замок на Arduino
- Кодовый замок из ардуино
- Сейф, который распознает цвета
- Brute Force BIOS’а ПК при помощи Arduino
- Автополив для комнатных растений на Arduino
- Автоматический контроллер температуры и влажности для домашних питомцев на базе Arduino
- SMART-GARAGE
- Сигнализатор замерзших труб на Arduino
- Простейший звонок с двумя мелодиями
- Поющее растение на базе Arduino
- Вращающаяся платформа с регулируемой RGB подсветкой и с управлением по Bluetooth
- Проигрывание WAV-файлов при помощи Arduino
- Аудио спектроанализатор на RGB-ленте WS2812
- Анализатор спектра звука
- 3x3x3 LED куб
- Светодиодный куб 4х4х4
- Светодиодный куб 5х5х5
- LED Cube 8x8x8 на Arduino с RTC
- Контроль яркости LED — куба
- Голографические часы на Arduino
- Простой POV дисплей на базе Arduino
- Светодиодная матрица 24×6
- 3D интерфейс ввода на Arduino
- Сенсорная панель управления
- Makey Makey управление новогодней RGB-гирляндой
- Apple Remote Shield на Arduino
- Arduino лазертаг
- Управление iRobot Create с помощью беспроводного геймпада через Arduino
- Разработка расширения Arduino для мобильных роботов
- Отправка данных с Arduino на WEB-сервер GET-запросом
- Управляем любой ДУ техникой дома по ИК с вебстраницы
- Розетка, активируемая звуком
- Голосовое управление радиорозетками UNIEL
- RGB-ночник управляемый руками
- LANp – лампа RGB из частей сканера контролируемая по сети
- Световой диммер управляемый Arduino
- AC диммер на Arduino
- Измерение освещенности на Arduino и вывод на дисплей Nokia 5110
- Контроллер день-ночь на базе Arduino
- Контроллер батарейного питания для arduino
- Блок питания для Arduino из ATX
- ATX блок питания управляемый Arduino
- Однофазный частотный преобразователь на Arduino
- Arduino своими руками с USB портом
- Nanino — самодельная Arduino
- Делаем сами Arduino Uno Mini
- EGYDuino – клон Arduino своими руками
- Самодельная Ардуино-совместимая отладочная плата на бюджетном МК ATmega88/168/328
- Быстрый старт с Ардуино — отладочная плата Arduino UNO R3
- Arduino Pro Mini и UniProf
- Отладочная плата с микроконтроллером ATmega328
- Shell-оболочка Bitlash на Arduino
- Разрабатываем интерпретатор brainfuck на Arduino
- Запрограммируйте Arduino с помощью Android устройства!
- Весы для улья своими руками
- Автоматическая кормушка для аквариума
- Подключение монетоприемника к Arduino
- Вендинговый разменный автомат на Arduino
- Подключение PS/2 клавиатуры
- Мини USB клавиатура на микроконтроллере
- Пробуждение ПК по сети на Arduino и ENC28J60
- Запись и чтение на SD-карту
- Подключение I2C EEPROM к Arduino
Уроки по Ардуино
- Arduino IDE — введение (видеоурок)
- Arduino UNO урок 1 — Управление светодиодом
- Arduino UNO урок 2 — Управление сервоприводом
- Arduino UNO урок 3 — Тайминг
- Arduino UNO урок 4 — Бегущий огонь
- Arduino UNO урок 5 — Fade
- Arduino UNO урок 6 — Энкодер
- Arduino UNO урок 7 — Пьезоизлучатель
- Arduino UNO урок 8 — Ночник
- Arduino UNO урок 9 — Управление мощной нагрузкой
- Arduino UNO урок 10 — LCD
- Arduino UNO урок 11 — Serial LCD
- Arduino UNO урок 12 — Джойстик
- Arduino UNO урок 13 — Подключаем драйвер двигателя L298N
- Arduino UNO урок 14 — Подключаем цифровой компас HMC5883L
- Управление биполярным шаговым двигателем без использования драйвера
- Arduino Uno. Подключение ИК-приемника
- Подключение семисегментного индикатора (1 разряд) к Arduino по SPI
- Сдвиговый регистр 74HC595
- Подключение LED матрицы 8*8 к Arduino через сдвиговые регистры
- Объект String в Arduino и команды через последовательный порт
- Контроль положения контактов 3-х позиционного переключателя с помощью Ардуино
- Текстовое меню на Arduino для дисплея 20х4
- Arduino: спасибо и прощай
- Android и Arduino. Введение в ADK
- Android и Arduino. Программное обеспечение
- Android и Arduino. Привет Arduino из Android
- Android и Arduino. Привет Android из Arduino
- Android и Arduino. Двухсторонний обмен данными
- Курс молодого бойца мира Arduino
- Курс Arduino — Датчики
- Курс Arduino — Логика
- Курс Arduino — Serial Monitor
- Курс Arduino — Отображение данных на LCD
- Курс Arduino — Звук
- Курс Arduino — Моторы
- Курс Arduino — Микросхемы
- Курс Arduino — Время и Random
- Курс Arduino — Прерывания, создание функций, советы
- Курс Arduino — Модули
- Курс Arduino — Дальномеры
- Курс Arduino — Processing
- Система контроля параметров комнатных растений
- Логгер температуры и относительной влажности на chipKIT Uno32
Raspberry Pi и другие платы
- Raspberry Pi 4 и Intel Neural Compute Stick 2
- Использование GPIO выводов Raspberry Pi
- Элементы умного дома z-wave на Razberry и Z-Uno. Часть 1
- Элементы умного дома z-wave на Razberry и Z-Uno. Часть 2
- Web-управление Raspberry Pi GPIO
- Raspberry Pi в качестве FM-передатчика
- FAQ по Raspberry Pi
- Raspberry Pi, Raspbian, XBMC и 7 дюймовый сенсорный экран eGalax
- Hi-Fi-плеер на Raspberry PI с использованием ПО RuneAudio
- Двойной удар: AirPlay-Pi и новая жизнь старого радио
- FM радиовещательная станция на Raspberry Pi
- Медиацентр на Raspberry Pi 2
- Табло котировок Forex в режиме реального времени на RGB-матрице 32×64
- Светодиодное табло, управляемое миникомпьютером Raspberry Pi и WiFi-адаптером
- Светодиодное табло размером 128×32 пикселей, управляемое микрокомпьютером Raspberry Pi
- Портативный лэптоп на базе Raspberry Pi
- Плоттер на Raspberry Pi с использованием компонентов от CD-ROM
- Подключение приставочных джойстиков NES/Dendy к Raspberry Pi
- Сундучок на базе Raspberry Pi, который распознает ваше лицо
- Музыкально-световой клавесин на Intel Galileo
- Слайдер для камеры на Arduino
- Фотостудия для кукол Барби
- Использование HMI TFT-дисплея STONE и ESP32 для управления массажным креслом
- Управление сервоприводом с помощью HMI LCD экрана и STM32
- Мини-компьютер M5StickC на модуле ESP32-PICO
- Плата разработчика MAIXDUINO для приложений AI + IoT
- Знакомство с платой MicroPython
- 10 миниатюрных макетных плат для решения любых задач
- FEZ и .NET Micro Framework
- Particle Photon
- DFRobot Curie Nano
- Latte Panda
- Обзор FEZ Panda II
- Netduino: Взаимодействие с символьным ЖК-дисплеем
1999-2023 Сайт-ПАЯЛЬНИК ‘cxem.net’
При использовании материалов сайта, обязательна
ссылка на сайт ПАЯЛЬНИК и первоисточник
Python & Arduino. Просто, быстро и красиво
Очень часто, у начинающих и не только разработчиков возникают вопросы. Как управлять с Arduino с компьютера? А если компьютер — не Raspberry Pi, а обычный домашний компьютер? А если не хочется мучится с ESP8266 и управлять через веб интерфейс? Неужели надо каждый раз открывать Arduino IDE и отправлять команды через Монитор порта? Именно о том, как создать своё собственное приложение с графическим интерфейсом для управления Arduino я сейчас и расскажу.
Оборудование
Недавно я заполучил очень интересную плату: Arduino SS Micro. Эта плата, внешне напоминающая Digispark Attiny 85, тем не менее является китайской версией Arduino Micro, с выведенным выходом USB.
Подробно рассказывать о ней я не буду, ведь это уже сделал пользователь YouTube с ником iomoio, и его обзор можно посмотреть здесь.
Как мне кажется — это довольно крутое и удобное устройство для небольших домашних проектов, ведь у проводов есть супер-свойство: теряться в самый неподходящий момент.
В качестве управляющего компьютера был использован MacBook Pro с операционной системой macOS Mojave, но не надо закрывать статью, если вы используете Windows или Linux — всё описанное в статье будет работать без изменений на любой операционной системе.
Скетч для Arduino
В качестве примера будет использоваться скетч, включающий и выключающий светодиод, по команде из Serial-порта.
Светодиод в Arduino SS Micro висит на порте SS, и поэтому он автоматически выключается. Не смотря на это, стандартный пример Blink — мигающий светодиод работает.
char inChar; #define LED_PIN SS void setup() < pinMode(LED_PIN, OUTPUT); // Инициализация светодиода Serial.begin(115200); // Инициализация Serial - порта >void loop() < if (Serial.available() >0) < inChar = Serial.read(); if (inChar=='e') // e - Enable - включить < digitalWrite(LED_PIN,HIGH); >> else if (inChar=='d') // d - Disable - выключить < digitalWrite(LED_PIN,LOW); >else if (inChar=='b') // b - Blink - выключить режим мигания < while (true)< digitalWrite(LED_PIN,HIGH); delay(1000); digitalWrite(LED_PIN,LOW); delay(1000); >> >
Если вы будете использовать другую Arduino — не забудьте сменить пин светодиода.
Код для компьютера
Одним из достоинств Python, кроме его кроссплатформенности — наличие гигантского числа библиотек. Нам понадобятся:
- PySerial — библиотека для работы с Serial-портом
- PyQT5 — библиотека для создания графического интерфейса
Установка
Для установки, воспользуемся встроенным менеджером пакетов — pip.
pip install pyserial pyqt5
Для удобства создания GUI можно установить программу QTDesigner.
Интерфейс
Поскольку данная программа предназначена скорее, для демонстрации возможностей, пользователь может выбрать порт из предложенных, а так же скорость, с которой будет происходить общение.
Исходный код
Вся работа с устройством происходит благодаря библиотеке PySerial. Но есть несколько нюансов. Например, как узнать, в какой из портов подключено устройство?
На всем прекрасно известном сайте stackoverflow, пользователь с ником Thomas предложил уже готовое решение, которое я и использовал.
def serial_ports(): """ Lists serial port names :raises EnvironmentError: On unsupported or unknown platforms :returns: A list of the serial ports available on the system """ if sys.platform.startswith('win'): ports = ['COM%s' % (i + 1) for i in range(256)] elif sys.platform.startswith('linux') or sys.platform.startswith('cygwin'): # this excludes your current terminal "/dev/tty" ports = glob.glob('/dev/tty[A-Za-z]*') elif sys.platform.startswith('darwin'): ports = glob.glob('/dev/tty.*') else: raise EnvironmentError('Unsupported platform') result = [] for port in ports: try: s = serial.Serial(port) s.close() result.append(port) except (OSError, serial.SerialException): pass return result
Кроме этого необходимо хранить список доступных скоростей:
speeds = ['1200','2400', '4800', '9600', '19200', '38400', '57600', '115200']
А теперь соберём вместе дизайн(созданный в QtDesigner и сконвертированный с помощью утилиты pyuic5 в .py файл), функции для сканирования портов и основной код программы.
Основной класс, содержащий в себе всю логику программы
class LedApp(QtWidgets.QMainWindow, design.Ui_Form): def __init__(self): super().__init__() self.setupUi(self) self.Port.addItems(serial_ports()) self.Speed.addItems(speeds) self.realport = None self.ConnectButton.clicked.connect(self.connect) self.EnableBtn.clicked.connect(self.send) def connect(self): try: self.realport = serial.Serial(self.Port.currentText(),int(self.Speed.currentText())) self.ConnectButton.setStyleSheet("background-color: green") self.ConnectButton.setText('Подключено') except Exception as e: print(e) def send(self): if self.realport: self.realport.write(b'b')
Переменные self.Port и self.Speed — это выпадающие списки, содержащие в себе значения доступных портов и скоростей.
При нажатии на кнопку self.ConnectButton вызывается функция connect, в которой производится попытка подключения к заданному порту с заданной скоростью. Если подключение успешно, то кнопка окрашивается в зелёный цвет, и меняется надпись.
Функция send отправляет в наш порт байтовую строку — заставляющую включить режим мигания.
Таким образом можно управлять различными устройствами, подключёнными к USB.
Данная статья является вводной и обзорной, более полную информацию можно найти например тут:
- PySerial
- PyQT
- Serial в Arduino
Arduino и Python: Связь через Serial порт
Всем привет! Arduino и Python — два мощных инструмента, которые можно объединить через Serial для непосредственного взаимодействия плат с компьютером. Сегодня мы рассмотрим, как настроить связь между Arduino и программой на Python, а так-же создадим несколько практических примеров.
Введение
Serial порт – это интерфейс для передачи данных между компьютером и другими устройствами. Это удобный способ обмена информацией. Мы можем отправлять данные с компьютера на Arduino и наоборот. Но что, если нам нужно автоматизировать эту процедуру? На Arduino можно написать обработчики команд, а с компьютера обработчиком выступит Python-скрипт.
Начнем с настроек:
- Подключите Arduino к компьютеру.
- Установите библиотеку pyserial для работы с Serial портом:
Это можно сделать через менеджер пакетов pip:
pip install pyserial
- Определите порт, к которому подключено Arduino:
Для этого используйте следующий Python-скрипт:
import serial.tools.list_ports # Получаем список доступных Serial портов ports = list(serial.tools.list_ports.comports()) # Выводим информацию о каждом порте for port in ports: print(f"Порт: ") print(f"Описание: ") print(f"Производитель: \n")
После запуска, программа выдаст порт, к которому подключено Arduino.
Практические примеры:
Пример 1: Отправка и прием данных
Сначала попробуем обменяться данными. Для этого используем следующий скрипт:
import serial # Открываем Serial порт ('COMX' замените на имя вашего порта) ser = serial.Serial('COMX', 9600) # Отправляем строку "Hello, Arduino!" на Arduino, предварительно преобразовав ее в байты ser.write(b'Hello, Arduino!') # Читаем ответ от Arduino через Serial порт response = ser.readline() # Декодируем ответ из байтов в строку с использованием UTF-8 decoded_response = response.decode('utf-8') # Закрываем порт ser.close() print(decoded_response)
Для Arduino нужен ответный скетч:
void setup() < // Начинаем работу с Serial портом на скорости 9600 бит/с Serial.begin(9600); >void loop() < // Проверяем, есть ли данные из Serial порта if (Serial.available() >0) < // Читаем полученные данные и сохраняем их в переменной String receivedData = Serial.readString(); // Отправляем ответ обратно в Serial порт Serial.println("Получено: " + receivedData); >>
Сначала загрузим скетч в Arduino, а затем запустим Python-скрипт:
Как видно, ответ возвратился обратно. Но если вдруг порт будет занят чем-то другим, будь то монитор порта в Arduino IDE или еще какая программа, python не сможет открыть порт и вы получите ошибку:
Для устранения, просто завершите процесс использующий порт.
Пример 2: Сбор и запись данных с датчика
Теперь давайте рассмотрим более практический пример. Мы будем считывать данные с датчика DHT11, подключенного к Arduino, и записывать их в Excel файл.
Загружаем скетч в Arduino:
#include #define DHTPIN 2 // Пин, к которому подключен датчик DHT11 #define DHTTYPE DHT11 // Тип датчика (DHT11 или DHT22) DHT dht(DHTPIN, DHTTYPE); void setup() < Serial.begin(9600); dht.begin(); >void loop() < // Читаем температуру и влажность с датчика float humidity = dht.readHumidity(); float temperature = dht.readTemperature(); // Проверяем, что данные с датчика считаны корректно if (isnan(humidity) || isnan(temperature)) < Serial.println("Ошибка при чтении данных с датчика DHT11"); >else < // Формируем строку с данными (температура и влажность) String dataString = String(temperature) + "," + String(humidity); // Отправляем данные в порт Serial.println(dataString); // Задержка перед отправкой delay(1000); >>
Для работы с xlsx файлами нам понадобиться библиотека openpyxl, которую можно установить командой:
pip install openpyxl
Теперь запускаем Python скрипт:
import serial import time from datetime import datetime from openpyxl import Workbook ser = serial.Serial('COM5', 9600) # Замените 'COMX' на ваш порт # Создаем новый файл Excel workbook = Workbook() sheet = workbook.active # Записываем заголовок sheet.append(["ID записи", "Время", "Температура (°C)", "Влажность (%)"]) id_record = 1 # Инициализируем ID записи while True: # Считываем строку с Arduino data = ser.readline().decode('utf-8').strip() # Выводим текущие показания print(id_record, data) # Получаем текущее время current_time = datetime.now().strftime('%H:%M:%S') # Парсим строку на температуру и влажность temperature, humidity = data.split(',') # Записываем данные в ячейки sheet.append([id_record, current_time, float(temperature), float(humidity)]) # Увеличиваем ID id_record += 1 # Сохраняем файл workbook.save('data.xlsx') # Задержка time.sleep(1)
Как видно, данные успешно получаются и записываются в файл.
Теперь посмотрим xlsx файл, для этого нужно остановить python код:
Можно построить графики:
Где возможно применить данную технологию? Например, использовать для создания интерфейса управления устройством без доступа к интернету, например стационарным роботом манипулятором, самодельным 3D-принтером или же для мониторинга нескольких физических датчиков в долгосрочных экспериментах, для последующего анализа результатов.
Надеюсь, что эта статья помогла вам понять, как автоматизировать работу с Serial портом, и вдохновила вас на создание собственных проектов. Успехов в вашей работе с Arduino и Python!
Данная статья является собственностью Amperkot.ru. При перепечатке данного материала активная ссылка на первоисточник, не закрытая для индексации поисковыми системами, обязательна.