python, Java, С# .... языки требующие интерпретатора который имеет значительный размер и в память контроллера даже если и помещается то всерьез рассматривать такое решение я бы не стал. Эти языки отлично работают в устройствах имеющих операционную систему (например смартфон).
Языки С, С++, Assembler - есть для 100% контроллеров, они на выходе выдают исполняемый машинный код который собственно и пишется в память контроллера.
Если есть твердое желание программировать контроллеры то С++ лучший выбор .Тем более, что по синтаксису все языки достаточно похожи. Ардуино для старта идеальный вариант. Так как многие узкие вопросы связанные с "Железом" решены из "коробки" и можно не морочиться с пониманием того, что там работает внутри контроллера.