Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/rajkumargara/remote-serial-pico
Access remote serial devices connected to Pico with Pi
https://github.com/rajkumargara/remote-serial-pico
lmdi-100 mechonet pico-w raspberry-pi remote-serial serial tcp uart
Last synced: 3 days ago
JSON representation
Access remote serial devices connected to Pico with Pi
- Host: GitHub
- URL: https://github.com/rajkumargara/remote-serial-pico
- Owner: RajkumarGara
- Created: 2024-01-16T23:10:03.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2024-09-06T19:47:48.000Z (2 months ago)
- Last Synced: 2024-11-10T13:09:36.642Z (7 days ago)
- Topics: lmdi-100, mechonet, pico-w, raspberry-pi, remote-serial, serial, tcp, uart
- Language: JavaScript
- Homepage:
- Size: 40.6 MB
- Stars: 0
- Watchers: 1
- Forks: 1
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# About
Ever need a serial port far away from your Raspberry Pi? Wish you could use WiFi to talk to a serial device without having to run a wire? This project is for you.```
sudo npm i -g remote-serial-pico
remote-serial-pico i
```Now a server is running on the Pi. If you plug in a Pico to the USB it will install the client code on the pico within 6 sec and make it a remote serial port.
`/dev/pts/pty1`
It's that easy to setup a remote serial port. Each time you plug in a pico, it will be the next `ptyN` on the list.
If you haven't already installed npm:
```
sudo apt update
sudo apt install nodejs npm
```### Background
Designed to facilitate communication between a remote device (such as a Raspberry Pi) and a device connected via serial to the Pico. It leverages TCP/IP networking to bridge data exchange between the Pico's serial interface and a networked environment. Extend this project using either the [`node-red-bridge`](https://github.com/RajkumarGara/node-red-bridge) or [`homebridge-tcp-smarthome`](https://github.com/RajkumarGara/homebridge-tcp-smarthome).### Pico on-board LED status
* LED blinks repeatedly during the WiFi connection process. Upon successful connection it turns off.
* LED switches on again when connected to the TCP server.
* LED blinks once upon receiving a command either from TCP server or a serially connected device.
* LED turns off when disconnected from the TCP server.## Project Details
* **Curious about PtyServer?**
* Detects Pico clients upon receiving first packet with `pico_{N}`, and creates a pseudo terminal(pty) for each Pico.
* Sends data available in pty to the respective Pico.
* Writes data received from Pico into corresponding pty.
* Log the commands and responses for each pico; check out the log:
```
tail -f /tmp/smartHome.log
```* **Wondering how plugging Pico into the Pi installs client code in Pico?**
* The udev rule ([99-pico.rules](./src/99-pico.rules)) watches Pi's USB port for Pico connection.
* When a Pico is connected, it triggers another script [PicoScriptDeployer.py](./src/pi/PicoScriptDeployer.py) to run on Pi.* **And what exactly does PicoScriptDeployer do?**
* It fetches `wifi-ssid, password, IP, Pico-Serial-ID` and updates the corresponding credentials on [config.json](./src/pico/config.json). You can also manually update it.
* Deploys [`main.py`](./src/pico/main.py) and [`config.json`](./src/pico/config.json) to the most recently connected pico.
* You can observe the deployer log:
```
tail -f /tmp/deployer.log
```* **Now, what's the role of the main code in Pico?**
* Retrieves the network credentials and server details from the `config.json`.
* Upon TCP connection, sends its `Serial-ID` to the Pi in the first packet.
* Continuously checks for data in TCP and Serial; if it receives data from either, it sends that data to the other.## Visual Overview
* Checkout the serial diagram: ![block diagram](img/2.jpg)
* Checkout the network diagram: [SRC](https://docs.google.com/drawings/d/1oIbP6EGNI4thhi0qzVgtGZw0lyD-F9gRc0-1tAc7O_Q/edit)
![drawing alt text](https://docs.google.com/drawings/d/1oIbP6EGNI4thhi0qzVgtGZw0lyD-F9gRc0-1tAc7O_Q/export/png)[![Watch the video](img/4.GIF)](https://youtu.be/M36LoMouvPg)
## Credits
Special thanks to [Medical Informatics Engineering](https://www.mieweb.com/) for their support throughout the development of this project, especially to [Doug Horner](https://github.com/horner) for his invaluable guidance.