Marlin or Repetier are the two main firmware choices in the open source realm; I suggest using one of those.

https://github.com/MarlinFirmware/Marlin

https://www.repetier.com/documentation/repetier-firmware/