Плата Arduino с StandardFirmata не отвечает на запросы клиентов C# и Python
У меня есть плата Seeeduino XIAO с запущенной на ней Firmata. В настоящее время я пытаюсь написать клиент C# для связи с этой платой. Я пробовал использовать для этой цели Iot.Device.Arduino, SolidSolis.Arduino и pyfirmata, но столкнулся с проблемой — плата не отвечает ни на какие запросы, отправленные моими приложениями.
Однако, когда я использую приложение Windows Remote Arduino Experience, плата успешно обнаруживается, и я могу управлять контактами, получать информацию и т. д.

- Для общения с доской я использую следующие программы:
using Iot.Device.Arduino;
var arduino = new ArduinoBoard("COM3", 57600);
Console.WriteLine(arduino.FirmataVersion.Major); // Это выдает System.TimeoutException
import pyfirmata
port = 'COM3'
board = pyfirmata.Arduino(port)
print(board.firmata_version) # prints 'None'
StandardFirmata работает на Arduino.
Это было добавлено в
Boards.h:
#elif defined(SEEED_XIAO_M0)
#define TOTAL_ANALOG_PINS 11
#define TOTAL_PINS 17 // 11 цифровых / аналоговых + 1 выход ЦАП + 2 i2c + 3 spi
#define VERSION_BLINK_PIN LED_BUILTIN
#define PIN_SERIAL1_RX 7
#define PIN_SERIAL1_TX 6
#define IS_PIN_DIGITAL(p) ((p) >= 0 && (p) <= 10)
#define IS_PIN_ANALOG(p) ((p) >= 0 && (p) <= 10)
#define IS_PIN_PWM(p) ((p) >= 1 && (p) <= 10)
#define IS_PIN_SERVO(p) (IS_PIN_DIGITAL(p) && (p) < MAX_SERVOS) // устарело с версии 2.4
#define IS_PIN_I2C(p) ((p) == 4 || (p) == 5) // SDA = 4, SCL = 5
#define IS_PIN_SPI(p) ((p) == 4 || (p) == 10 || (p) == 9 || (p) == 8) // SS = A4
#define IS_PIN_SERIAL(p) ((p) == 6 || (p) == 7)
#define PIN_TO_DIGITAL(p) (p)
#define PIN_TO_ANALOG(p) (p)
#define PIN_TO_PWM(p) PIN_TO_DIGITAL(p)
#define PIN_TO_SERVO(p) (p) // устарело с версии 2.4
Я попытался перестроить приложение Windows Remote Arduino Experience с изменениями - я заставил его регистрировать каждый байт, который он отправляет в Arduino или получает от Arduino. Затем я попытался отправить эти байты вручную, но результат был тем же - плата не отвечала
В диспетчере устройств есть устройство:
- USB-устройство с последовательным портом (COM3) (ID -
USB\VID_2886&PID_802F&REV_0104&MI_00)
P.S. Как узнать, что плата не отвечает, а не приложение не работает? На плате есть светодиоды RX и TX, RX мигает всегда, а TX мигает только когда я использую приложение Windows Remote Arduino Experience.
Что я делаю не так? Есть ли какая-то ошибка в настройке или коде, который я написал?
@Cregennan, 👍1
Обсуждение1 ответ
Лучший ответ:
Проблема была в настройках подключения последовательного порта. Когда я использовал их, мне наконец удалось получить ответ от платы:
var port = new SerialPort("COM3", 115600);
port.Open();
port.Parity = Parity.None;
port.StopBits = StopBits.One;
port.DataBits = 8;
port.Encoding = Encoding.UTF8;
port.RtsEnable = true;
port.DtrEnable = true;
port.BreakState = false;
- Может ли Arduino Leonardo одновременно использовать USB-порт и последовательные контакты RX TX?
- Использование последовательных контактов TX/ RX для связи по USB
- Невозможно загрузить скетч в Lolin S3 Pro (ESP32-S3)
- Arduino Mega Loopback Test с несколькими портами TX/RX
- В чем разница между библиотеками Software Serial? Какая из них совместима с Arduino Nano?
- Максимальная последовательная скорость CH340
- Как использовать Serial.setTimeout()
- Можно ли загрузить скетч Arduino через последовательный порт (RX) вместо USB?
отображает ли последовательный монитор в Arduino IDE данные с Arduino?, @jsotola
@jsotola Да, при подключении платы я получаю длинное сообщение о возможностях, начинающееся с F0 6B F7, @Cregennan
При использовании
Iot.Device.Arduinoя настоятельно рекомендую использовать ConfigurableFirmata, так как он оптимизирован для этого. StandardFirmata может не поддерживать некоторые функции, ожидаемые библиотекой. Обратите внимание, что стандартная скорость соединения была изменена на 115200 бод., @PMF