#python
#python
Вопрос:
Я купил устройство (инклинометр), которое выдает данные, которые я хочу прикрепить к своему сообщению в удобочитаемом формате. Как я могу это сделать с помощью python?
У меня есть следующий скрипт:
import binascii
import serial
ser = serial.Serial('COM1', 9600)
s = ser.read()
hex_string = binascii.hexlify(s).decode('utf-8')
print(hex_string)
Я добавил пример того, как инклинометр отправляет данные через COM-порт.
Комментарии:
1. Можете ли вы добавить строку реального (шестнадцатеричного) вывода с вашего устройства либо с помощью комментария, либо обновив свой вопрос? Можете ли вы добавить чертеж или картинку, как должны выглядеть требуемые данные, когда вы прикрепите их к своему сообщению? Возможно, также расскажите нам больше о модели инклинометра и о том, где вы ее размещаете. Оба варианта актуальны, если выходные данные должны автоматически загружаться на ваш сайт, который вы публикуете.
2. Эта документация серьезно плоха. Они предоставляют вам 14 байт данных, но документируют только 9 байт из них. Я предполагаю, что первые 4 байта представляют собой своего рода преамбулу,
84
являющуюся эхом команды, аFB
в конце, вероятно, является контрольной суммой.
Ответ №1:
Поскольку не вся информация предоставляется для подбора наилучшего ответа, сделаны некоторые предположения, чтобы сузить возможные ответы.
В примере предполагается, что поток данных, выдаваемый измерителем наклона, включает в себя нечто большее, чем просто координацию по осям x и y. Для этого вводится цикл while. Существует также приостановка запроса данных из встроенного измерителя наклона, чтобы предотвратить переполнение данными вашего целевого устройства, на котором вы запускаете этот скрипт на python (raspberry-pi?).
Возможно, этот скрипт используется в режиме многопроцессорной обработки? Затем вы можете захотеть включить шаг, на котором вы сравниваете текущие координаты x, y с определенными эталонными значениями (не включены, но должны в конце цикла while).
import binascii
import serial
import time
set_sloop = 0 # control flag for result
loop_checks = 0 # control flag to prevent data-flooding.
ser = serial.Serial('COM1', 9600)
while set_sloop == 0: # get hex-data from device every 2 seconds (see pause interval)
s = ser.read()
hex_string = binascii.hexlify(s).decode('utf-8')
print(hex_string)
if str(hex_string[0:9]) == '680D008400': # used (x,y) string identifier based on example 0x84.
xh = hex_string[10:13]
yh = hex_string[16:19]
x = '%s.%s' % xh[0:1], xh[2:3]
y = '%s.%s' % yh[0:1], yh[2:3]
xt = 'x = %s deg' % x
yt = 'y = %s deg' % y
print (xt, yt)
set_sloop = 1
loop_checks = 1
if loop_checks == 10:
time.sleep(2) # pause interval: wait 2 seconds before requesting new data.
loop_checks = 0
print ('got inclination: (%s , %s) deg' % x, y)
# ... remaining code to "auto-post inclination" goes here ...
Примечание: примите во внимание, что строка поиска ‘680D008400’ не полностью соответствует описанию, приведенному в примере. Не хватает набора цифр. Опечатка в тексте компании?