-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
55 additions
and
0 deletions.
There are no files selected for viewing
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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/) |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.