Плата 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