Blueprint

Jason's Flight Controller

Simple Flight Controller. I Intend on making this for RC planes

Created by anadskman anadskman

Tier 3

2 views

0 followers

No Demo Yet

anadskman anadskman added to the journal ago

Made The Flight Controller

Soo...
image

I didnt realise i was suppose to journal this as it was a guided project but ill try to explain my process.
I started by Making the schematic, I imported the custom parts from lcsc to kicad using a python script.
`
import argparse
import os
import shutil
import subprocess
import sys

def run_easyeda2kicad_from_file(input_file, output_dir="./lib/lcsc", python_exec="python"):
    input_file = os.path.expanduser(input_file)
    output_dir = os.path.expanduser(output_dir)
    python_exec = python_exec or "python"

    if not os.path.isfile(input_file):
        print(f"Error: File not found: {input_file}")
        return 2

    # If a simple name was provided, check PATH; if an absolute path, check that file exists.
    found = shutil.which(python_exec) if os.path.basename(python_exec) == python_exec else os.path.exists(python_exec)
    if not found:
        print(f"Warning: Python executable '{python_exec}' not found in PATH or as given path. Trying anyway.")

   os.makedirs(output_dir, exist_ok=True)

    with open(input_file, "r", encoding="utf-8") as f:
        # ignore blank lines and comments
        lines = [line.strip() for line in f if line.strip() and not line.lstrip().startswith("#")]

    if not lines:
        print("No LCSC IDs found in input file.")
        return 0

    for idx, lcsc_id in enumerate(lines, start=1):
        cmd = [
            python_exec,
           "-m", "easyeda2kicad",
           "--full",
            f"--lcsc_id={lcsc_id}",
            f"--output={output_dir}",
        ]
        print(f"[{idx}/{len(lines)}] Running: {' '.join(cmd)}")
        try:
            subprocess.run(cmd, check=True)
        except subprocess.CalledProcessError as e:
            print(f"❌ Error processing {lcsc_id}: {e}")
        except FileNotFoundError as e:
            print(f"❌ Executable not found: {e}")
            return 3

    print("✅ All commands completed.")
    return 0

def main(argv=None):
    parser = argparse.ArgumentParser(description="Run easyeda2kicad for a list of LCSC IDs.")
    parser.add_argument("input_file", nargs="?", default="./hardware/lcsc.txt", help="Path to file with one LCSC ID per line")
    parser.add_argument("output_dir", nargs="?", default="./lib/lcsc", help="Output directory")
    parser.add_argument("--python", dest="python_exec", default="python",
                       help="Python executable to use (default: 'python')")
    args = parser.parse_args(argv)

    return_code = run_easyeda2kicad_from_file(args.input_file, args.output_dir, args.python_exec)
    sys.exit(return_code if isinstance(return_code, int) else 0)

if __name__ == "__main__":
    main()

`

Code From Guide

Afterwards i started wiring everything together, following parts datasheets to help.
image
After wiring the USB-C Port, Crystals, Decoupling, reset and boot Buttons, Servo headers, Battery Charger, Pressure Sensor, MicroSD Card, IMU, 5V Buck-boost, 3.3V Buck, I worked on the Microcontroller.

I Downloaded STM32CubeMX and open the project for STM32F722RET. I edited all the pins needed for the flight controller.
image
image

Lastly I Assigned all the footprints for each part.
image

I didnt track the time as i didnt know i had to journal until now so ill have to guess and its unfortually over 3 hours

anadskman anadskman started Jason's Flight Controller ago

3/3/2026 - Made The Flight Controller

Soo...
image

I didnt realise i was suppose to journal this as it was a guided project but ill try to explain my process.
I started by Making the schematic, I imported the custom parts from lcsc to kicad using a python script.
`
import argparse
import os
import shutil
import subprocess
import sys

def run_easyeda2kicad_from_file(input_file, output_dir="./lib/lcsc", python_exec="python"):
    input_file = os.path.expanduser(input_file)
    output_dir = os.path.expanduser(output_dir)
    python_exec = python_exec or "python"

    if not os.path.isfile(input_file):
        print(f"Error: File not found: {input_file}")
        return 2

    # If a simple name was provided, check PATH; if an absolute path, check that file exists.
    found = shutil.which(python_exec) if os.path.basename(python_exec) == python_exec else os.path.exists(python_exec)
    if not found:
        print(f"Warning: Python executable '{python_exec}' not found in PATH or as given path. Trying anyway.")

   os.makedirs(output_dir, exist_ok=True)

    with open(input_file, "r", encoding="utf-8") as f:
        # ignore blank lines and comments
        lines = [line.strip() for line in f if line.strip() and not line.lstrip().startswith("#")]

    if not lines:
        print("No LCSC IDs found in input file.")
        return 0

    for idx, lcsc_id in enumerate(lines, start=1):
        cmd = [
            python_exec,
           "-m", "easyeda2kicad",
           "--full",
            f"--lcsc_id={lcsc_id}",
            f"--output={output_dir}",
        ]
        print(f"[{idx}/{len(lines)}] Running: {' '.join(cmd)}")
        try:
            subprocess.run(cmd, check=True)
        except subprocess.CalledProcessError as e:
            print(f"❌ Error processing {lcsc_id}: {e}")
        except FileNotFoundError as e:
            print(f"❌ Executable not found: {e}")
            return 3

    print("✅ All commands completed.")
    return 0

def main(argv=None):
    parser = argparse.ArgumentParser(description="Run easyeda2kicad for a list of LCSC IDs.")
    parser.add_argument("input_file", nargs="?", default="./hardware/lcsc.txt", help="Path to file with one LCSC ID per line")
    parser.add_argument("output_dir", nargs="?", default="./lib/lcsc", help="Output directory")
    parser.add_argument("--python", dest="python_exec", default="python",
                       help="Python executable to use (default: 'python')")
    args = parser.parse_args(argv)

    return_code = run_easyeda2kicad_from_file(args.input_file, args.output_dir, args.python_exec)
    sys.exit(return_code if isinstance(return_code, int) else 0)

if __name__ == "__main__":
    main()

`

Code From Guide

Afterwards i started wiring everything together, following parts datasheets to help.
image
After wiring the USB-C Port, Crystals, Decoupling, reset and boot Buttons, Servo headers, Battery Charger, Pressure Sensor, MicroSD Card, IMU, 5V Buck-boost, 3.3V Buck, I worked on the Microcontroller.

I Downloaded STM32CubeMX and open the project for STM32F722RET. I edited all the pins needed for the flight controller.
image
image

Lastly I Assigned all the footprints for each part.
image

I didnt track the time as i didnt know i had to journal until now so ill have to guess and its unfortually over 3 hours