title: Using Python and pyserial to run python scripts on a pico (RP2040)
body: <p>My ultimate goal is to control a number of peripheral chips on a PCB from a GUI interface on a PC. To do so, my plan was to incorporate a RP2040 (and memory) on the PCB in order to hold all the python scripts and to program/monitor all the peripheral chips. Then, using a PC to interface with the RP2040, send commands over the serial port to execute specific python files on the pico.
  I realize that is a bit confusing, so the attached block diagram should help.</p>
  <hr />
  <p><a href="https://i.stack.imgur.com/zoI7E.png" rel="nofollow noreferrer">Block diagram</a></p>
  <p>Starting on the left of the block diagram, I have a PC running a tkinter GUI. I am currently running the tkinter gui in Thonny. (eventually i would like it to be an executable, but that is beyond the scope of this post) The gui has a number of buttons to choose which python scripts to run. The PC is connected to the PCB through the USB cable. The USB data lines are routed to the RP2040's USB inputs (pins 47,48). The memory on the PCB holds a number of python scrips that correspond to the buttons in the GUI. Ideally, pressing a button on the PC would execute the corresponding py file on the pcb.</p>
  <hr />
  <p><strong>What I've got working so far:</strong>
  My real expertise lies in peripheral chips and PCB design, in this case the front end for a 2-18GHz transceiver, so bare with me if some of my python questions seem basic or misinformed. I've written and tested all the .py files on the pico's memory. To test those scripts I used Thonny to connect to my pico and simply ran (f5) the scripts with the peripherals connected to the right GPIOs. I was also able to get tkinter working and create functioning buttons that can execute commands. Using the pyserial module, I am also able to connected to the pico through the USB and write... strings. Not very useful, but a start.</p>
  <hr />
  <pre><code>import serial
  
  ser = serial.Serial('COM3', 38400, timeout=1, parity=serial.PARITY_EVEN, rtscts=1)
  s = ser.read(100)       # read up to one hundred bytes or as much is in the buffer
  
  print(ser.name)                # check which port was really used
  ser.write(b'ToggleLED.py')     # write a string
  ser.close()                    # close port
  </code></pre>
  <p><strong>Remaining task:</strong> The final task I have been failing miserably at the past 2 days has been actually trying to execute the .py files located on the pico's memory through the serial port. My unexperienced/naïve notion was to simply send a string with the files name, obviously not correct. Any thoughts on how to execute those py files using that pyserial module?</p>
  <hr />
  <p><strong>BTW, if there is a better solution</strong>, please feel free to share! Perhaps the files should be located on the PC and i send 1 command at time?</p>