Для взаимодействия с одноплатниками через интерпретируемый код установите pyserial и Firmata. Эти библиотеки позволяют отправлять команды на плату через UART, избегая ручного управления регистрами. Например, передача сигнала на светодиод займёт не больше трёх строк:
import pyfirmata
board = pyfirmata.Arduino(‘/dev/ttyACM0’)
board.digital[13].write(1)
Скорость обмена данными ограничена 115200 бод – этого хватит для большинства сценариев, но при работе с аналоговыми датчиками увеличивайте задержки до 50 мс. Иначе значения будут считываться с ошибками.
Используйте MicroPython для встроенных систем, если нужен прямой доступ к железу без промежуточных слоёв. Прошивка занимает от 256 КБ флеш-памяти и поддерживает Wi-Fi-чипы ESP8266/ESP32. Главное преимущество – возможность отладки в реальном времени через REPL.
Связь между скриптовым языком и платформой для прототипирования
Для взаимодействия с платой через COM-порт установите библиотеку pyserial
. Пример кода для отправки данных:
import serial
arduino = serial.Serial('COM3', 9600, timeout=1)
arduino.write(b'LED_ON')
Чтение данных с датчиков
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println(analogRead(A0));
delay(100);
}
Обработка в скрипте:
while True:
data = arduino.readline().decode().strip()
if data:
print(f"Значение датчика: {data}")
Управление внешними устройствами
Для работы с реле или сервоприводами передавайте бинарные команды. Пример управления светодиодом:
# Скрипт
arduino.write(b'1') # Включить
arduino.write(b'0') # Выключить
// Код на стороне устройства
char cmd = Serial.read();
digitalWrite(13, cmd == '1' ? HIGH : LOW);
Подключение платы к скрипту и обмен данными через последовательный порт
Установите библиотеку pyserial через терминал: pip install pyserial
. Убедитесь, что на плате загружен скетч, открывающий соединение с указанной скоростью, например, Serial.begin(9600)
.
Для чтения данных в скрипте создайте объект порта:
import serial
ser = serial.Serial('COM3', 9600, timeout=1) # Замените 'COM3' на актуальный порт
Отправьте команду с платы в монитор порта: Serial.println("Hello")
. Для захвата ответа в скрипте используйте:
while True:
if ser.in_waiting > 0:
data = ser.readline().decode('utf-8').strip()
print(data)
Чтобы передать данные с компьютера на плату, вызовите метод write()
. Например:
ser.write(b'ON') # Отправка байтовой строки
На стороне платы обработайте входящие данные:
if (Serial.available() > 0) {
String command = Serial.readStringUntil('
');
if (command == "ON") {
digitalWrite(LED_BUILTIN, HIGH);
}
}
Закрывайте соединение после завершения работы: ser.close()
. Для автоматического поиска порта используйте serial.tools.list_ports
:
from serial.tools import list_ports
ports = list_ports.comports()
for port in ports:
print(port.device)
Управление платами через PyFirmata без замены прошивки
Для работы с PyFirmata загрузите стандартный скетч Firmata на плату через среду разработки:
- Откройте
File → Examples → Firmata → StandardFirmata
. - Загрузите скетч, выбрав правильный порт и тип платы.
Установите библиотеку в системе:
pip install pyfirmata
Пример кода для мигания светодиодом на 13-м пине:
from pyfirmata import Arduino, util
board = Arduino('COM3') # Укажите ваш порт
while True:
board.digital[13].write(1)
board.pass_time(1)
board.digital[13].write(0)
board.pass_time(1)
Для аналоговых датчиков используйте:
board.analog[0].read()
– чтение с A0.- Перед чтением запустите поток:
util.Iterator(board).start()
.
Ошибки и решения:
SerialException
– проверьте подключение и порт.- Задержки – вместо
time.sleep()
применяйтеboard.pass_time()
.
PyFirmata поддерживает PWM, сервоприводы и I2C-устройства через дополнительные методы.