Skip to content

Commit

Permalink
Merge pull request #45 from elektrofuzzis/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
elektrofuzzis authored Mar 2, 2024
2 parents 79bdfe7 + f61d83a commit 35914c2
Show file tree
Hide file tree
Showing 33 changed files with 2,140 additions and 1,091 deletions.
43 changes: 43 additions & 0 deletions .github/workflows/build-firmware.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
name: PlatformIO CI
'on':
push:
branches:
- "master"

jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
targets:
- firmware-cam
- firmware-control
- firmware-duino
- firmware-jst
- firmware-pwrdrive
- firmware-rs
- firmware-xl
steps:
- uses: actions/checkout@v3
- uses: actions/cache@v3
with:
path: |
~/.cache/pip
~/.platformio/.cache
key: '${{ runner.os }}-${{ matrix.targets }}-pio'
- uses: actions/setup-python@v4
with:
python-version: '3.12'
- name: Install PlatformIO Core
run: pip install --upgrade platformio
- name: Copy target-specific files
run: cd ./src/${{ matrix.targets }} && cp platformio.ini ../ftswarm-core && cp src/main.cpp ../ftswarm-core/src
- name: Download dependencies
run: cd ./src/ftswarm-core && pio pkg install
- name: Build firmware
run: cd ./src/ftswarm-core && pio run
- name: Upload firmware
uses: actions/upload-artifact@v4
with:
name: firmware-${{ matrix.targets }}
path: ./src/ftswarm-core/.pio/build/${{ matrix.targets }}/firmware.bin
Binary file modified docs_raw/class diagramm.pptx
Binary file not shown.
2 changes: 1 addition & 1 deletion src/arduino/library-template/library.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
"type": "git",
"url": "https://github.com/elektrofuzzis/ftSwarm"
},
"version": "0.5.3",
"version": "0.6.0",
"license": "MIT",
"homepage": "https://elektrofuzzis.githib.io/ftSwarm",
"frameworks": "arduino",
Expand Down
2 changes: 1 addition & 1 deletion src/arduino/library-template/library.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name=ftSwarm
version=0.5.3
version=0.6.0
author=Christian Bergschneider, Stefan Fuss
maintainer=elektrofuzzis <elektofuzzis@gmx.de>
sentence=Interface libray to built robotics swarms with ftSwarm/ESP32
Expand Down
4 changes: 2 additions & 2 deletions src/ftswarm-cam/library.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "ftswarm-cam",
"version": "0.5.3",
"version": "0.6.0",
"description": "The goal of the ftSwarm project is to build small networked controllers for DIY and toy applications. Since they are networked with each other, they can act like a swarm. For example, they can act as several independent robots to solve a task together. In larger models, the controllers can be installed at different positions close to actuators and sensors - together they control the complete model.\n\n This is the library for ftSwarmCAM-type controllers",
"keywords": "ftswarm, swarm, network, controller, fischertechnik, robot, model, actuator, sensor",
"repository": {
Expand All @@ -10,7 +10,7 @@
"license": "MIT",
"homepage": "https://elektrofuzzis.github.io/en/index.html#top",
"dependencies": {
"Elektrofuzzis/ftswarm-core": "0.5.3"
"Elektrofuzzis/ftswarm-core": "symlink://../ftswarm-core"
},
"frameworks": "arduino",
"platforms": "espressif32"
Expand Down
4 changes: 2 additions & 2 deletions src/ftswarm-control/library.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "ftswarm-control",
"version": "0.5.3",
"version": "0.6.0",
"description": "The goal of the ftSwarm project is to build small networked controllers for DIY and toy applications. Since they are networked with each other, they can act like a swarm. For example, they can act as several independent robots to solve a task together. In larger models, the controllers can be installed at different positions close to actuators and sensors - together they control the complete model.\n\n This is the library for ftSwarmControl-type controllers",
"keywords": "ftswarm, swarm, network, controller, fischertechnik, robot, model, actuator, sensor",
"repository": {
Expand All @@ -10,7 +10,7 @@
"license": "MIT",
"homepage": "https://elektrofuzzis.github.io/en/index.html#top",
"dependencies": {
"Elektrofuzzis/ftswarm-core": "0.5.3"
"Elektrofuzzis/ftswarm-core": "symlink://../ftswarm-core"
},
"frameworks": "arduino",
"platforms": "espressif32"
Expand Down
60 changes: 34 additions & 26 deletions src/ftswarm-core/include/SwOS.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
#define MAXIDENTIFIER 32
#define MAXACTORS 8
#define MAXINPUTS 8
#define SWOSVERSION "0.5.4"
#define SWOSVERSION "0.6.0"

#include <stdint.h>
#include <cstddef>
Expand All @@ -41,22 +41,29 @@
// max I2C Register
#define MAXI2CREGISTERS 8

// max # of controlers in swarm
// max # of controllers in swarm
#define MAXCTRL 32

typedef uint16_t FtSwarmSerialNumber_t;
typedef uint8_t FtSwarmPort_t;

// some delays
#define shortDelay() vTaskDelay( 25 / portTICK_PERIOD_MS )
#define longDelay() vTaskDelay( 1000 / portTICK_PERIOD_MS )

// **** enumerations ****

// error types
typedef enum { SWOS_OK, SWOS_TIMEOUT, SWOS_DENY } SwOSError_t;

// communication
typedef enum { swarmComWifi = 1, swarmComRS485 = 2, swarmComBoth= 3 } FtSwarmCommunication_t;

// IO types
typedef enum { FTSWARM_UNDEF = -1, FTSWARM_INPUT, FTSWARM_DIGITALINPUT, FTSWARM_ANALOGINPUT, FTSWARM_ACTOR, FTSWARM_BUTTON, FTSWARM_JOYSTICK, FTSWARM_PIXEL, FTSWARM_SERVO, FTSWARM_OLED, FTSWARM_GYRO, FTSWARM_HC165, FTSWARM_I2C, FTSWARM_CAM, FTSWARM_COUNTERINPUT, FTSWARM_FREQUENCYINPUT, FTSWARM_MAXIOTYPE } FtSwarmIOType_t ;

// controler types
typedef enum { FTSWARM_NOCTRL = -1, FTSWARM = 0, FTSWARMCONTROL, FTSWARMCAM, FTSWARMPWRDRIVE, FTSWARMDUINO } FtSwarmControler_t;
// controller types
typedef enum { FTSWARM_NOCTRL = -1, FTSWARM = 0, FTSWARMCONTROL, FTSWARMCAM, FTSWARMPWRDRIVE, FTSWARMDUINO } FtSwarmController_t;

// sensor types
typedef enum { FTSWARM_DIGITAL, FTSWARM_ANALOG, FTSWARM_SWITCH, FTSWARM_REEDSWITCH, FTSWARM_LIGHTBARRIER, FTSWARM_VOLTMETER, FTSWARM_OHMMETER, FTSWARM_THERMOMETER, FTSWARM_LDR, FTSWARM_TRAILSENSOR, FTSWARM_COLORSENSOR, FTSWARM_ULTRASONIC, FTSWARM_CAMSENSOR, FTSWARM_COUNTER, FTSWARM_ROTARYENCODER, FTSWARM_FREQUENCYMETER, FTSWARM_MAXSENSOR } FtSwarmSensor_t;
Expand All @@ -74,7 +81,8 @@ typedef enum {
FTSWARMRS_2V1,
FTSWARMCAM_2V11,
FTSWARMDUINO_1V141,
FTSWARMPWRDRIVE_1V141 } FtSwarmVersion_t;
FTSWARMPWRDRIVE_1V141,
FTSWARMXL_1V00 } FtSwarmVersion_t;

// how to move
typedef enum { FTSWARM_COAST, FTSWARM_BRAKE, FTSWARM_ON, FTSWARM_MAXMOTION } FtSwarmMotion_t;
Expand Down Expand Up @@ -102,7 +110,7 @@ typedef enum {
Black = 0x000000
} FtSwarmColor;

#define MAXSPEED256 256
#define MAXSPEED256 255
#define MAXSPEED4096 4095

// **** port definitions ****
Expand Down Expand Up @@ -197,7 +205,7 @@ class FtSwarmInput : public FtSwarmIO {
// **** input / actor classes to use in your sketch ****

class FtSwarmDigitalInput : public FtSwarmInput {
// digital inputs. ports A1..A4, all controler types
// digital inputs. ports A1..A4, all controller types

protected:
FtSwarmDigitalInput( FtSwarmSerialNumber_t serialNumber, FtSwarmPort_t port, FtSwarmSensor_t sensorType, bool normallyOpen = true);
Expand All @@ -217,22 +225,22 @@ class FtSwarmDigitalInput : public FtSwarmInput {
};

class FtSwarmSwitch : public FtSwarmDigitalInput {
// all kind of mechanical switches, A1..A4 all controlers
// all kind of mechanical switches, A1..A4 all controllers
// fischertechnik switches: 1-3 is normally open, 1-2 is normally closed
public:
FtSwarmSwitch( FtSwarmSerialNumber_t serialNumber, FtSwarmPort_t port, bool normallyOpen = true);
FtSwarmSwitch( const char *name, bool normallyOpen = true );
};

class FtSwarmReedSwitch : public FtSwarmDigitalInput {
// reed switches, A1..A4 all controlers
// reed switches, A1..A4 all controllers
public:
FtSwarmReedSwitch( FtSwarmSerialNumber_t serialNumber, FtSwarmPort_t port, bool normallyOpen = true);
FtSwarmReedSwitch( const char *name, bool normallyOpen = true);
};

class FtSwarmLightBarrier: public FtSwarmDigitalInput {
// photo transistor as light barrier, A1..A4 all controlers
// photo transistor as light barrier, A1..A4 all controllers
public:
FtSwarmLightBarrier( FtSwarmSerialNumber_t serialNumber, FtSwarmPort_t port, bool normallyOpen = true);
FtSwarmLightBarrier( const char *name, bool normallyOpen = true);
Expand Down Expand Up @@ -346,21 +354,21 @@ class FtSwarmLDR : public FtSwarmAnalogInput {
class FtSwarmActor : public FtSwarmIO {
// an actor base class, don't use this class at all
protected:
FtSwarmActor( FtSwarmSerialNumber_t serialNumber, FtSwarmPort_t port, FtSwarmActor_t actorType );
FtSwarmActor( const char *name, FtSwarmActor_t actorType );
FtSwarmActor( FtSwarmSerialNumber_t serialNumber, FtSwarmPort_t port, FtSwarmActor_t actorType, bool highResolution );
FtSwarmActor( const char *name, FtSwarmActor_t actorType, bool highResolution );
};


class FtSwarmMotor : public FtSwarmActor {
// general motor class, use this class for (old) gray motors, mini motors, XS motors
// M1..M2 all contollers - keep power budget in mind!
protected:
FtSwarmMotor( FtSwarmSerialNumber_t serialNumber, FtSwarmPort_t port, FtSwarmActor_t actorType );
FtSwarmMotor( const char *name, FtSwarmActor_t actorType );
FtSwarmMotor( FtSwarmSerialNumber_t serialNumber, FtSwarmPort_t port, FtSwarmActor_t actorType, bool highResolution );
FtSwarmMotor( const char *name, FtSwarmActor_t actorType, bool highResolution );
public:
FtSwarmMotor( FtSwarmSerialNumber_t serialNumber, FtSwarmPort_t port ):FtSwarmMotor( serialNumber, port, FTSWARM_MOTOR ) {};
FtSwarmMotor( const char *name ):FtSwarmMotor( name, FTSWARM_MOTOR ) {};
void setSpeed( int16_t speed ); // speed +/- 255 or +/-4095 dependend on speedRange, speed 0 motor stopss
FtSwarmMotor( FtSwarmSerialNumber_t serialNumber, FtSwarmPort_t port, bool highResolution = false ):FtSwarmMotor( serialNumber, port, FTSWARM_MOTOR, highResolution ) {};
FtSwarmMotor( const char *name, bool highResolution = false ):FtSwarmMotor( name, FTSWARM_MOTOR, highResolution ) {};
void setSpeed( int16_t speed ); // speed +/- 255 or +/-4095 dependend on resolution, speed 0 motor stopss
uint16_t getSpeed(); // actual speed
void setAcceleration( uint32_t rampUpT, uint32_t rampUpY );
void getAcceleration( uint32_t *rampUpT, uint32_t *rampUpY );
Expand All @@ -371,12 +379,12 @@ class FtSwarmTractorMotor : public FtSwarmMotor {
// tractor & XM motor
// M1..M2 all contollers - keep power budget in mind!
protected:
FtSwarmTractorMotor( FtSwarmSerialNumber_t serialNumber, FtSwarmPort_t port, FtSwarmActor_t actorType );
FtSwarmTractorMotor( const char * name, FtSwarmActor_t actorType );
FtSwarmTractorMotor( FtSwarmSerialNumber_t serialNumber, FtSwarmPort_t port, FtSwarmActor_t actorType, bool highResolution );
FtSwarmTractorMotor( const char * name, FtSwarmActor_t actorType, bool highResolution );

public:
FtSwarmTractorMotor( FtSwarmSerialNumber_t serialNumber, FtSwarmPort_t port );
FtSwarmTractorMotor( const char * name );
FtSwarmTractorMotor( FtSwarmSerialNumber_t serialNumber, FtSwarmPort_t port, bool highResolution = false );
FtSwarmTractorMotor( const char * name, bool highResolution = false );

// FtSwarmTractor has different options for stopping motor:
virtual void setMotionType( FtSwarmMotion_t motionType );
Expand All @@ -389,17 +397,17 @@ class FtSwarmXMMotor : public FtSwarmTractorMotor {
// xm motor
// M1..M2 all contollers - keep power budget in mind!
public:
FtSwarmXMMotor( FtSwarmSerialNumber_t serialNumber, FtSwarmPort_t port);
FtSwarmXMMotor( const char * name );
FtSwarmXMMotor( FtSwarmSerialNumber_t serialNumber, FtSwarmPort_t port, bool highResolution = false);
FtSwarmXMMotor( const char * name, bool highResolution = false );
};

class FtSwarmEncoderMotor : public FtSwarmTractorMotor {
// encoder motor
// M1..M2 all contollers - keep power budget in mind!
// TODO: implement encoder input
public:
FtSwarmEncoderMotor( FtSwarmSerialNumber_t serialNumber, FtSwarmPort_t port );
FtSwarmEncoderMotor( const char * name );
FtSwarmEncoderMotor( FtSwarmSerialNumber_t serialNumber, FtSwarmPort_t port, bool highResolution = false );
FtSwarmEncoderMotor( const char * name, bool highResolution = false );
};

class FtSwarmStepperMotor : public FtSwarmTractorMotor {
Expand Down Expand Up @@ -595,10 +603,10 @@ class FtSwarm {

public:
FtSwarmSerialNumber_t begin( bool verbose = false ); // start my swarm
void setReadDelay( uint16_t readDelay ); // set delay between two measures
void halt( void ); // stop all actors
bool waitOnUserEvent( int parameter[10], TickType_t xTicksToWait = 512 );
bool sendEventData( uint8_t *buffer, size_t size );
bool IOAvaliable( const char *name ) { return false; };
};

// There is one only
Expand Down
2 changes: 1 addition & 1 deletion src/ftswarm-core/include/SwOSCLI.h
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ class SwOSCLI {
void executePixelCmd( void );
void executeI2CCmd( void );
void executeIOCommand( void );
void executeControlerCmd( void );
void executeControllerCmd( void );
bool eval( void );
void help( void );
void startCLI( bool noEcho );
Expand Down
15 changes: 8 additions & 7 deletions src/ftswarm-core/include/SwOSCom.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*
* SwOSCom.h
*
* Communication between your controlers
* Communication between your controllers
*
* (C) 2021/22 Christian Bergschneider & Stefan Fuss
*
Expand All @@ -20,13 +20,13 @@

#define ESPNOW_MAXDELAY 128
#define DEFAULTSECRET 0x2506
#define VERSIONDATA 6
#define VERSIONDATA 7
#define MAXALIAS 5
#define MAXUSEREVENTPAYLOAD 128

typedef enum {
CMD_SWARMJOIN, // I want to join a swarm
CMD_SWARMJOINACK, // Acknowledge on join swarm
CMD_ACK, // Acknowledge a cmd
CMD_SWARMLEAVE, // leave swarm
CMD_ANYBODYOUTTHERE, // Broadcast to get known by everybody
CMD_GOTYOU, // anybody's reply on ANYBODYOUTTHERE
Expand Down Expand Up @@ -78,9 +78,9 @@ struct registerControl_t {
} __attribute__((packed));

struct registerCmd_t {
FtSwarmControler_t ctrlType;
FtSwarmController_t ctrlType;
FtSwarmVersion_t versionCPU;
bool IAmAKelda;
bool IAmKelda;
FtSwarmExtMode_t extentionPort;
uint8_t leds;
} __attribute__((packed));
Expand All @@ -95,14 +95,15 @@ struct SwOSDatagram_t {
SwOSCommand_t cmd;
union {
registerCmd_t registerCmd;
struct { uint16_t pin; uint16_t swarmSecret; char swarmName[MAXIDENTIFIER]; } joinCmd;
struct { uint16_t pin; uint16_t swarmSecret; char swarmName[MAXIDENTIFIER]; bool IAmKelda; } joinCmd;
struct { SwOSCommand_t cmd; SwOSError_t error; uint16_t secret; } ackCmd;
struct { uint32_t inputValue[MAXINPUTS]; int16_t LR[2]; int16_t FB[2]; uint8_t hc165;} stateCmd;
struct { bool isHoming[4]; bool isRunning[4]; uint32_t inputValue[5]; long distance[4]; long position[4];} stepperStateCmd;
struct { uint8_t index; FtSwarmSensor_t sensorType; bool normallyOpen; } sensorCmd __attribute__((packed));
struct { uint8_t index; int16_t offset; int16_t position; } servoCmd;
struct { uint8_t index; FtSwarmMotion_t motionType; int16_t speed; uint32_t rampUpT; uint32_t rampUpY; } actorSpeedCmd;
struct { uint8_t index; long paraml; bool paramb; } actorStepperCmd;
struct { uint8_t index; FtSwarmActor_t actorType; } actorTypeCmd;
struct { uint8_t index; FtSwarmActor_t actorType; bool highResolution; } actorTypeCmd;
struct { uint8_t index; uint8_t brightness; uint32_t color; } ledCmd;
struct { Alias_t alias[MAXALIAS]; } aliasCmd;
struct { uint8_t reg; uint8_t value; } I2CRegisterCmd;
Expand Down
Loading

0 comments on commit 35914c2

Please sign in to comment.