Что можно сделать на ардуино python
Перейти к содержимому

Что можно сделать на ардуино python

  • автор:

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-скрипт.

Начнем с настроек:

  1. Подключите Arduino к компьютеру.
  2. Установите библиотеку pyserial для работы с Serial портом:

Это можно сделать через менеджер пакетов pip:

pip install pyserial

  1. Определите порт, к которому подключено 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. При перепечатке данного материала активная ссылка на первоисточник, не закрытая для индексации поисковыми системами, обязательна.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *