У меня следующая проблема, и после долгих часов разочарования я не могу заставить ее работать. Может ли кто-нибудь помочь новичку?
У меня есть несколько датчиков дальности SRF02, которые я хотел использовать через I2C на моем Raspberry Pi 3B Jessie.
Я последовал инструкциям и изменил первый датчик на адрес 0xF2 (0x79 видно из Raspberry), и все прошло отлично. Но проблема в том, что адреса от 0x78 до 0x7B зарезервированы для 10-битной адресации I2C, поэтому я должен использовать другой. Но поскольку я больше не могу получить к нему доступ через I2C, так как я изменил адрес, я решил сделать это через последовательный порт.
Я попытался изменить его, как описано в руководстве, но это не так. Работа. Вот код и то, что я сделал после исследования, чтобы его выполнить:
Я проверил адрес Датчика. При включении он отправляет одну длинную и 9 коротких вспышек, поэтому его адрес должен быть 0x09 в последовательном режиме.
Я обновил и обновил свою Raspberry.
Я подключил контакт RX датчика к Rasp TX и наоборот. + 5В датчика к + 3В рашпиля (это проблема?). Заземление датчиков и вывод режима на землю.
В raspi-config я изменил последовательную консоль на отключенную, а последовательные аппаратные порты - на включенные.
Вот мой /boot/cmdline.txt:
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p7 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles
Я добавил в свой /boot/config.txt следующее:
enable_uart=1
dtoverlay=pi3-disable-bt
core_freq=250
Мой код на Python (отправляя команды диапазона, датчик должен мигать один раз, но это не так, также я не получаю никакого результата):
import serial
import time
ser = serial.Serial(port='/dev/serial0', baudrate = 9600, bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_TWO, timeout=1, write_timeout=5)
USED_ADDRESS = '0x09'
TARGET_ADDRESS = '0x03'
# GET DISTANCE IN CM
ser.write(USED_ADDRESS)
ser.write('0x51')
time.sleep(0.07)
ser.write(USED_ADDRESS)
ser.write('0x5E')
results = ser.read(2)
if(results != None and len(results) > 0):
print 'RESULTS:'
for result in results:
print result
else:
print 'NO RESULT'
#CHANGING ADDRESS
#First command
ser.write(USED_ADDRESS)
ser.write('0xA0')
#Second command
ser.write(USED_ADDRESS)
ser.write('0xAA')
#Third command
ser.write(USED_ADDRESS)
ser.write('0xA5')
#Target Address
ser.write(USED_ADDRESS)
ser.write(TARGET_ADDRESS)
print "DONE"
Результат dmesg | grep tty:
[ 0.000000] Kernel command line: 8250.nr_uarts=1 bcm2708_fb.fbwidth=640 bcm2708_fb.fbheight=480 bcm2708_fb.fbswap=1 vc_mem.mem_base=0x3dc00000 vc_mem.mem_size=0x3f000000 dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p7 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles
[ 0.000312] console [tty1] enabled
[ 0.748748] 3f201000.serial: ttyAMA0 at MMIO 0x3f201000 (irq = 87, base_baud = 0) is a PL011 rev2
Результат ls -l / dev / serial *:
lrwxrwxrwx 1 root root 7 Feb 16 15:06 /dev/serial0 -> ttyAMA0
lrwxrwxrwx 1 root root 5 Feb 16 15:06 /dev/serial1 -> ttyS0
У кого-нибудь есть идея? Буду супер-пупер благодарен за любой намек.
/dev/ttyS0
и / или/dev/ttyAMA0
напрямую. - person stevieb   schedule 17.02.2018