A Godot 4.1+ plugin to read/write Arduino serial input.
Read
GDExtension
for more
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
- Godot 4.1 or above
- godot-cpp
- libserialport (LGPL-3.0 license)
- MSBuild v143 or later for Windows builds
- '
apt install autoconf libtool
' for Linux
- fmt (./src/fmt/) (MIT license)
- SCons
- Python 3.10 or above
- Python virtual environment
- Git
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
src - Plugin source code
deps - Dependencies, like libserialport. Will be created on install\
godot-cpp - Godot bindings. Will be created on install\
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
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
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
- Create a SerComm node in your scene.
- Select baudrate and port number.
- Create a script on any other node in scene
- script your logic
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);