我遇到了以下问题,经过长时间的挫折后,我无法让它发挥作用,有人可以帮助一个菜鸟吗?
我想通过我的Raspberry Pi 3B Jessie上的I2C使用了几个SRF02 Ranging sensors。
我按照教程将第一个传感器更改为地址0xF2(从Raspberry看到的0x79),这一切都完美无缺。但问题是地址0x78到0x7B是为10位I2C Adressing保留的,所以我必须使用另一个。 但是因为我改变了地址所以我不能通过I2C访问它了,所以我决定通过串口完成它。
我尝试按照tutorial中的说明更改它,但它不起作用。以下是代码以及我在完成研究后所做的工作:
我检查了传感器的地址。上电时,它会发送一个长闪码和9个短闪烁,因此在串行模式下它的地址应为0x09。
我更新并升级了我的Raspberry。
我将传感器RX引脚连接到Rasp TX,反之亦然。 + 5V的传感器到+ 3V的Rasp(这是一个问题吗?)。传感器接地并将模式引脚接地。
在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
有人有个主意吗?对于任何提示,我都会感激不尽。
答案 0 :(得分:0)
好的,我解决了!我在这里找到了解决方案:https://www.raspberrypi.org/forums/viewtopic.php?t=63419
连接如下:
Pi 5V至器件5V Pi接地至器件接地Pi接地至器件模式 Pi TX到设备RX
然后将Pi串行链路配置为9600。
stty -F / dev / ttyAMA0 9600
然后使用echo将命令发送到设备。
第一个字节是设备地址(0 - 15)。第二个字节是a 命令。
要将设备从地址0更改为地址5,请使用
echo -ne“\ x00 \ xA0 \ x00 \ xAA \ x00 \ xA5 \ x00 \ x05”> / dev / ttyAMA0
要将设备从地址5更改回地址0,请使用
echo -ne“\ x05 \ xA0 \ x05 \ xAA \ x05 \ xA5 \ x05 \ x00”> / dev / ttyAMA0
所有详细信息都在您链接的文档中。