1

Context: I'm trying to read a simple sensor that uses RS232 protocol to send data.

The sensor is a maxbotix US distance sensor (https://www.maxbotix.com/documents/HRXL-MaxSonar-WR_Datasheet.pdf). Documentation says:

Pin 5-Serial Output: The MB736X/MB7375 sensors have an RS232 data format (with 0V to Vcc levels) and the MB738X/MB7395 sensors have a TTL outputs. The output is an ASCII capital “R”, followed by four ASCII character digits representing the range in millimeters, followed by a carriage return (ASCII 13). The maximum range reported is 4999 mm (5-meter models) or 9998 mm (10-meter models). A range value of 5000 or 9999 corresponds to no target being detected in the field of view. The serial data format is 9600 baud, 8 data bits, no parity, with one stop bit (9600-8-N-1). Because the data is presented in a binary data format, the serial output is most accurate.

To model I own has RS232 data format. I did all the previous configurations (disable BT, activate UART, etc), and I can read data, but I can't decode the values.

As docu says, I should receive something like R0300 (for 30 cm measure, the the lower limit). I'm using python to read data:

import serial

ser = serial.Serial('/dev/ttyAMA0', 9600, serial.EIGHTBITS, serial.PARITY_NONE, serial.STOPBITS_ONE, timeout=1)

ser.flushInput() ser.flushOutput() ser.flush() message = [] for i in range(0,8): message.append(ord(ser.read(1))) print(message)

[43, 240, 134, 51, 62, 159, 229, 0]

ser.flushInput() ser.flushOutput() ser.flush() message = [] for i in range(0,8): message.append(ser.read(1)) print(message)

[b'+', b'\xf0', b'\x86', b'3', b'>', b'\x9f', b'\xe5', b'\x00']

I have used Arduino with this sensor and everything works allright. But now with RPI I can't read the data properly.

Raw byte data I receive (for 8 bytes): b'+\xf0\x863>\x9f\xe5\x00'

After the 8 bytes, the signal starts with b'+' again

Wiring:

Sensor          | RPI 3B+
  Pin 5 (RS232) |   Pin 10 (GPIO15)
  VCC           |   5V
  GND           |   GND

I checked Using Serial to Read Ultrasonic Sensor?, but that approach works with TTL, not with RS232.

I can't decode this data (I have tried multiple translators without success). Am I missing something?

aldo_tapia
  • 113
  • 5
  • The Pi has a UART operating at 0V for low and 3V3 for high. It is not RS232. You need to confirm that the device you are using is compatible with the Pi voltages. You need to give a photo of the wiring you are using. You need to explain what is actually being received. All this info needs to be edited into the question. – joan May 26 '22 at 21:11
  • Thank you, I added more details – aldo_tapia May 26 '22 at 21:19

1 Answers1

1

If the sensor ACTUALLY outputs RS232 (which is ±15V) AND connect to GPIO you have damaged the Pi. Even if it is fake RS232 (0-5V) it exceeds the limit.

In addition, even if the voltage was correct RS232 is inverted wrt normal serial so won't work. You need a RS232 adapter.

PS Fiddling with Bluetooth is unnecessary and it is unclear what interface you now have.
See How do I make serial work on the Raspberry Pi3 or later

Milliways
  • 59,890
  • 31
  • 101
  • 209