Home

Awesome

SerCommPlugin

A Godot 4.1+ plugin to read/write Arduino serial input.
Read GDExtension for more

Want MQTT instead of Serial?

If serial input is not what you're looking for maybe a plugin for MQTT would suite you better?
godot-mqtt repo made by Julian Todd

Dependencies

Build system

Compilation Database and/or CMake

Experimental feature
The Scons build will generate a Compilation Database (CD). CLion can open a CD directly
You can also run the generate_cmake.py script to generate a CMakeLists.txt.

mkdir build
cd build
cmake .. 
make

Repo structure

src - Plugin source code
deps - Dependencies, like libserialport. Will be created on install\
godot-cpp - Godot bindings. Will be created on install\

Full Build

This will build everything form scratch

python -m venv ./pvenv

// Activate pvenv for Windows
pvenv\Scripts\activate
// Activate pvenv for Unix/MacOS
source pvenv/bin/activate

pip install -r requirements.txt
python install.py

Quick Build

This will only build the GDSercomm part. Requires at least on Full Build before working

python -m venv ./pvenv

// Activate pvenv for Windows
pvenv\Scripts\activate
// Activate pvenv for Unix/MacOS
source pvenv/bin/activate

pip install -r requirements.txt
python build.py

Output

After a completed build all files you need will be in ./demo/bin directory. Except the libserialport library. It will be inside the ./deps/libserialport directory.

Windows = .\deps\libserialport\x64\Debug\libserialport.dll
Linux = libserialport.so

Usage

  1. Create a SerComm node in your scene.
  2. Select baudrate and port number.
  3. Create a script on any other node in scene
  4. script your logic Screenshot of basic setup

By toggle the radio button the extension will search for available ports and refresh the port dropdown list.

Create a SerComm node for each port you want to read or write to.

[!NOTE] SerComm uses the on_message(message : String) when a message is recieved. In the _process function of the node, Godot automatically calls read_serial for you, then emits on_message. If you want disable automatic reads, you can override _process:

func _process(delta):
  var in = waiting_input_bytes();
  var read = read_serial(in);
  print(read);