0.10.16 • Published 5 years ago

pi2c-serial v0.10.16

Weekly downloads
1
License
MIT
Repository
github
Last release
5 years ago

PI2c - Serial

This is a complimentary repo providing the ability for serial over TCP or Websockets for the Raspberry PI. Basically makes the PI act as a serial over network adapter. Note - CTS and RTS are not supported

This repo is complimentary to the PI2c repo allowing you to control the i2c, spi, pwm, and gpio over a simple rest service.

PI2c - Rest API

Info

You will need to apply the overlay pi3-disable-bt or pi3-miniuart-bt in order to use the UART of the PI3 A/B+ and Zero W. The UART by default on most linux distributions is used to control the BT module. There is plenty of documentation online to do this.

A rest server will be running on default port 82 to configure baudrate. The default baudrate is 9600. It will need to be set every startup.

Pin mapping

If you are using this directly on your PI you will need to use physical pins 8 and 10 for TX and RX respectivly.

FunctionPI2c HatPi Header
UART
UART_TX128
UART_RX1410

Setup

  1. Wire your device to the PI2c using the info above
  2. Configure the Serial baudrate with via the Rest api
# Command line example set serial baudrate
curl --request POST http://${REST_SERVER}:82/api/v1/setBaudrate/115200
  1. Using your desired platform connect to Websocket port 1337 for or TCP port 47070. Traffic over serial will be routed to these sockets.
# Python TCP write serial example
import socket
class SerialSocket:
  def __init__(self, sock=None):
    if sock is None:
      self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    else:
      self.sock = sock

  def connect(self, host, port):
    self.sock.connect((host, port))

  def write(self, msg):
    totalsent = 0
    MSGLEN = len(msg)
    while totalsent < MSGLEN:
      sent = self.sock.send(msg[totalsent:])
      if sent == 0:
        raise RuntimeError("socket connection broken")
      totalsent = totalsent + sent

  def read(self, num):
    chunks = []
    bytes_recd = 0
    MSGLEN = num
    while bytes_recd < MSGLEN:
      chunk = self.sock.recv(min(MSGLEN - bytes_recd, 2048))
      if chunk == b'':
        raise RuntimeError("socket connection broken")
      chunks.append(chunk)
      bytes_recd = bytes_recd + len(chunk)
    return b''.join(chunks)

serial = SerialSocket()
serial.connect('GO-XXXXXXX', 47070)
serial.write(bytearray("hello\n", "utf-8"))