Плата Arduino с StandardFirmata не отвечает на запросы клиентов C# и Python

serial usb uart firmata seeeduino-xiao

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

Однако, когда я использую приложение Windows Remote Arduino Experience, плата успешно обнаруживается, и я могу управлять контактами, получать информацию и т. д. Снимок экрана 1 Скриншот 2

  • Для общения с доской я использую следующие программы:
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.

Что я делаю не так? Есть ли какая-то ошибка в настройке или коде, который я написал?

, 👍1

Обсуждение

отображает ли последовательный монитор в Arduino IDE данные с Arduino?, @jsotola

@jsotola Да, при подключении платы я получаю длинное сообщение о возможностях, начинающееся с F0 6B F7, @Cregennan

При использовании Iot.Device.Arduino я настоятельно рекомендую использовать ConfigurableFirmata, так как он оптимизирован для этого. StandardFirmata может не поддерживать некоторые функции, ожидаемые библиотекой. Обратите внимание, что стандартная скорость соединения была изменена на 115200 бод., @PMF


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;
,