RPC#

Identify appropriate UART interfaces on the server and client and wire up RX and TX. Do not forget to wire “cross”, i.e. RX on one processor to TX on the other.

Optionally also wire flow control (RTS and CTS). Doing so protects from data loss (and erratic behavior) with large packages that to not fit in the UART receive buffers.

Configure Server#

%connect wifi-server
%rsync
Connected to wifi-server @ serial:///dev/ttyUSB0
Directories match

# run boot.py & main.py
%hardreset
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!   hardreset ...     !!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Configure Client#

%connect wifi-client
%rsync
%softreset
Connected to wifi-client @ serial:///dev/ttyACM0
Directories match

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!   softreset ...     !!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

RPC#

%connect wifi-client

from urpc import *
import sys
sys_ = import_('sys')

print("Platforms:")
print("   host:    {}".format(sys.platform))
print("   server:  {}".format(sys_.get_('platform')))
Connected to wifi-client @ serial:///dev/ttyACM0
Platforms:
   host:    pyboard
   server:  esp32
!cat code/server/rpc_test.py
class RPC_Test:

    def __init__(self, name):
        self._name = name

    def add(self, a, b):
        return "{}: {} + {} = {}".format(self._name, a, b, a+b)

    @property
    def name(self):
        return self._name

    def __str__(self):
        return "Demo {}".format(self._name)
rpc_test = import_('rpc_test')

t = rpc_test.RPC_Test("rpc test")
print("ADD ", t.add(5, 7))
print("NAME", t.get_('name'))
print("STR ", t)

print("\nchange name ...")
t.set_('_name', 'new name')
print("ADD ", t.add(3, -9))
print("NAME", t.get_('name'))
print("STR ", t)
ADD  rpc test: 5 + 7 = 12
NAME rpc test
STR  Demo rpc test

change name ...
ADD  new name: 3 + -9 = -6
NAME new name
STR  Demo new name
from urpc import *

builtins_ = import_('builtins')
builtins_.exec(
"""
help('modules')
""")
__main__          framebuf          uasyncio/lock     ure
_boot             gc                uasyncio/stream   uselect
_onewire          inisetup          ubinascii         usocket
_thread           machine           ubluetooth        ussl
_uasyncio         math              ucollections      ustruct
_webrepl          micropython       ucryptolib        usys
apa106            msgpack           uctypes           utime
btree             neopixel          uerrno            utimeq
builtins          network           uhashlib          uwebsocket
cmath             ntptime           uheapq            uzlib
dht               onewire           uio               webrepl
ds18x20           uarray            ujson             webrepl_setup
esp               uasyncio/__init__ uos               websocket_helper
esp32             uasyncio/core     upip
finaliserproxy    uasyncio/event    upip_utarfile
flashbdev         uasyncio/funcs    urandom
Plus any modules on the filesystem
gc_ = import_('gc')
print("1) cop mem_free: ", gc_.mem_free())
gc_.collect()
print("2) cop mem_free: ", gc_.mem_free())

import gc
print("1) host mem_free:", gc.mem_free())
gc.collect()
print("2) host mem_free:", gc.mem_free())
1) cop mem_free:  77824
2) cop mem_free:  98688
1) host mem_free: 22400
2) host mem_free: 88256