66 lines
4.6 KiB
Markdown
66 lines
4.6 KiB
Markdown
# micropython-rp2-rs485-examples
|
|
|
|
## Whats this?
|
|
|
|
This is a small collection of some programs I wrote to test the functionality of
|
|
some cheap TTL-UART to RS485 converters, written in [MicroPython](https://micropython.org/)
|
|
|
|
Here's a short list of the different programs and what they do:
|
|
|
|
- **rs485_send.py**: sends a incrementing counter (starting at 0) as an UTF-8 encoded string with \r\n as delimiter over rs485
|
|
|
|
- **rs485_receive.py**: receives utf-8 encoded strings and prints them out as soon as a \n is received.
|
|
|
|
- **rs485_pingpong.py**: this implements a simple ping-pong over two channels (4 converters needed). For more information, see [Wiring](#wiring).
|
|
|
|
|
|
## Prerequisites
|
|
|
|
To be able to run all the examples successfully, you need two MicroPython-enabled microcontrollers (Raspberry Pi Pico 1 tested) and 4 TTL-UART to RS485 converters, with two of them connected to each μController (see [Wiring](#wiring)).
|
|
Also, both microcontrollers should have MicroPython running on them (at time of writing this the latest tested version was 1.23.0).
|
|
|
|
If you met all these requirements, let's start wiring the parts together!
|
|
|
|
|
|
## Wiring
|
|
|
|
For the (simple) send and receive programs, theres just to devices with MicroPython (rp2 flavor tested) needed, as well as two TTL-UART to RS485 converters, one connected to each of them. For the ping-pong example, you will need two channels (one for sending and one for receiving) for each MicroPython device. When using WaveShares Pico 2-Channel HAT, no wiring (between converters and microcontroller) is needed at all!
|
|
|
|
Just wire two MicroPython devices as shown below (obviously connect different converters to the different microcontrollers ;)
|
|
|
|
| Converter | Pin on converter | Pin on Pi Pico<sup>1</sup> |
|
|
| ----------------------------------------- | -------------------- | --------------------------- |
|
|
| TTL-UART to RS485 converter 1 | DI (driver in) | GP0 (UART0 TX) |
|
|
| TTL-UART to RS485 converter 1 | RO (receiver out) | GP1 (UART0 RX) |
|
|
| TTL-UART to RS485 converter 1 | DE (driver enable) | GP2 (set HIGH/LOW) |
|
|
| TTL-UART to RS485 converter 1 | RE (receiver enable) | GP2 (set HIGH/LOW) |
|
|
| TTL-UART to RS485 converter 2<sup>2</sup> | DI (driver in) | GP4 (UART1 TX) |
|
|
| TTL-UART to RS485 converter 2<sup>2</sup> | RO (receiver out) | GP5 (UART1 RX) |
|
|
| TTL-UART to RS485 converter 2<sup>2</sup> | DE (driver enable) | GP3 (set HIGH/LOW) |
|
|
| TTL-UART to RS485 converter 2<sup>2</sup> | RE (receiver enable) | GP3 (set HIGH/LOW) |
|
|
|
|
[<sup>1</sup>] as I used the Pico, adjust for your favourite microcontroller (but don't forget also changing the pinout in the programs as well1)
|
|
|
|
[<sup>2</sup>] only needed for the ping pong example
|
|
|
|
Then, connecting the A+, B- and GND wires of the respective converters together (converter 1 of μC1 to converter 1 of μC2, converter 2 of μC1 to converter 2 of μC2), you've just created a simple RS485 bus! Now upload the scripts to both microcontrollers and try what you want to try!
|
|
|
|
Example wiring on a breadboard, one Pico backed with WaveShares HAT, the other one connected to two MAX485 breakout boards:
|
|
|
|
![This is an example on how to wire two microcontrollers to the converters on a breadboard](wiring_breadboard_example.jpg)
|
|
|
|
|
|
## Useful links
|
|
|
|
- [https://www.berrybase.de/2-kanal-rs485-modul-fuer-raspberry-pi-pico-sp3485-transceiver](https://www.berrybase.de/2-kanal-rs485-modul-fuer-raspberry-pi-pico-sp3485-transceiver) - Pinout for a two-channel rs485 converter HAT by waveshare for the pi pico I used during development
|
|
- [https://www.analog.com/media/en/technical-documentation/data-sheets/MAX1487-MAX491.pdf](https://www.analog.com/media/en/technical-documentation/data-sheets/MAX1487-MAX491.pdf) - Datasheet of MAX485, a well-known chip soldered on another converter I bought (gives useful insights in how the UART communications work, and how to enable/disable read/write)
|
|
- [https://www.python-forum.de/viewtopic.php?t=56795](https://www.python-forum.de/viewtopic.php?t=56795) - German forum entry with sample code
|
|
- [https://www.waveshare.com/wiki/Pico-2CH-RS485](https://www.waveshare.com/wiki/Pico-2CH-RS485) - the wiki entry of waveshare about the 2-Channel converter I used among other converters (also contains sample code)
|
|
- [https://docs.micropython.org/en/latest/library/machine.UART.html](https://docs.micropython.org/en/latest/library/machine.UART.html) - Documentation of the UART library of MicroPython I used for transferring data to the converters
|
|
|
|
|
|
## License
|
|
|
|
see LICENSE.md
|
|
|