Skip to content

Create a flask server on a local computer that can be used to interact with a serial port scale via the browser.

Notifications You must be signed in to change notification settings

MSGoodman/SerialScaleServer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Serial Scale Server

Browsers don't have the ability to access devices connected via serial port, which is unfortunate for people who wish to use postal scales or other old hardware from a website. A somewhat-convoluted but actually rather simple solution is to spin up a quick flask webserver on the local device that creates an http interface between the COM port and the browser.

How To Use

First, make sure you have Python 3 installed. Then, just download the code, run pip install -r requirements.txt to get the necessary libraries (using a virtualenv is suggested but not necessary), and call python -m app from the package directory, at which point the scale server methods should be accessible at localhost's port 5000. You can optionally pass a command line argument of the COM port to use by default, for example python -m app COM2.

How It Works

The Scale

The SerialScaleReader object is essentially a wrapper around the pySerial library, applied specifically to interact with a scale. It has a few useful methods:

  • read_weight: Writes the command to the COM port to get the weight from the scale (command configurable via init kwarg), waits a moment for a response (length of wait also configurable via init kwarg), and then returns whatever the scale sends back.
  • get_settings: Gets the settings of the pyserial object that is used to communicate with the scale.
  • update_settings: Changes the settings of the pyserial object that is used to communicate with the scale. Includes:
Setting Accepted Values
port Device names on your computer, for example 'COM1', 'COM2'
baud_rate Integer
parity 'none', 'even', 'odd', 'mark', 'space'
stop_bits 1, 1.5, 2
byte_size 5, 6, 7, 8
  • update_and_get_settings: Calls update_settings and get_settings, returning both the current settings and any errors encountered when updating them. Mostly for convenience.

The Server

The server is incredibly simple, essentially just a one-to-one link between an endpoint and the SerialScaleReader object's methods. The endpoints are as follows:

  • /: The root. It just encourages you to do something useful.
  • /get_settings: Returns the serial port settings as json.
  • /update_settings: Updates the serial port settings, returning them (and any errors) as json. Values can be sent as parameters in a GET request (e.g. localhost:5000/update_settings?port=COM3&baud_rate=9600&stop_bits=1.5) in order to make it easier to bookmark and share presets, or via form data in a POST request. The values which can be sent match the SerialScaleReader's update_settings kwargs.
  • /read: Returns whatever is read from the scale (or the error received if it failed)

About

Create a flask server on a local computer that can be used to interact with a serial port scale via the browser.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages