Мне нужно отправить целые числа больше 255? Кто-нибудь знает как это сделать?Отправка целочисленных значений в Arduino из PySerial
1
A
ответ
3
Кодировать их в двоичные строки с модулем struct
Python. Я не знаю, хочет ли ардуино их мини-эндиан или big-endian, но, если его документы неясно об этом, небольшой эксперимент должен легко решить вопрос ;-).
+1
Примечание: Arduino - маленький конец. Вы можете поменять endianess с помощью структурного модуля, но мне не пришлось этого делать. Для записи я был на x86 mac osx 10.6.4. python 2.6.1, 64 бит. – toddstavish
4
Вот как (Спасибо за идею, Алекс!):
Python:
def packIntegerAsULong(value):
"""Packs a python 4 byte unsigned integer to an arduino unsigned long"""
return struct.pack('I', value) #should check bounds
# To see what it looks like on python side
val = 15000
print binascii.hexlify(port.packIntegerAsULong(val))
# send and receive via pyserial
ser = serial.Serial(serialport, bps, timeout=1)
ser.write(packIntegerAsULong(val))
line = ser.readLine()
print line
Arduino:
unsigned long readULongFromBytes() {
union u_tag {
byte b[4];
unsigned long ulval;
} u;
u.b[0] = Serial.read();
u.b[1] = Serial.read();
u.b[2] = Serial.read();
u.b[3] = Serial.read();
return u.ulval;
}
unsigned long val = readULongFromBytes();
Serial.print(val, DEC); // send to python to check
0
Путь проще:
crc_out = binascii.crc32(data_out) & 0xffffffff # create unsigned long
print "crc bytes written",arduino.write(struct.pack('<L', crc_out)) #L, I whatever u like to use just use 4 bytes value
unsigned long crc_python = 0;
for(uint8_t i=0;i<4;i++){
crc_python |= ((long) Serial.read() << (i*8));
}
Нет союз необходимо и коротко!
Смежные вопросы
- 1. отправка многозначных целых чисел из python в arduino через pyserial
- 2. arduino serial и pySerial
- 3. Отправка целочисленных значений с помощью AJAX
- 4. Как копировать pyserial отправки значений RGB в Arduino в jUART?
- 5. PySerial slowdown при чтении из Arduino
- 6. Чтение серийных данных из проекта Arduino (pySerial)
- 7. отправка последовательных команд в arduino
- 8. Отправка^C над PySerial
- 9. Проблема с Arduino и pySerial
- 10. отправить список данных из python в arduino с помощью pyserial
- 11. Извлечение целочисленных значений из LinkedList
- 12. Чтение целочисленных значений из файла
- 13. Добавление целочисленных значений из радиоформата
- 14. Извлечение целочисленных значений из перечисления
- 15. Значения целочисленных значений из Matrix
- 16. Создание тонов из Целочисленных значений
- 17. Отправка данных из программы C# в Arduino
- 18. Отправка значений POT из сети Arduino через UDP
- 19. Ошибка отправки серийных данных из Python + Pyserial в Arduino
- 20. Объявление целочисленных значений в MIPS
- 21. Pyserial writing to arduino mega 2560 problem
- 22. Timing Проблема Использование PySerial с Arduino Uno
- 23. PySerial имеет проблемы с чтением Arduino
- 24. pyserial communication with arduino (для управления двигателем)
- 25. Мигает светодиодом с Arduino и pySerial
- 26. Pyserial с Arduino и несколькими ds18b20
- 27. Генерация случайных Целочисленных значений
- 28. Замечание целочисленных значений
- 29. Сумма целочисленных значений будущего
- 30. Python/Arduino: PySerial, Matplotlib, numpy; Raspbian
Выполняет ли 'Serial.print()' преобразование ASCII ('itoa' или подобное) или отправляет номер обратно в виде двоичного кода? Если AVR принимает байты назад, то снова передает их обратно на ваш компьютер, он будет выглядеть хорошо ... –
В Arduino вы можете указать, как он его отправит, в моем случае я отправляю его обратно в виде десятичного числа (см. второй параметр, DEC). Serial.print (val, DEC); // отправляем на python, чтобы проверить – toddstavish