Я пытаюсь прочитать последовательные данные с ультразвукового датчика расстояния. Единственный выход я получаю белый квадрат, как это:как читать данные датчиков из последовательного порта с использованием python и малины pi 2
У меня есть Raspberry Pi 2, и ME007-ULS v1 ультразвуковой датчик от Ebay, я получил от этого руководства:
Когда триггерный штырь «2.Trigger» находится в спадающем фронте, а уровень низкого уровня сохраняется в диапазоне от 0,1 до 10 мс, что приведет к срабатыванию контроллера один раз, а затем вывести выходной вывод «3.TX/PWM» кадр 3.3V Последовательные данные уровня TTL
и выходной формат кадра датчика:
Это код, который я написал:
import RPi.GPIO as GPIO
import time
from serial import Serial
#GPIO mode
GPIO.setmode(GPIO.BCM)
#assign GPIO pins
GPIO_TRIGGER = 18
#direction of GPIO-Pins (IN/OUT)
GPIO.setup(GPIO_TRIGGER, GPIO.OUT)
def uss_funct():
ser = Serial('/dev/ttyAMA0', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=3)
# set trigger HIGH, sensor is waiting for falling edge
GPIO.output(GPIO_TRIGGER, True)
# set trigger LOW after 10ms -> Falling Edge
time.sleep(0.01000)
GPIO.output(GPIO_TRIGGER, False)
# set trigger back HIGH after 2ms, as LOW is supposed to be between 0.1-10ms
time.sleep(0.00200)
GPIO.output(GPIO_TRIGGER, True)
#read from rx
test_output = ser.read()
ser.close()
#clean up GPIO pins
GPIO.cleanup()
print (test_output)
if __name__ == '__main__':
uss_funct()
Я думаю, что я получил право проводов, но только в корпус - это то, как я подключил датчик:
Ультразвуковой датчик имеет 5 контактов:
- 3.3-12V вход (подключен к выходу 3.3V)
- триггера (подключен к GPIO 18)
- TX Выход (подключен к GPIO 10)
- Цифровой выход (не подключен)
- GND (подключен к GND)
эй @stephen, спасибо за вашу помощь. Я знал, что Serial.read() читает только один байт. Для начала я просто хотел правильно прочитать одно, а затем попытаться получить все байты. Моя фактическая проблема заключалась в том, что я смог получить только этот пустой белый ящик, окруженный синей рамкой (см. Рисунок выше). 'test_output = ser.read (size = 6)' ничего не возвращал. Я думаю, что я нашел решение, сначала создав пустой список (посмотрим на мой ответ), однако он по-прежнему кажется не 100% прав. – tintin13
@ tintin13, просто отредактировал мой ответ, чтобы показать, что у вас на самом деле есть. –