Как использовать pyserial для написания двух отдельных сообщений?
Я использую pyserial для связи с моим arduino. Я настроил соединение, и все работает нормально. Теперь у меня есть эти две команды записи:
pyserial.write("conn".encode())
pyserial.write("mod1".encode())
На моем ардуино:
while (!Serial.available());
String s = Serial.readString();
if (s=="conn") do...;
if (s=="mod1") do...;
Проблема в том , что ни одно из утверждений if не является истинным, потому
что s
становится "connmod1"
, потому что сообщения отправляются почти одновременно, я думаю. Я знаю, что мог бы использовать какой-нибудь разделитель для разделения строки, но мне хотелось бы знать, каким может быть удобное решение?
@mc1893, 👍1
Обсуждение1 ответ
Если вам нужно быстрое, дешевое и простое решение, вы можете просто использовать sleep()
в своем скрипте Python, чтобы установить задержку между командами. Очевидно, что это не идеальное решение, но его нетрудно реализовать.
Или, как вы сказали, вы могли бы использовать разделитель. Это не так просто реализовать, но это будет работать лучше.
Если вы пойдете по пути разделителя, вам, вероятно, придется использовать Serial.read()
вместо Serial.ReadString()
. Таким образом, вы можете изучать символы по отдельности по мере их появления. Вы можете хранить свои символы в строковом или символьном массиве до тех пор, пока не обнаружите разделитель, а затем выполнить команду.
Надеюсь, это поможет!
- `time.sleep` в скрипте python чтение последовательного вывода вызывает неустойчивое поведение
- Потеря данных при последовательном считывании с помощью Arduino Nano
- Ардуино случайным образом прекращает отправку данных на python по последовательному
- Управление ардуино через python
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Не удается связаться с ардуино с помощью python (Windows)
- В чем разница между библиотеками Software Serial? Какая из них совместима с Arduino Nano?
- Как отправить команду AT на sim800l с помощью SoftwareSerial
вы уже ответили на свой собственный вопрос: "Я знаю, что могу использовать какой-то разделитель"., @jsotola
ReadString() ждет следующего символа до тайм-аута. тайм-аут по умолчанию составляет 1 секунду. вы можете установить тайм-аут с помощью Serial.setTimeout(millis). https://www.arduino.cc/reference/en/language/functions/communication/serial/readstring/, @Juraj