Quantcast
Channel: Raspberry Pi Forums
Viewing all articles
Browse latest Browse all 4990

General • Re: Pi4 communication with multiple Pico's

$
0
0
I've managed to send and retrieve some simple data between the master and slave.
Great, you managed the 'hello world' example.

When the Pi4 (master) sends out a query, it needs to wait for response. For first tests, make this wait time sufficient long.
- transfer time of serial data on the wire
- time to switch the RS485 receiver from send to receive
- grant some 'wakeup- and think time' for the clients
- and the transfer time of serial data on the wire for the response
- and some extra safety margin
- prepare for timeout checks, clients may not respond.

The pico (slave) need to poll for incoming messages. All the time. When coding in micropython it is not a simple task to handle other jobs like reading a touch panel 'in parallel'.
- threading is still not perfect.
- asyncio could help to implement multiple tasks.
- a while loop in micropython could first look for incoming uart data, and if none are available to other jobs. There is a receive buffer in the uart class which lowers timing requirements. Do not use uart.readline(). What you need to implement is a robust message detection in the uart byte stream coming in. When using modbus libraries this is handled there, otherwise do this yourself.

Code:

# pseudocode for a repeating background task each 200 mst0 = time.ticks_ms()while True:    if uart.any():        c = uart.read(1)         - collect all chars until a message is complete.         - could be the client starts to listen in the middle of an incoming          query (after a reset of an coding error).        - if message is complete, handle the query and send response    else:        t1 = time.ticks_ms()        if time.ticks_diff(t1, t0) > 200:            t0 = t1    - do other jobs, but do not spend too much time here    - store result to be available when a query arrives
CPU load on the pico is usually not a problem. Only if you run battery powered devices this is an optimization needed.
As with RS485 you already have GND, A,B wires, you could also provide an extra VCC line to the clients (but be aware of shorts, EMF, line losses so a careful design is needed).

Statistics: Posted by ghp — Fri Nov 15, 2024 9:01 am



Viewing all articles
Browse latest Browse all 4990

Trending Articles