Skip to content

Commit

Permalink
add rs485
Browse files Browse the repository at this point in the history
  • Loading branch information
lmtreser committed Aug 13, 2024
1 parent 929589f commit 7a851ad
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 0 deletions.
Binary file added dispositivos/rs485/MAX485_Module_Schematic.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
55 changes: 55 additions & 0 deletions dispositivos/rs485/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# RS-485 en la Rapsberry Pi

Se puede utilizar la comunicación serial sobre los GPIO de una Raspberry Pi 3B+. Luego, con un chip conversor UART a RS485, se puede establecer una red maestro/esclavos. Los pasos a seguir son los siguientes:

## Habilitar la UART

Editar el archivo `/boot/config.txt` y añadir la línea `enable_uart=1`. Además, deshabilitar el servicio de consola serial editando el archivo `/boot/cmdline.txt` y eliminando cualquier parámetro que contenga `ttyAMA0`. Reiniciar la Raspberry Pi.

## Conexión física

Conectar el módulo conversor UART/RS485 a los pines `GPIO14 (UART0_TXD)` y `GPIO15 (UART0_RXD)`. El circuito del módulo es el siguiente:

![MAX485 Module Schematic](./MAX485_Module_Schematic.jpg)

Hay que tener en cuenta los niveles de tensión lógicos que aceptan los pines, por lo que probablemente haya que utilizar un adaptador de nivel lógico (5V/3.3V):

![Level Shifter](./level-shifter.png)

## Programación

Se puede enviar y recibir datos mediante Python. Es necesario instalar la biblioteca de comunicación serial:

```bash
pip install pyserial
```

Ejemplo:

```python
import serial

ser = serial.Serial(
port="/dev/ttyAMA0", # Dispositivo de puerto serial
baudrate=9600, # Velocidad de transmisión
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
timeout=1,
)

while True:
tx_data = "Hello"
if tx_data != "":
print("Envío: " + tx_data)
ser.write(tx_data.encode("utf-8")) # Envío de datos

rx_data = ser.readline().decode("utf-8").strip() # Recepción de datos
if rx_data != "":
print("Recibido: " + rx_data)
```

## Recursos

- [MODBUS RS485 Raspberry Pi](https://medium.com/raspberry-pi-and-rs485-modbus/modbus-rs485-raspberry-pi-5ccbc1996b7d)
- [PyModbus](https://pymodbus.readthedocs.io/en/latest/)
Binary file added dispositivos/rs485/level-shifter.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 7a851ad

Please sign in to comment.